Compare commits

..

6 Commits

Author SHA1 Message Date
1633b1cca0 initial commit 2024-01-02 10:53:39 +01:00
e30f54e485 yes 2024-01-02 10:14:40 +01:00
8546301ce5 new changes to add spc 2024-01-01 09:35:34 +01:00
cf20979b1c testing 2023-12-31 08:35:31 +01:00
b9b1b73be9 initial data 2023-12-31 08:16:48 +01:00
38897888cf test 2023-12-31 07:36:28 +01:00
789 changed files with 275751 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
**/*.pyc
.coverage
htmlcov
**/.DS_Store
**/*.log

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 ArjanCodes and Mark Todisco
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

61
assets/style.css Normal file
View File

@ -0,0 +1,61 @@
hr {
border-top: 2px solid gray;
}
.dropdown-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.dropdown-button {
width: 100%;
margin-top: 5px;
}
.tabs-group {
padding-top: 20px;
}
.app-div {
padding: 10px;
}
.data-table-div {
margin: auto;
padding: 10px;
}
.budget-label {
font-size: 20px;
font-weight: bold;
}
.budget-text {
font-size: 20px;
}
.budget-text-value {
font-size: 20px;
font-style: italic;
}
.budget-progress-bar {
height: 20px;
}
.budget-tooltip {
font-size: 18px;
}
.checklist {
text-align: center;
padding-top: 10px;
padding-bottom: 20px;
}
@media(max-width: 800px) {
.dropdown-container {
grid-template-columns: 1fr;
}
}

247
bin/Activate.ps1 Normal file
View File

@ -0,0 +1,247 @@
<#
.Synopsis
Activate a Python virtual environment for the current PowerShell session.
.Description
Pushes the python executable for a virtual environment to the front of the
$Env:PATH environment variable and sets the prompt to signify that you are
in a Python virtual environment. Makes use of the command line switches as
well as the `pyvenv.cfg` file values present in the virtual environment.
.Parameter VenvDir
Path to the directory that contains the virtual environment to activate. The
default value for this is the parent of the directory that the Activate.ps1
script is located within.
.Parameter Prompt
The prompt prefix to display when this virtual environment is activated. By
default, this prompt is the name of the virtual environment folder (VenvDir)
surrounded by parentheses and followed by a single space (ie. '(.venv) ').
.Example
Activate.ps1
Activates the Python virtual environment that contains the Activate.ps1 script.
.Example
Activate.ps1 -Verbose
Activates the Python virtual environment that contains the Activate.ps1 script,
and shows extra information about the activation as it executes.
.Example
Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
Activates the Python virtual environment located in the specified location.
.Example
Activate.ps1 -Prompt "MyPython"
Activates the Python virtual environment that contains the Activate.ps1 script,
and prefixes the current prompt with the specified string (surrounded in
parentheses) while the virtual environment is active.
.Notes
On Windows, it may be required to enable this Activate.ps1 script by setting the
execution policy for the user. You can do this by issuing the following PowerShell
command:
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
For more information on Execution Policies:
https://go.microsoft.com/fwlink/?LinkID=135170
#>
Param(
[Parameter(Mandatory = $false)]
[String]
$VenvDir,
[Parameter(Mandatory = $false)]
[String]
$Prompt
)
<# Function declarations --------------------------------------------------- #>
<#
.Synopsis
Remove all shell session elements added by the Activate script, including the
addition of the virtual environment's Python executable from the beginning of
the PATH variable.
.Parameter NonDestructive
If present, do not remove this function from the global namespace for the
session.
#>
function global:deactivate ([switch]$NonDestructive) {
# Revert to original values
# The prior prompt:
if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
}
# The prior PYTHONHOME:
if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
}
# The prior PATH:
if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
Remove-Item -Path Env:_OLD_VIRTUAL_PATH
}
# Just remove the VIRTUAL_ENV altogether:
if (Test-Path -Path Env:VIRTUAL_ENV) {
Remove-Item -Path env:VIRTUAL_ENV
}
# Just remove VIRTUAL_ENV_PROMPT altogether.
if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
Remove-Item -Path env:VIRTUAL_ENV_PROMPT
}
# Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
}
# Leave deactivate function in the global namespace if requested:
if (-not $NonDestructive) {
Remove-Item -Path function:deactivate
}
}
<#
.Description
Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
given folder, and returns them in a map.
For each line in the pyvenv.cfg file, if that line can be parsed into exactly
two strings separated by `=` (with any amount of whitespace surrounding the =)
then it is considered a `key = value` line. The left hand string is the key,
the right hand is the value.
If the value starts with a `'` or a `"` then the first and last character is
stripped from the value before being captured.
.Parameter ConfigDir
Path to the directory that contains the `pyvenv.cfg` file.
#>
function Get-PyVenvConfig(
[String]
$ConfigDir
) {
Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
# Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
$pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
# An empty map will be returned if no config file is found.
$pyvenvConfig = @{ }
if ($pyvenvConfigPath) {
Write-Verbose "File exists, parse `key = value` lines"
$pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
$pyvenvConfigContent | ForEach-Object {
$keyval = $PSItem -split "\s*=\s*", 2
if ($keyval[0] -and $keyval[1]) {
$val = $keyval[1]
# Remove extraneous quotations around a string value.
if ("'""".Contains($val.Substring(0, 1))) {
$val = $val.Substring(1, $val.Length - 2)
}
$pyvenvConfig[$keyval[0]] = $val
Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
}
}
}
return $pyvenvConfig
}
<# Begin Activate script --------------------------------------------------- #>
# Determine the containing directory of this script
$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
$VenvExecDir = Get-Item -Path $VenvExecPath
Write-Verbose "Activation script is located in path: '$VenvExecPath'"
Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
# Set values required in priority: CmdLine, ConfigFile, Default
# First, get the location of the virtual environment, it might not be
# VenvExecDir if specified on the command line.
if ($VenvDir) {
Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
}
else {
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
Write-Verbose "VenvDir=$VenvDir"
}
# Next, read the `pyvenv.cfg` file to determine any required value such
# as `prompt`.
$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
# Next, set the prompt from the command line, or the config file, or
# just use the name of the virtual environment folder.
if ($Prompt) {
Write-Verbose "Prompt specified as argument, using '$Prompt'"
}
else {
Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
$Prompt = $pyvenvCfg['prompt'];
}
else {
Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
$Prompt = Split-Path -Path $venvDir -Leaf
}
}
Write-Verbose "Prompt = '$Prompt'"
Write-Verbose "VenvDir='$VenvDir'"
# Deactivate any currently active virtual environment, but leave the
# deactivate function in place.
deactivate -nondestructive
# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
# that there is an activated venv.
$env:VIRTUAL_ENV = $VenvDir
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
Write-Verbose "Setting prompt to '$Prompt'"
# Set the prompt to include the env name
# Make sure _OLD_VIRTUAL_PROMPT is global
function global:_OLD_VIRTUAL_PROMPT { "" }
Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
function global:prompt {
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
_OLD_VIRTUAL_PROMPT
}
$env:VIRTUAL_ENV_PROMPT = $Prompt
}
# Clear PYTHONHOME
if (Test-Path -Path Env:PYTHONHOME) {
Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
Remove-Item -Path Env:PYTHONHOME
}
# Add the venv to the PATH
Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"

69
bin/activate Normal file
View File

@ -0,0 +1,69 @@
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
# reset old environment variables
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
PATH="${_OLD_VIRTUAL_PATH:-}"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
hash -r 2> /dev/null
fi
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
PS1="${_OLD_VIRTUAL_PS1:-}"
export PS1
unset _OLD_VIRTUAL_PS1
fi
unset VIRTUAL_ENV
unset VIRTUAL_ENV_PROMPT
if [ ! "${1:-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}
# unset irrelevant variables
deactivate nondestructive
VIRTUAL_ENV="/Users/jackleene/2022-dash_v1"
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
if [ -n "${PYTHONHOME:-}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
unset PYTHONHOME
fi
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1:-}"
PS1="(2022-dash_v1) ${PS1:-}"
export PS1
VIRTUAL_ENV_PROMPT="(2022-dash_v1) "
export VIRTUAL_ENV_PROMPT
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
hash -r 2> /dev/null
fi

26
bin/activate.csh Normal file
View File

@ -0,0 +1,26 @@
# This file must be used with "source bin/activate.csh" *from csh*.
# You cannot run it directly.
# Created by Davide Di Blasi <davidedb@gmail.com>.
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate'
# Unset irrelevant variables.
deactivate nondestructive
setenv VIRTUAL_ENV "/Users/jackleene/2022-dash_v1"
set _OLD_VIRTUAL_PATH="$PATH"
setenv PATH "$VIRTUAL_ENV/bin:$PATH"
set _OLD_VIRTUAL_PROMPT="$prompt"
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
set prompt = "(2022-dash_v1) $prompt"
setenv VIRTUAL_ENV_PROMPT "(2022-dash_v1) "
endif
alias pydoc python -m pydoc
rehash

69
bin/activate.fish Normal file
View File

@ -0,0 +1,69 @@
# This file must be used with "source <venv>/bin/activate.fish" *from fish*
# (https://fishshell.com/); you cannot run it directly.
function deactivate -d "Exit virtual environment and return to normal shell environment"
# reset old environment variables
if test -n "$_OLD_VIRTUAL_PATH"
set -gx PATH $_OLD_VIRTUAL_PATH
set -e _OLD_VIRTUAL_PATH
end
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
set -gx PYTHONHOME $_OLD_VIRTUAL_PYTHONHOME
set -e _OLD_VIRTUAL_PYTHONHOME
end
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
set -e _OLD_FISH_PROMPT_OVERRIDE
# prevents error when using nested fish instances (Issue #93858)
if functions -q _old_fish_prompt
functions -e fish_prompt
functions -c _old_fish_prompt fish_prompt
functions -e _old_fish_prompt
end
end
set -e VIRTUAL_ENV
set -e VIRTUAL_ENV_PROMPT
if test "$argv[1]" != "nondestructive"
# Self-destruct!
functions -e deactivate
end
end
# Unset irrelevant variables.
deactivate nondestructive
set -gx VIRTUAL_ENV "/Users/jackleene/2022-dash_v1"
set -gx _OLD_VIRTUAL_PATH $PATH
set -gx PATH "$VIRTUAL_ENV/bin" $PATH
# Unset PYTHONHOME if set.
if set -q PYTHONHOME
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
set -e PYTHONHOME
end
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
# fish uses a function instead of an env var to generate the prompt.
# Save the current fish_prompt function as the function _old_fish_prompt.
functions -c fish_prompt _old_fish_prompt
# With the original prompt function renamed, we can override with our own.
function fish_prompt
# Save the return status of the last command.
set -l old_status $status
# Output the venv prompt; color taken from the blue of the Python logo.
printf "%s%s%s" (set_color 4B8BBE) "(2022-dash_v1) " (set_color normal)
# Restore the return status of the previous command.
echo "exit $old_status" | .
# Output the original/"old" prompt.
_old_fish_prompt
end
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
set -gx VIRTUAL_ENV_PROMPT "(2022-dash_v1) "
end

8
bin/pip Executable file
View File

@ -0,0 +1,8 @@
#!/Users/jackleene/2022-dash_v1/bin/python3.11
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pip3 Executable file
View File

@ -0,0 +1,8 @@
#!/Users/jackleene/2022-dash_v1/bin/python3.11
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

8
bin/pip3.11 Executable file
View File

@ -0,0 +1,8 @@
#!/Users/jackleene/2022-dash_v1/bin/python3.11
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

1
bin/python Symbolic link
View File

@ -0,0 +1 @@
python3.11

1
bin/python3 Symbolic link
View File

@ -0,0 +1 @@
python3.11

1
bin/python3.11 Symbolic link
View File

@ -0,0 +1 @@
/Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11

4
config.json Normal file
View File

@ -0,0 +1,4 @@
{
"Startup":"program to make life easier",
"DATA_PATH":"./data/transactions.csv.gz"
}

290
data/.Rhistory Normal file
View File

@ -0,0 +1,290 @@
install.packages("tidyverse")
install.packages("qcc")
install.packages("skimr")
install.packages("rmarkdown")
x=seq(1,10)
y=seq(sapply(1:10,random(1,1)))
?Random
install.packages(DT)
install.packages("DT")
if (!require("DT")) install.packages('DT')
library(DT)
?DT
class(datatable(iris))
?htmlwidget
??htmlwidget
install.packages("palletteer")
install.packages("paletteer")
install.packages("gapminder")
install.packages("ggthemes")
install.packages("collapsebleTree")
devtools::install_github("AdeelK93/collapsibleTree")
install.packages("devtools")
devtools::install_github("AdeelK93/collapsibleTree")
install.packages("ggthemes")
names(iris)
?theme_tufte()
names(iris)
library(gapminder)
attach(gapminder)
gapminder<-gapminder %>%
filter(year) %>%
arrange(-pop) %>%
slice(1:50) %>%
mutate(GDP=gdpPercap*Pop)
library(dplyr)
gapminder<-gapminder %>%
filter(year) %>%
arrange(-pop) %>%
slice(1:50) %>%
mutate(GDP=gdpPercap*Pop)
rlang::last_error
rlang::last_error()
names(gapminder)
table(gapminder$year)
class(gapminder$year)
library(usethis)
library(ggplot2)
install.packages(c("bit", "boot", "brew", "broom", "bslib", "cachem", "callr", "class", "cli", "cluster", "codetools", "colorspace", "commonmark", "cpp11", "crayon", "curl", "data.table", "dbplyr", "devtools", "digest", "dplyr", "DT", "dtplyr", "evaluate", "fansi", "fastmap", "flexdashboard", "fontawesome", "forcats", "foreign", "fs", "gapminder", "gargle", "gert", "ggplot2", "gh", "gtable", "haven", "highr", "hms", "htmltools", "htmlwidgets", "httpuv", "httr", "isoband", "jsonlite", "knitr", "lifecycle", "lubridate", "markdown", "MASS", "Matrix", "mgcv", "modelr", "nlme", "nnet", "openssl", "paletteer", "pillar", "pkgbuild", "pkgdown", "pkgload", "processx", "ps", "purrr", "ragg", "Rcpp", "readr", "readxl", "repr", "reprex", "rlang", "rmarkdown", "roxygen2", "rpart", "rstudioapi", "rvest", "sass", "scales", "shiny", "skimr", "sourcetools", "spatial", "stringi", "stringr", "survival", "sys", "testthat", "tibble", "tidyr", "tidyselect", "tidyverse", "tinytex", "utf8", "vctrs", "viridisLite", "vroom", "whisker", "xfun", "yaml", "zip"))
install.packages(c("bit", "boot", "brew", "broom", "bslib", "cachem", "callr", "class", "cli", "cluster", "codetools", "colorspace", "commonmark", "cpp11", "crayon", "curl", "data.table", "dbplyr", "devtools", "digest", "dplyr", "DT", "dtplyr", "evaluate", "fansi", "fastmap", "flexdashboard", "fontawesome", "forcats", "foreign", "fs", "gapminder", "gargle", "gert", "ggplot2", "gh", "gtable", "haven", "highr", "hms", "htmltools", "htmlwidgets", "httpuv", "httr", "isoband", "jsonlite", "knitr", "lifecycle", "lubridate", "markdown", "MASS", "Matrix", "mgcv", "modelr", "nlme", "nnet", "openssl", "paletteer", "pillar", "pkgbuild", "pkgdown", "pkgload", "processx", "ps", "purrr", "ragg", "Rcpp", "readr", "readxl", "repr", "reprex", "rlang", "rmarkdown", "roxygen2", "rpart", "rstudioapi", "rvest", "sass", "scales", "shiny", "skimr", "sourcetools", "spatial", "stringi", "stringr", "survival", "sys", "testthat", "tibble", "tidyr", "tidyselect", "tidyverse", "tinytex", "utf8", "vctrs", "viridisLite", "vroom", "whisker", "xfun", "yaml", "zip"))
install.packages(c("bit", "boot", "brew", "broom", "bslib", "cachem", "callr", "class", "cli", "cluster", "codetools", "colorspace", "commonmark", "cpp11", "crayon", "curl", "data.table", "dbplyr", "devtools", "digest", "dplyr", "DT", "dtplyr", "evaluate", "fansi", "fastmap", "flexdashboard", "fontawesome", "forcats", "foreign", "fs", "gapminder", "gargle", "gert", "ggplot2", "gh", "gtable", "haven", "highr", "hms", "htmltools", "htmlwidgets", "httpuv", "httr", "isoband", "jsonlite", "knitr", "lifecycle", "lubridate", "markdown", "MASS", "Matrix", "mgcv", "modelr", "nlme", "nnet", "openssl", "paletteer", "pillar", "pkgbuild", "pkgdown", "pkgload", "processx", "ps", "purrr", "ragg", "Rcpp", "readr", "readxl", "repr", "reprex", "rlang", "rmarkdown", "roxygen2", "rpart", "rstudioapi", "rvest", "sass", "scales", "shiny", "skimr", "sourcetools", "spatial", "stringi", "stringr", "survival", "sys", "testthat", "tibble", "tidyr", "tidyselect", "tidyverse", "tinytex", "utf8", "vctrs", "viridisLite", "vroom", "whisker", "xfun", "yaml", "zip"))
yes
library(ggplot2)
install.packages("usethis")
usethis:edit_r_profile()
library(usethis)
usethis:edit_r_profile()
usethis::edit_r_profile()
options(
usethis.description = list(
`Authors@R` = 'person("jack", "leene", email = "jack@leene.dev", role = c("aut", "cre"))',
License = "MIT + file LICENSE",
Version = "0.0.0.9000"
),
usethis.full_name = "First Last",
usethis.protocol = "https",
vsc.rstudioapi = TRUE,
warnPartialMatchArgs = TRUE,
warnPartialMatchDollar = TRUE,
warnPartialMatchAttr = TRUE
)
if (interactive()) {
suppressMessages(require(devtools))
suppressMessages(require(usethis))
}
p<-ggplot(iris,aes(Sepal.Length,Sepal.Width))+geom_line()
p<-ggplot(iris,aes(Sepal.Length,Sepal.Width))+geom_line()
p<-ggplot(iris,aes(Sepal.Length,Sepal.Width))+geom_line()
library(ggplot2)
library(DT)
library(ggthemes)
library(gapminder)
p<-ggplot(iris,aes(Sepal.Length,Sepal.Width))+geom_line()
q<-ggplot(iris,aes(Sepel.Width,Sepal.Length))+geom_line()+theme_tufte()
(p)
theme_tufte()
data(gapminder)
q
theme_tufte()
#gapminder<-gapminder %>%
# filter(year) %>%
# arrange(-pop) %>%
# slice(1:50) %>%
# mutate(GDP=gdpPercap*Pop)
#Column {data-width=450}
p=datatable((iris))
print(p)
library(ggplot2)
library(DT)
library(ggthemes)
library(gapminder)
p<-ggplot(iris,aes(Sepal.Length,Sepal.Width))+geom_line()
q<-ggplot(iris,aes(Sepel.Width,Sepal.Length))+geom_line()+theme_tufte()
p=datatable((iris))
print(p)
(p)
theme_tufte()
#gapminder<-gapminder %>%
# filter(year) %>%
# arrange(-pop) %>%
# slice(1:50) %>%
# mutate(GDP=gdpPercap*Pop)
#Column {data-width=450}
theme_tufte()
library(ggplot2)
library(DT)
library(ggthemes)
library(gapminder)
p<-ggplot(iris,aes(Sepal.Length,Sepal.Width))+geom_line()
q<-ggplot(iris,aes(Sepel.Width,Sepal.Length))+geom_line()+theme_tufte()
p=datatable((iris))
print(p)
(p)
#theme_tufte()
#gapminder<-gapminder %>%
# filter(year) %>%
# arrange(-pop) %>%
# slice(1:50) %>%
# mutate(GDP=gdpPercap*Pop)
#Column {data-width=450}
table(iris$Species)
usethis::edit_rstudio_snippets("r")
usethis::edit_rstudio_prefs()
usethis::edit_r_profile()
install.packages(c("class", "KernSmooth", "MASS", "nnet"))
mtcars
a<-mtcars
a
nrow(mtcars)
floor(12/4-2)
floor(2:32/4-2)
floor(2:32/4-1)
floor((1:32)/4-1)
floor((1:32)/4)
floor((1:32-1)/4)
a$group=floor((1:32-1)/4)
a
a$group1=mod((1:32-1),4)
((1:32-1)//4)
((1:32-1)\\4)
1\\4
1//4
mod(1,4()
mod(1,4
mod(1,4)
mod(1 %%4)
(1 %% 4)
a$group1=(1:32 %% 4)
a
a$group1=(1:32 %% 4)+1
a$group1=(0:31 %% 4)+1
a$group1=(0:31 %% 4)
a$group1=(1:32 %% 4)
a<-mtcars
floor(12/4-2)
a$group=floor((1:32-1)/4)
a
a$group=floor((1:32-1) %% 4)
a$group=floor((1:32-1)/4)
a$group=floor((1:32-1)/4)
a
a$group2=((1:32-1)%% 4)
a
names(a)
head(a)
ddply(a,.(group,group2),sumc=sum(cyl))
library(tidyverse)
installed.packages("tidyverse")
install.package("tidyverse")
install.packages("tidyverse")
library(tidyverse)
head(a)
ddply(a,.(group,group2),sumc=sum(cyl))
library(dplyr)
ddply(a,.(group,group2),sumc=sum(cyl))
library(dplyr)
ddply(a,.(group,group2),sumc=sum(cyl))
ddplyr(a,.(group,group2),sumc=sum(cyl))
ddply
library(dplyr)
library(plyr)
install.packages("plyr")
library(plyr)
names(a)
ddply(a,.(group,group2),summarize,sumc=sum(cyl),paste(.group,.group2,col="",sep="_")=sum(cyl))
ddply(a,.(group,group2),summarize,sumc=sum(cyl),paste(.group,.group2,col="",sep="_")=sum(cyl))
starwars %>%
select(name, mass, species) %>%
mutate(mass_norm = mass / mean(mass, na.rm = TRUE))
head(a)
a %>% pivot_wider()
?pivot_wider
map(a$group,function(x){sprinft(x)})
map(a$group,function(x){sprinf(x)})
map(a$group,function(x){prinf(x)})
sprintf
map(a$group,prinf(x))
map(a$group,sprinf(x))
map(a$group,sprinfs(x))
help("paste")
map(a$group,paste(x))
map(a$group,paste(.x))
map(a$group,paste(x))
?map
map(a$group,x)
map(a$group,.x)
set_names(c("foo", "bar")) |> map_chr(paste0, ":suffix")
l1 <- list(list(a = 1L), list(a = NULL, b = 2L), list(b = 3L))
ll
l1
l1 |> map("a", .default = "???")
list(num = 1:3, letters[1:3])
1:10 |>
map(rnorm, n = 10)
1:10 |>
map(\(x) rnorm(10, x))
letters[1:10] |>
map(\(x) sprintf("wafer_%03d",x))
letters[1:10] |>
map(\(int(x)) sprintf("wafer_%03d",x))
letters[1:10] |>
map(int(x) sprintf("wafer_%03d",x))
letters[1:10] |>
map(.x, sprintf("wafer_%03d",x))
letters[1:10] |>
map(x, sprintf("wafer_%03d",x))
letters
letters[1:10]
letters[1:10] |>
map(\x, sprintf("wafer_%03d",x))
letters[1:10] |>
map(\(x), sprintf("wafer_%03d",x))
letters[1:10] |>
map(\x, sprintf("wafer_%03d",x))
letters[1:10] |>
map(x, sprintf("wafer_%03d",x))
[1:10] |>
1:10 |> map(x, sprintf("wafer_%03d",x))
1:10 |> map(x, sprintf("wafer_%03d", x))
1:10 |> map_chr(x, sprintf("wafer_%03d", x))
1:10 |> map_in5(x, sprintf("wafer_%03d", x))
1:10 |> map_int(x, sprintf("wafer_%03d", x))
1:10 |> map(x, sprintf("wafer_%03d", x))
l2 <- list(
list(num = 1:3, letters[1:3]),
list(num = 101:103, letters[4:6]),
list()
)
l2 |> map(c(2, 2))
l2 |> map(list("num", 3))
l2 |> map_int(list("num", 3), .default = NA)
paste(sprintf("wafer_%03d",1:10))
seq(paste(sprintf("wafer_%03d",1:10)),3)
paste(sprintf("wafer_%03d",seq(1:10,3))
)
paste(sprintf("wafer_%03d",seq(1:10,3))
)
seq(3,1:2)
seq(1:2,2)
seq(1:2,a:b)
seq(a,b)
seq(1,3)
R
which R
setwd("/Users/jackleene/2024-dash_v1")
setwd("/Users/jackleene/2024-dash_v1/data")
a=read_csv("spc_mod.csv")
library(readr)
a=read_csv("spc_mod.csv")
library(arrow)
install.packages("arrow")
install.packages("arrow")
install.packages("sparklyr")
install.packages("sparklyr")
install.packages("arrow")
table(a$timestamp)
install.packages("arrow")
names(a)
class(a)
lapply(a,class)
lapply(a,class)

654
data/spc_data.csv Normal file
View File

@ -0,0 +1,654 @@
Batch,Diameter,Etch1,Film-Thickness,Etch2,Line-Width,Overlay,Volume
1,0.429,0.43025,49512,308.75,810,1759,315.5
2,0.421,0.433,47101,306.75,824,1746,305.5
3,0.417,0.4285,60023,311.75,765,1482,330.5
4,0.421,0.43775,55428,322.75,933,1857,319.5
5,0.421,0.41725,46442,312.5,686,1844,323.5
6,0.425,0.44075,45539,309.25,1400,1584,314.5
7,0.421,0.42275,51492,311.75,864,1689,319.5
8,0.425,0.43175,47661,301,858,1782,299
9,0.427,0.44225,70638,304.25,252,1572,319.5
10,0.421,0.42875,45944,339.75,255,1377,289
11,0.421,0.43925,56955,330.25,968,1848,315.5
12,0.417,0.4245,37616,314,473,1689,318.5
13,0.421,0.43175,47953,321.25,840,1528,305.5
14,0.427,0.4295,51891,331.75,1034,1913,316.5
15,0.425,0.43025,42608,306,784,1648,298.5
16,0.425,0.44275,60625,316,796,1470,320
17,0.427,0.4275,42359,295.5,746,1398,306.5
18,0.421,0.43925,46554,307.25,1245,1452,304
19,0.421,0.44575,49564,315,728,1377,314.5
20,0.421,0.4425,47824,318.5,870,1433,304
21,0.421,0.43,48516,305.5,842,1573,298.5
22,0.425,0.42675,75703,306,654,1349,307
23,0.433,0.439,53064,314,1003,1732,317.5
24,0.421,0.4215,51152,304,740,1578,307
25,0.421,0.42675,45172,314.5,821,1507,325
26,0.421,0.4275,49898,297.5,620,1628,297.5
27,0.421,0.43825,43420,315.25,200,1440,303
28,0.421,0.4575,49625,318.5,729,1482,316
29,0.417,0.427,48163,314.25,700,1512,319
30,0.421,0.431,46619,310,870,1578,311
31,0.4213,0.43125,48532,305.75,595,1559,303.5
32,0.425,0.443,53965,316.25,943,1979,310.5
33,0.421,0.42975,49753,318.5,929,1755,312.5
34,0.425,0.4305,48741,305.5,831,1610,307
35,0.421,0.44325,54110,310.25,936,1878,301
36,0.421,0.45425,66539,329.25,952,1580,314.5
37,0.433,0.4405,49898,304,961,1792,316.5
38,0.417,0.4345,44963,315.75,742,1223,303
39,0.421,0.4385,47454,311.5,794,1738,307.5
40,0.421,0.449,45574,326.75,901,1550,320.5
41,0.421,0.4485,47744,311.5,852,1498,313.5
42,0.419,0.4345,73536,307,749,1356,301.5
43,0.421,0.42775,47069,304.75,962,1442,306
44,0.421,0.4385,48274,312.75,662,1530,305.5
45,0.425,0.424,45622,298.5,733,1547,296.5
46,0.421,0.4345,49046,311.5,707,1416,306.5
47,0.433,0.451,55492,320.5,900,1601,317
48,0.421,0.43725,47582,310.25,898,1381,300
49,0.421,0.43125,48387,312.5,915,1750,298.5
50,0.425,0.432,50200,339.75,892,1824,310.5
51,0.421,0.4415,50477,308.25,611,1437,314
52,0.421,0.43725,46715,319,621,1255,309.5
53,0.421,0.427,48242,315.25,898,1894,308.5
54,0.425,0.44275,53676,311.75,616,1517,321
55,0.423,0.42875,44882,305,850,1528,306.5
56,0.421,0.44,50493,310,817,1614,311
57,0.433,0.43725,55654,299.5,770,1617,300.5
58,0.421,0.43825,51200,306,852,1764,312.5
59,0.425,0.43925,54512,314.25,831,1797,328.5
60,0.421,0.44525,44352,303,656,1393,314.5
61,0.421,0.42975,49705,316.75,864,1648,314.5
62,0.421,0.43425,44480,298.25,716,1540,295
63,0.429,0.44275,50718,318.25,1029,1718,304.5
64,0.421,0.451,48435,323.5,691,1587,316
65,0.425,0.44125,53596,307,840,1904,312.5
66,0.421,0.44975,48387,321.25,721,1362,312.5
67,0.429,0.438,46301,301.25,793,1323,317.5
68,0.425,0.44775,45890,312.25,872,1393,312.5
69,0.417,0.43175,44850,312.75,831,1400,300
70,0.425,0.42225,42873,311.75,679,1220,303
71,0.425,0.434,43388,314.75,808,1202,320.5
72,0.421,0.43175,42391,301,667,1402,289.5
73,0.417,0.43775,47760,306,730,1503,314.5
74,0.425,0.43075,54399,305.25,821,1759,324
75,0.418,0.4335,51360,303,821,1642,304.5
76,0.421,0.445,60484,314.5,1029,1839,304.5
77,0.425,0.44375,55800,315,654,1610,314
78,0.421,0.44875,53611,316.75,609,1479,307
79,0.421,0.45475,53756,316,768,1648,323.5
80,0.417,0.449,53756,321.5,786,1440,317
81,0.417,0.4375,48226,316,854,1629,312.5
82,0.425,0.4385,49689,313.25,777,1535,316.5
83,0.418,0.437,42262,307.25,1025,1307,306.5
84,0.417,0.43675,44706,300.75,695,1351,310.5
85,0.417,0.4375,43146,308.75,714,1526,292.5
86,0.417,0.442,53048,306.75,662,1519,313.5
87,0.421,0.43175,48740,311.25,840,1542,298
88,0.417,0.43925,48290,307.5,656,1430,324
89,0.417,0.437,49110,309.5,723,1631,312.5
90,0.421,0.4225,46233,300,791,1507,299.5
91,0.417,0.455,48580,312,819,1533,324.5
92,0.421,0.458,52052,315.5,805,1545,318
93,0.417,0.4345,54126,299.5,774,1684,305
94,0.421,0.4425,52824,320.75,940,1671,323
95,0.421,0.435,46120,310,751,1334,311.5
96,0.421,0.43975,50959,319.25,679,1482,311.5
97,0.429,0.4455,58096,315.5,656,1852,328.5
98,0.433,0.44775,50059,321,653,1454,310
99,0.425,0.44575,54046,315.75,704,1264,327.5
100,0.421,0.439,49898,315.5,751,1552,310.5
101,0.429,0.44975,57244,323.25,985,1853,320.5
102,0.421,0.43325,45429,296,866,1407,306
103,0.429,0.443,47808,301.25,1062,1703,306.5
104,0.421,0.4445,48146,318.75,1003,1656,302
105,0.421,0.4385,52518,308.25,788,1699,305.5
106,0.421,0.4435,55267,318,998,1710,322.5
107,0.421,0.44,47262,311,639,1298,304
108,0.421,0.42675,50396,312.75,803,1760,304.5
109,0.425,0.43425,49673,298.5,845,1614,291
110,0.42419,0.439,47374,306.5,847,1652,319
111,0.417,0.43975,49223,315.5,590,1570,311
112,0.421,0.44475,54480,310.25,570,1479,312
113,0.421,0.437,45609,312,819,1465,301
114,0.425,0.439,54560,302.5,625,1437,304.5
115,0.421,0.435,51280,303.25,709,1704,305
116,0.429,0.4445,52808,317.25,681,1727,310
117,0.427,0.436475,47583,314.25,719,1404,320
118,0.429,0.441,48918,311.5,814,1647,305.5
119,0.429,0.4435,53113,305.25,606,1390,315
120,0.421,0.443,49062,305.75,765,1577,304
121,0.417,0.44925,51136,309.5,791,1547,616
122,0.417,0.4395,49110,311.75,649,1414,586
123,0.421,0.436,53483,312.75,579,1521,306
124,0.417,0.43475,50557,312.5,912,1545,307.5
125,0.417,0.4305,46410,305,942,1608,298
126,0.421,0.4395,50204,311.5,836,1701,315
127,0.417,0.43775,44754,317.75,940,1362,312.5
128,0.421,0.438,46233,313.25,793,1398,302
129,0.417,0.43975,44095,301.25,663,1379,300.5
130,0.419,0.42375,45799,307.5,684,1500,299.5
131,0.419,0.45375,55317,323.25,650,1510,320
132,0.417,0.433,46426,302.25,625,1349,314
133,0.417,0.441,53917,315,719,1829,305.5
134,0.417,0.43125,53097,307.25,614,1410,305
135,0.421,0.4365,48532,312,744,1484,301.5
136,0.417,0.41475,46024,308.25,536,1489,301
137,0.421,0.4315,44513,307.25,796,1486,311
138,0.421,0.43575,49942,312.5,924,1664,298.5
139,0.419,0.42475,50284,311.75,714,1545,310.5
140,0.421,0.436,44384,308,803,1339,310
141,0.417,0.43875,51763,309,598,1437,311
142,0.419,0.45425,52711,321.5,662,1393,311.5
143,0.421,0.44675,53370,314.75,858,1802,322.5
144,0.417,0.4325,48275,307.75,642,1578,300
145,0.417,0.4415,45429,311.75,662,1407,299
146,0.429,0.439,49705,305.25,710,1554,299
147,0.419,0.44175,47703,305.75,824,1680,318.5
148,0.417,0.42375,40944,300.75,688,1363,292.5
149,0.421,0.43,44738,301.5,684,1328,306.5
150,0.421,0.44825,48741,308.5,704,1550,325
151,0.421,0.4385,46940,312,728,1466,307
152,0.425,0.4455,55176,313.25,766,1713,308.5
153,0.421,0.433,39594,306,749,1129,309.5
154,0.421,0.437329,49416,311.25,714,1335,309.5
155,0.425,0.44275,48258,318.75,872,1421,313.5
156,0.421,0.43475,45984,319.25,532,1218,312.5
157,0.425,0.42925,50300,304.75,712,1404,287
158,0.417,0.44225,54930,316.5,842,1704,318
159,0.417,0.44175,46024,313.5,742,1554,310
160,0.421,0.426,47599,299.75,681,1309,298
161,0.421,0.43,45976,297.5,760,1158,290
162,0.421,0.42775,44095,310.5,646,1390,310
163,0.417,0.4435,47085,327.75,912,1358,335
164,0.417,0.43375,47438,305.25,807,1729,314.5
165,0.417,0.43125,43002,307.75,892,1507,327
166,0.425,0.425,44223,294.75,502,1110,309.5
167,0.425,0.44325,52776,298,668,1498,312.5
168,0.421,0.43775,50911,308.75,858,1552,302
169,0.421,0.4375,56360,309.75,616,1465,309.5
170,0.421,0.43275,56328,310.75,686,1500,321.5
171,0.421,0.4265,45300,309.75,789,1816,314
172,0.425,0.44275,45976,313.25,761,1265,316.5
173,0.421,0.43925,49712,318,718,1640,296.5
174,0.421,0.44675,47969,315.5,863,1742,312
175,0.425,0.4455,52984,314,910,1824,302
176,0.417,0.44275,57936,315.75,807,1944,317.5
177,0.425,0.43025,46265,306.5,642,1580,309
178,0.417,0.43775,49305,322,744,1680,305
179,0.421,0.4355,54270,317.25,618,1647,332.5
180,0.417,0.43075,49512,318.25,676,1646,300
181,0.417,0.44075,49608,297.75,712,1500,295.5
182,0.417,0.43025,45831,299,730,1433,298
183,0.421,0.43375,48435,304.25,639,1638,313.5
184,0.417,0.432,51152,308,744,1505,302
185,0.417,0.44175,51827,309,861,1456,322.5
186,0.417,0.4365,52647,315,794,1818,319
187,0.417,0.437,48886,310.75,872,1533,312.5
188,0.417,0.44425,50782,310.75,724,1535,323.5
189,0.421,0.44225,50911,306.25,537,1323,306.5
190,0.417,0.441,50252,308.5,796,1542,316.5
191,0.419,0.42725,48757,315.5,606,1387,312
192,0.421,0.43125,49480,309.5,733,1610,308
193,0.421,0.43425,52422,309.75,565,1629,318
194,0.417,0.42775,45204,303.25,653,1367,310
195,0.421,0.43325,50766,310,793,1558,302.5
196,0.417,0.43575,48596,301,744,1500,307.5
197,0.421,0.43525,56344,324,914,1890,310.5
198,0.421,0.43725,54496,320.25,831,1550,317.5
199,0.421,0.4355,38244,317.5,858,1127,310
200,0.421,0.431,46217,294,690,1325,310
201,0.421,0.435,56280,320,814,1759,324
202,0.417,0.44675,51618,327.75,602,1302,324
203,0.417,0.42825,46876,317.75,798,1561,318.5
204,0.421,0.442,50380,318.75,709,1194,315
205,0.433,0.43725,47937,306.25,950,1447,327
206,0.415,0.439,51088,318.5,793,1659,317.5
207,0.421,0.43925,50557,311.5,906,1794,311.5
208,0.425,0.4255,46924,306,663,1407,311.5
209,0.417,0.43525,46313,322.5,891,1384,315
210,0.419,0.4335,54372,303.5,672,1686,310
211,0.421,0.44275,60508,315.75,693,1626,342
212,0.421,0.432,49978,312,828,1608,321.5
213,0.417,0.43175,45044,314,719,1508,302.5
214,0.421,0.433,48837,319,761,1656,317
215,0.417,0.4355,47165,314,892,1540,325.5
216,0.419,0.452,57630,328.25,828,1617,1800
217,0.421,0.44,61303,314.25,721,1864,319
218,0.421,0.4445,52952,327.75,777,1516,319
219,0.421,0.4355,48966,315,721,1566,313.5
220,0.417,0.43475,52727,323,824,1729,310.5
221,0.417,0.4295,43548,308,707,1402,319
222,0.417,0.42875,45349,307.75,662,1577,312
223,0.421,0.4445,53129,324,677,1575,319
224,0.417,0.43225,54274,317.5,628,1564,328.5
225,0.425,0.447,48339,312.25,763,1288,326
226,0.417,0.43425,52100,307.75,822,1768,313
227,0.417,0.43025,49239,315.25,901,1950,323.5
228,0.416,0.438,47438,304.25,782,1530,307
229,0.417,0.43375,48274,308.25,716,1398,309
230,0.417,0.4445,48660,321.5,712,1608,317
231,0.421,0.433,50750,320.5,788,1587,320
232,0.417,0.436,48602,310,808,1692,309
233,0.417,0.44825,49673,320.5,623,1377,310
234,0.421,0.4305,46201,303.75,618,1432,325.5
235,0.417,0.43475,51272,307.25,632,1320,320
236,0.421,0.438,49110,311.5,864,1526,311.5
237,0.417,0.427,53419,307.5,684,1572,310.5
238,0.421,0.42125,42439,303.5,648,1312,302.5
239,0.421,0.42575,41732,305.75,791,1506,303
240,0.417,0.43025,42310,315.5,758,1330,301.5
241,0.417,0.4495,49384,327.5,842,1692,326.5
242,0.417,0.45525,51875,320.5,861,1813,316.5
243,0.413,0.43025,46008,297.5,775,1526,307.5
244,0.417,0.44675,55839,318.5,674,1703,331.5
245,0.421,0.4365,46097,306,905,1522,304.5
246,0.433,0.435,46056,313.75,672,1330,310
247,0.421,0.418,48853,303.5,686,1573,317
248,0.409,0.4265745,52342,313.5,793,1736,319
249,0.413,0.44225,47840,309.75,950,1616,319.5
250,0.409,0.4345,47760,314.5,698,1498,312.5
251,0.413,0.439,48821,309.25,763,1596,326
252,0.409,0.4325,43998,314.5,782,1424,318
253,0.425,0.42475,47985,308.25,738,1577,301.5
254,0.421,0.44675,46088,302.75,665,1176,299
255,0.425,0.4185,46040,309.75,814,1628,286.5
256,0.413,0.4345,47937,306,761,1384,178.5
257,0.417,0.43675,47503,308.25,644,1400,314.5
258,0.413,0.44525,44995,318.25,866,1502,320
259,0.421,0.44175,46410,310.75,714,1484,326
260,0.417,0.43675,49609,314.25,665,1656,302.5
261,0.419,0.44225,48773,426.6666667,866,1580,307.5
262,0.417,0.43275,48902,314.75,873,1563,310
263,0.417,0.441,46972,305.75,842,1575,311.5
264,0.413,0.4245,48419,297.75,726,1514,321
265,0.417,0.4485,54239,322.75,1031,1876,326.5
266,0.417,0.433,47551,302,835,1654,308
267,0.421,0.4435,50187,312.75,658,1414,305.5
268,0.421,0.4585,47069,309.5,747,1404,307.5
269,0.419,0.454,48387,319.25,859,1410,1774
270,0.417,0.437,50300,317,1040,1687,304.5
271,0.413,0.428,49271,304.5,784,1293,312
272,0.413,0.43125,48242,306.5,704,1479,315.5
273,0.413,0.45,56248,326,774,1549,309
274,0.417,0.4395,47607,301.5,660,1496,312
275,0.421,0.42475,46088,295,868,1586,310
276,0.417,0.452,48907,313.75,726,1578,310.5
277,0.417,0.4343335,50702,313.5,752,1488,303
278,0.417,0.4485,50091,321.5,929,1536,310
279,0.413,0.42725,45831,309.75,763,1631,310
280,0.417,0.432,52744,309.75,612,1592,319.5
281,0.413,0.43775,48821,309,803,1640,304
282,0.413,0.44075,49882,302.5,861,1712,311
283,0.417,0.43025,52302,319.25,802,1549,304
284,0.417,0.44,43975,310.75,668,1435,314
285,0.413,0.432,46394,306.75,882,1774,311.5
286,0.413,0.43925,46635,308,817,1120,304
287,0.417,0.43825,51790,305.25,1004,1528,305.5
288,0.417,0.41525,54994,303.5,751,1815,311.5
289,0.421,0.42275,47567,311.25,940,1617,286
290,0.421,0.4425,52132,302.5,756,1694,306.5
291,0.415,0.425,50959,306.25,1186,1832,306
292,0.417,0.43125,49078,312.25,1055,1768,322
293,0.421,0.439,45092,314.75,686,1498,305.5
294,0.421,0.4435,52551,305.75,772,1687,308.5
295,0.413,0.4475,49239,304,721,1564,313
296,0.417,0.436,53836,318.5,775,1785,322
297,0.417,0.4325,45478,318.25,950,1502,307.5
298,0.417,0.44925,45895,315.5,935,1654,329
299,0.421,0.42725,48066,304.75,763,1696,307
300,0.417,0.45175,51859,311.5,709,1638,312.5
301,0.417,0.4295,52406,319.75,722,1549,333
302,0.417,0.43475,51522,317.5,678,1547,337.5
303,0.417,0.4445,47808,324.25,962,1552,316.5
304,0.421,0.44075,52468,312.5,637,1626,317.5
305,0.421,0.43225,48692,299.25,642,1519,298.5
306,0.421,0.442,52518,321,976,1727,320.5
307,0.417,0.4375,53499,305,768,1519,315.5
308,0.429,0.445,54512,313,696,1913,326
309,0.417,0.437,44529,311.75,884,1426,315.5
310,0.417,0.43675,53852,318.5,1122,1976,313
311,0.417,0.44,52438,312.75,774,1648,307.5
312,0.417,0.42825,43902,305,761,1477,312.5
313,0.417,0.44025,50509,308.25,886,1746,309.5
314,0.417,0.4305,47937,308.25,882,1556,303
315,0.417,0.43475,48708,309.5,910,1703,312
316,0.417,0.43675,49834,313,735,1521,311.5
317,0.417,0.441,55251,324.25,980,2039,309
318,0.421,0.4085,46740,311.75,802,1648,300.5
319,0.423,0.4345,50654,315.75,744,1508,321
320,0.421,0.4265,46780,305.25,779,1507,311.5
321,0.429,0.44075,48926,317.75,660,1701,326.5
322,0.437,0.578333333,57936,313.75,940,1932,316
323,0.421,0.44525,47969,316.75,738,1500,316.5
324,0.421,0.445,49271,304.5,733,1656,311.5
325,0.423,0.4385,51297,301,807,1587,317.5
326,0.429,0.432275,47390,426.25,716,1508,306.5
327,0.421,0.4355,49516,309.5,730,1475,294.5
328,0.421,0.4355,50606,313,821,1750,305.5
329,0.421,0.43225,51988,304.25,863,1764,312.5
330,0.417,0.427,47197,298.75,840,1600,300
331,0.421,0.4315,51972,318.75,822,1566,322.5
332,0.421,0.4575,58000,343.25,1060,1773,334
333,0.417,0.41725,42150,302.25,775,1524,316
334,0.417,0.445,60476,317.5,795,1748,311
335,0.441,0.453,60202,306.25,943,1953,327.5
336,0.419,0.429,48982,310.5,840,1598,310.5
337,0.421,0.43825,49962,309,852,1535,328.5
338,0.425,0.44725,57052,325.75,1017,2044,327.5
339,0.417,0.4385,50975,320.5,833,1631,302
340,0.417,0.45175,56537,318.5,793,1774,312.5
341,0.421,0.43825,50139,319.75,887,1788,318.5
342,0.425,0.43175,49898,306,872,1605,299.5
343,0.417,0.4445,49207,316.75,793,1356,318
344,0.421,0.43975,53547,317,826,1804,307
345,0.417,0.4385,47101,312,707,1503,309.5
346,0.413,0.42,45027,313,735,1636,322.5
347,0.417,0.436,53579,309.5,670,1771,310
348,0.417,0.443,53692,309.5,740,1762,307.5
349,0.423,0.43075,55332,317.25,1034,1843,315.5
350,0.421,0.43875,54672,305.25,990,1769,304
351,0.421,0.431,48564,308.5,943,1690,321.5
352,0.419,0.445,55412,328.25,1046,1846,315
353,0.419,0.4485,48998,313.25,959,1522,315.5
354,0.417,0.441,45558,314,644,1339,309.5
355,0.425,0.439,52454,307.5,744,1703,311.5
356,0.417,0.429,53901,315.25,733,1656,314
357,0.417,0.4345,49737,316.25,742,1412,316
358,0.417,0.44275,52824,317.25,684,1653,320
359,0.419,0.43525,50268,313.25,1139,1656,314
360,0.417,0.436,52302,309.75,746,1682,294.5
361,0.419,0.43475,51522,312.75,957,1852,316.5
362,0.417,0.44425,55312,321.25,934,1643,327.5
363,0.417,0.425,47326,306,681,1684,299.5
364,0.417,0.446,48403,311.75,875,1787,317.5
365,0.417,0.441,48274,302,833,1731,308.5
366,0.421,0.44125,48290,315,732,1516,316.5
367,0.421,0.43925,52357,314,730,1687,306.5
368,0.421,0.43525,52031,305.75,938,1659,312.5
369,0.421,0.4375,53290,311.75,952,1703,314
370,0.425,0.44075,58000,308,980,2014,318.5
371,0.417,0.439,55653,320,878,1824,314.5
372,0.417,0.4235,44690,298.25,957,1524,300.5
373,0.417,0.43775,49223,305,905,1701,307
374,0.423,0.434,49078,312.25,889,1638,309.5
375,0.419,0.429,49094,312.25,914,1750,293.5
376,0.419,0.42675,47165,303.25,870,1680,302.5
377,0.417,0.4325,49850,307.75,734,1530,316
378,0.413,0.43875,53338,311,782,1843,308
379,0.417,0.4325,53322,317,908,1843,311
380,0.417,0.429,46956,297,940,1594,314
381,0.421,0.439,56232,315,1048,2007,314
382,0.421,0.44975,49448,313,1090,2030,316.5
383,0.417,0.448,43709,317.5,985,1596,314
384,0.417,0.4525,54528,312.75,970,1685,317.5
385,0.419,0.426,45863,300.5,920,1704,293.5
386,0.419,0.424,46458,315.25,920,1577,295.5
387,0.417,0.432,46876,313.5,707,1267,319
388,0.417,0.439,50589,318.5,777,1379,304
389,0.419,0.4175,44610,294.75,658,1368,303.5
390,0.419,0.44675,45751,313.5,817,1440,302.5
391,0.425,0.441,53531,308.5,980,1522,285.5
392,0.425,0.4425,55669,304.5,732,1804,311.5
393,0.417,0.433,48307,310,702,1503,298.5
394,0.417,0.4455,54785,328.75,1022,1992,314
395,0.413,0.433,46634,309.25,793,1549,310
396,0.421,0.436,52534,310.5,1068,1895,297.5
397,0.425,0.44225,54464,304.75,964,1852,300.5
398,0.425,0.41925,45670,298,794,1568,303
399,0.417,0.4495,57743,322.5,905,1652,321
400,0.419,0.443,52390,307.75,934,1748,307.5
401,0.417,0.4255,48146,303.25,786,1516,320.5
402,0.417,0.439,53113,319.75,922,1512,310
403,0.417,0.44825,55653,310.25,780,1561,313.5
404,0.421,0.452,51762,311.25,987,1805,315
405,0.421,0.43225,57020,303,810,1841,310
406,0.417,0.4415,45124,307.5,875,1564,302
407,0.417,0.44275,52020,323.25,746,1662,317
408,0.421,0.44725,44786,313.25,733,1253,330
409,0.417,0.4215,45928,297.25,772,1592,294
410,0.417,0.444,65346,321.75,875,1866,336
411,0.417,0.45075,54608,324.5,808,1720,333.5
412,0.417,0.44425,65266,317.25,704,1801,331.5
413,0.417,0.423,42326,301.5,707,1208,311
414,0.417,0.44975,56264,302.5,861,1956,306
415,0.417,0.44325,50814,330,1029,1699,319
416,0.417,0.435,47920,323.5,800,1549,317
417,0.417,0.448,47165,319.75,996,1543,318
418,0.417,0.44975,51056,319.5,821,1488,306.5
419,0.417,0.4405,48724,307,700,1430,288
420,0.419,0.43625,45574,308.25,830,1533,334.5
421,0.419,0.42425,48773,305,1015,1694,315
422,0.425,0.4275,48242,302.25,971,1470,303.5
423,0.417,0.434,47503,306.5,718,1507,324
424,0.419,0.442,60508,309.5,737,1682,302.5
425,0.417,0.444,54062,318,884,1535,247.5
426,0.419,0.4235,45059,300,1001,1619,313.5
427,0.423,0.438,52164,299.25,920,1802,315
428,0.419,0.418,47937,304.25,921,1794,304
429,0.425,0.445,51457,300,893,1526,305
430,0.421,0.44025,53017,311.25,887,1575,298
431,0.417,0.44625,59351,323.5,789,1941,322
432,0.417,0.436,44749,310,789,1351,309.5
433,0.417,0.45075,59578,316.5,934,1818,334
434,0.419,0.4415,61167,325.25,1034,1992,321.5
435,0.425,0.43925,53016,308,1004,1780,305
436,0.419,0.42675,52551,294.5,641,1636,303
437,0.419,0.4505,57839,328,1172,1990,331
438,0.421,0.4405,57325,301.5,718,1545,311
439,0.425,0.44025,46554,303.75,896,1530,1862.5
440,0.428,0.45475,59752,316.5,810,1834,319
441,0.421,0.44725,52148,298,686,1550,307.5
442,0.429,0.431,52936,306.75,929,1743,303.5
443,0.417,0.4375,43034,307.75,791,1272,309.5
444,0.421,0.42575,46586,307.5,714,1675,310
445,0.421,0.43825,52792,321.5,875,1839,324
446,0.417,0.4235,47905,302.25,749,1650,314.5
447,0.421,0.449,52262,312.5,886,1741,319.5
448,0.421,0.442,51313,308,1024,1542,303.5
449,0.417,0.44225,56087,320.5,826,1486,324
450,0.417,0.44425,52204,310.25,868,1671,307.5
451,0.417,0.437,49400,316.75,947,1654,311
452,0.425,0.43525,46554,313.25,929,1608,315
453,0.417,0.44025,47310,312.5,1116,1750,316.5
454,0.421,0.443,53596,311,962,1754,298
455,0.417,0.453,57426,312.5,1024,2135,318
456,0.433,0.4435,53933,309.5,1183,1830,304
457,0.421,0.446,49030,316.75,1085,1930,310
458,0.421,0.432,49448,314,1036,1932,296
459,0.421,0.4455,48998,320.5,1148,1680,312
460,0.413,0.451,54769,301,816,1853,304
461,0.413,0.4425,54059,313.5,1017,1852,299.5
462,0.417,0.42925,47889,312.5,968,1675,309.5
463,0.417,0.444,55235,311.5,878,1754,300
464,0.417,0.4525,51699,310.25,931,1698,308
465,0.417,0.432,42809,307,906,1465,303.5
466,0.417,0.437,45526,301.25,796,1544,302
467,0.421,0.43375,55396,328.25,926,1995,305
468,0.421,0.43225,46298,304.75,948,1902,306.5
469,0.425,0.4355,50477,304,936,1908,297
470,0.417,0.44525,46988,307.5,989,1589,309.5
471,0.417,0.42975,41169,299.25,931,1295,290.5
472,0.421,0.433,47251,298.75,1029,1577,312.5
473,0.421,0.44,50557,314,1097,1844,302.5
474,0.421,0.438,48130,313.75,1172,1787,311
475,0.417,0.42625,47953,300.5,1026,1857,292
476,0.425,0.445,53515,314.75,1143,1692,313.5
477,0.421,0.446,56972,314.5,858,1832,324.5
478,0.417,0.4555,56328,315,772,1886,323.5
479,0.421,0.449,46683,313.25,866,1776,311
480,0.417,0.45925,42714,318.5,875,1472,310
481,0.417,0.43375,45176,306.5,882,1585,306.5
482,0.421,0.45275,53354,310,915,1696,313
483,0.421,0.45,62887,335,1099,2053,309.5
484,0.421,0.441,48724,299.25,1004,1596,283
485,0.417,0.42275,41780,306.25,1069,1466,296.5
486,0.421,0.43025,43789,296.5,1031,1549,304.5
487,0.417,0.43075,52550,313,864,1362,313.5
488,0.421,0.43525,47872,317.25,782,1642,327.5
489,0.421,0.4385,47889,315.5,878,1642,303
490,0.417,0.425,48808,317.25,828,1617,301.5
491,0.417,0.43775,45510,318.5,770,1444,319
492,0.417,0.424,47598,292.75,707,1342,292
493,0.417,0.4315,51248,316.5,802,1820,317
494,0.417,0.4425,49207,313,849,1620,314
495,0.425,0.44475,55058,310.5,770,1636,313
496,0.423,0.443,50007,306.75,1078,1820,296.5
497,0.421,0.4325,56216,310.25,756,1839,319.5
498,0.417,0.44625,52920,316,1150,1897,325.5
499,0.417,0.45675,49834,306.5,915,1766,315.5
500,0.425,0.4455,49593,315.75,914,1614,1808
501,0.421,0.44175,52245,319.25,1052,1886,317
502,0.421,0.4505,56039,316.75,1057,1962,329
503,0.417,0.443,46699,313.25,784,1594,326
504,0.421,0.4395,47438,305,931,1846,304.5
505,0.421,0.441,45027,306,850,1610,311.5
506,0.421,0.43025,46136,305.5,854,1626,315.5
507,0.421,0.433,45092,310,833,1582,307
508,0.417,0.4345,50862,321.25,1092,1934,296.5
509,0.417,0.4395,51200,306.75,805,1746,301
510,0.417,0.43675,51602,302.75,634,1426,289
511,0.417,0.4305,49071,303.75,850,1606,304
512,0.417,0.435,47776,304.75,796,1463,304
513,0.417,0.446,50605,321,686,1503,302.5
514,0.417,0.444,54158,321,910,1766,321.5
515,0.417,0.435,47390,308.25,864,1762,298.5
516,0.417,0.42775,44561,299,835,1542,305
517,0.421,0.4535,56167,318.5,864,1787,317
518,0.421,0.432,42359,315,976,1463,330.5
519,0.421,0.43675,42841,310.25,970,1416,313
520,0.425,0.43425,52856,324,1118,1771,306.5
521,0.425,0.444,50107,314,955,1788,300.5
522,0.421,0.43575,52277,308.75,760,1566,300.5
523,0.425,0.4545,50589,319.75,917,1614,323.5
524,0.417,0.4435,50621,318.75,1158,1864,309
525,0.421,0.425,47229,295.75,833,1558,314
526,0.417,0.458,53242,323.75,976,1815,303.5
527,0.417,0.4475,51474,319.75,858,1706,321.5
528,0.417,0.4435,46780,305.25,816,1638,325
529,0.421,0.4275,46281,306.5,873,1603,299.5
530,0.417,0.44175,45140,305,976,1886,306.5
531,0.417,0.4265,40012,294,914,1318,293.5
532,0.417,0.4225,45429,303.25,934,1561,296.5
533,0.417,0.44375,45879,312.75,1012,1734,324
534,0.417,0.437,44063,312,928,1713,302
535,0.417,0.433,44625,313.25,849,1255,302
536,0.413,0.42525,46538,310.25,970,1325,310
537,0.421,0.443,48701,320,850,1628,310
538,0.425,0.43975,50959,316.25,1045,1654,309.5
539,0.421,0.42775,42954,306.5,900,1505,314.5
540,0.417,0.42875,52872,317.75,812,1678,309
541,0.417,0.4295,49994,305.25,882,1668,304.5
542,0.417,0.42425,47583,313.75,852,1741,322.5
543,0.413,0.42775,49930,315,954,1715,311.5
544,0.413,0.4455,53885,304.25,931,1892,301
545,0.417,0.43125,48934,311,793,1349,308.5
546,0.421,0.433,46731,305.75,800,1536,312
547,0.417,0.45175,53017,323.75,747,1766,314
548,0.417,0.4575,51216,323,800,1740,348
549,0.421,0.43075,61440,307,954,2070,305.5
550,0.433,0.4375,54094,303.25,858,1871,308
551,0.417,0.42775,45172,309.5,936,1484,305
552,0.417,0.4215,43918,302.75,872,1556,299
553,0.417,0.44625,47872,411.6666667,758,1456,308.5
554,0.417,0.434,47503,313.5,718,1549,283.5
555,0.417,0.456,57646,315.25,826,1771,326
556,0.417,0.4325,52100,310.5,766,1764,310.5
557,0.417,0.44075,42696,306.75,968,1461,319.5
558,0.413,0.42925,48338,316.75,679,1362,308.5
559,0.413,0.441,49190,316,649,1540,333.5
560,0.417,0.42825,42873,312,901,1438,309.5
561,0.433,0.435,47214,302,1200,1676,357.5
562,0.417,0.43225,52052,301.75,793,1657,317
563,0.415,0.43275,49239,317,896,1843,299
564,0.415,0.43,50428,313.5,1036,1740,308.5
565,0.413,0.441,44931,306.75,830,1586,307
566,0.433,0.45775,47728,323.25,740,1461,310
567,0.421,0.4465,52534,309.25,756,1852,312.5
568,0.417,0.4395,51522,308.25,698,1866,335.5
569,0.417,0.4295,52068,320.75,1031,1760,318.5
570,0.421,0.4405,48483,309.25,1074,1533,308
571,0.417,0.44725,53226,306.75,1015,1787,320.5
572,0.417,0.42175,42037,288.5,728,1345,299.5
573,0.421,0.41775,44320,284,728,1521,292
574,0.413,0.43425,47856,304.25,864,1439,299
575,0.417,0.43175,46780,306.25,971,1564,299
576,0.417,0.43,52599,306.25,870,1778,316
577,0.417,0.43375,53901,302.25,774,1759,297
578,0.417,0.45225,55267,312.75,744,1897,329.5
579,0.413,0.45325,47198,319.25,987,1521,308
580,0.421,0.4255,44963,306.5,804,1701,312
581,0.415,0.418,44658,304.75,868,1547,309.5
582,0.417,0.43925,54432,322.25,948,1811,306
583,0.417,0.4485,54142,326.25,1169,1934,312.5
584,0.417,0.4425,47149,328,1104,1620,323
585,0.417,0.4525,55572,308.5,872,1746,322
586,0.421,0.44225,48628,313.75,936,1624,302
587,0.409,0.44575,47117,323.75,905,1493,321.5
588,0.417,0.4505,50590,323.75,990,1738,310.5
589,0.417,0.44,58965,307.5,896,1899,311
590,0.417,0.43475,51972,313.75,882,1785,307
591,0.417,0.44325,48210,304.5,856,1564,309.5
592,0.421,0.435,51788,312,959,1421,329
593,0.409,0.44775,51554,313.25,780,1804,322.5
594,0.413,0.43,48178,314,817,1642,316.5
595,0.433,0.44175,49770,308,788,1577,305.5
596,0.417,0.45375,54801,311.5,821,1746,311
597,0.409,0.443,48596,306,693,1521,305
598,0.417,0.44275,51779,310,849,1687,310.5
599,0.417,0.44925,48226,302.75,850,1920,314
600,0.413,0.43925,51297,318.75,970,1846,307
601,0.417,0.43358,49046,314.75,970,1906,318
602,0.417,0.436,47294,313,971,1619,311.5
603,0.417,0.45,49834,313,896,1456,303
604,0.413,0.4375,43088,306,919,1497,314.5
605,0.415,0.463,58836,313.75,1004,2034,317.5
606,0.413,0.455,43902,317.25,912,1586,317
607,0.417,0.437,49721,305,761,1678,313.5
608,0.417,0.4345,44111,304,844,1720,312.5
609,0.417,0.4515,54334,316.5,877,1918,311
610,0.425,0.43825,44336,304.5,794,1418,318.5
611,0.413,0.42875,43998,305,802,1582,303
612,0.413,0.4445,47953,325,978,1549,317.5
613,0.417,0.45125,48387,326.5,966,1923,330.5
614,0.417,0.4365,55621,314.25,1040,2174,326.5
615,0.417,0.439,47891,302.75,1003,1657,320
616,0.413,0.43925,50782,311,696,1458,310.5
617,0.417,0.43675,52631,313.25,1080,1981,310
618,0.433,0.44725,54383,323,998,1783,330
619,0.425,0.44,48757,316,1024,1550,313
620,0.417,0.42875,48564,305.75,877,1880,299
621,0.425,0.44375,48001,310,945,1568,306
622,0.419,0.40975,46956,304.75,1076,1790,313
623,0.425,0.43875,51924,315,870,1684,303
624,0.425,0.42825,46780,302.5,842,1633,315.5
625,0.417,0.4435,46506,306.5,926,1568,307
626,0.417,0.44175,56328,320,1101,2116,304.5
627,0.417,0.42375,42150,313.5,901,1470,323.5
628,0.417,0.43425,45590,304.5,696,1446,309
629,0.421,0.4290525,52310,300.5,796,1687,316.5
630,0.417,0.4295,48644,417.6666667,833,1722,313
631,0.417,0.4555,48580,303.5,772,1419,293.5
632,0.417,0.4355,43548,299.75,807,1423,299.5
633,0.425,0.4215,43580,298.5,940,1516,299.5
634,0.425,0.445,48371,305,891,1568,312
635,0.425,0.44625,47664,315.5,884,1594,322.5
636,0.421,0.43525,45494,311.25,966,1620,305.5
637,0.421,0.438,52100,306,770,1724,314
638,0.421,0.44625,59334,316.25,912,2170,322
639,0.417,0.4425,48258,326,989,1799,314
640,0.421,0.43025,49126,311.75,1003,1526,300
641,0.413,0.4465,47053,316.75,761,1668,321
642,0.413,0.43975,45638,309.5,854,1517,315
643,0.421,0.4205,47374,299,863,1769,315
644,0.421,0.437,46522,300,842,1678,317
645,0.421,0.432,43146,297.75,747,1382,295.5
646,0.417,0.42925,46274,321.75,1018,1519,318
647,0.417,0.423,44208,304.75,980,1608,286.5
648,0.417,0.42525,47245,311.25,984,1535,301.5
649,0.425,0.46625,50139,314.25,910,1561,304
650,0.421,0.432,51747,312.75,872,1549,317.5
651,0.421,0.424,42278,307.25,854,1433,304
652,0.429,0.44425,50548,311.75,864,1496,313
653,0.421,0.42675,42970,294.25,770,1354,287.5
1 Batch Diameter Etch1 Film-Thickness Etch2 Line-Width Overlay Volume
2 1 0.429 0.43025 49512 308.75 810 1759 315.5
3 2 0.421 0.433 47101 306.75 824 1746 305.5
4 3 0.417 0.4285 60023 311.75 765 1482 330.5
5 4 0.421 0.43775 55428 322.75 933 1857 319.5
6 5 0.421 0.41725 46442 312.5 686 1844 323.5
7 6 0.425 0.44075 45539 309.25 1400 1584 314.5
8 7 0.421 0.42275 51492 311.75 864 1689 319.5
9 8 0.425 0.43175 47661 301 858 1782 299
10 9 0.427 0.44225 70638 304.25 252 1572 319.5
11 10 0.421 0.42875 45944 339.75 255 1377 289
12 11 0.421 0.43925 56955 330.25 968 1848 315.5
13 12 0.417 0.4245 37616 314 473 1689 318.5
14 13 0.421 0.43175 47953 321.25 840 1528 305.5
15 14 0.427 0.4295 51891 331.75 1034 1913 316.5
16 15 0.425 0.43025 42608 306 784 1648 298.5
17 16 0.425 0.44275 60625 316 796 1470 320
18 17 0.427 0.4275 42359 295.5 746 1398 306.5
19 18 0.421 0.43925 46554 307.25 1245 1452 304
20 19 0.421 0.44575 49564 315 728 1377 314.5
21 20 0.421 0.4425 47824 318.5 870 1433 304
22 21 0.421 0.43 48516 305.5 842 1573 298.5
23 22 0.425 0.42675 75703 306 654 1349 307
24 23 0.433 0.439 53064 314 1003 1732 317.5
25 24 0.421 0.4215 51152 304 740 1578 307
26 25 0.421 0.42675 45172 314.5 821 1507 325
27 26 0.421 0.4275 49898 297.5 620 1628 297.5
28 27 0.421 0.43825 43420 315.25 200 1440 303
29 28 0.421 0.4575 49625 318.5 729 1482 316
30 29 0.417 0.427 48163 314.25 700 1512 319
31 30 0.421 0.431 46619 310 870 1578 311
32 31 0.4213 0.43125 48532 305.75 595 1559 303.5
33 32 0.425 0.443 53965 316.25 943 1979 310.5
34 33 0.421 0.42975 49753 318.5 929 1755 312.5
35 34 0.425 0.4305 48741 305.5 831 1610 307
36 35 0.421 0.44325 54110 310.25 936 1878 301
37 36 0.421 0.45425 66539 329.25 952 1580 314.5
38 37 0.433 0.4405 49898 304 961 1792 316.5
39 38 0.417 0.4345 44963 315.75 742 1223 303
40 39 0.421 0.4385 47454 311.5 794 1738 307.5
41 40 0.421 0.449 45574 326.75 901 1550 320.5
42 41 0.421 0.4485 47744 311.5 852 1498 313.5
43 42 0.419 0.4345 73536 307 749 1356 301.5
44 43 0.421 0.42775 47069 304.75 962 1442 306
45 44 0.421 0.4385 48274 312.75 662 1530 305.5
46 45 0.425 0.424 45622 298.5 733 1547 296.5
47 46 0.421 0.4345 49046 311.5 707 1416 306.5
48 47 0.433 0.451 55492 320.5 900 1601 317
49 48 0.421 0.43725 47582 310.25 898 1381 300
50 49 0.421 0.43125 48387 312.5 915 1750 298.5
51 50 0.425 0.432 50200 339.75 892 1824 310.5
52 51 0.421 0.4415 50477 308.25 611 1437 314
53 52 0.421 0.43725 46715 319 621 1255 309.5
54 53 0.421 0.427 48242 315.25 898 1894 308.5
55 54 0.425 0.44275 53676 311.75 616 1517 321
56 55 0.423 0.42875 44882 305 850 1528 306.5
57 56 0.421 0.44 50493 310 817 1614 311
58 57 0.433 0.43725 55654 299.5 770 1617 300.5
59 58 0.421 0.43825 51200 306 852 1764 312.5
60 59 0.425 0.43925 54512 314.25 831 1797 328.5
61 60 0.421 0.44525 44352 303 656 1393 314.5
62 61 0.421 0.42975 49705 316.75 864 1648 314.5
63 62 0.421 0.43425 44480 298.25 716 1540 295
64 63 0.429 0.44275 50718 318.25 1029 1718 304.5
65 64 0.421 0.451 48435 323.5 691 1587 316
66 65 0.425 0.44125 53596 307 840 1904 312.5
67 66 0.421 0.44975 48387 321.25 721 1362 312.5
68 67 0.429 0.438 46301 301.25 793 1323 317.5
69 68 0.425 0.44775 45890 312.25 872 1393 312.5
70 69 0.417 0.43175 44850 312.75 831 1400 300
71 70 0.425 0.42225 42873 311.75 679 1220 303
72 71 0.425 0.434 43388 314.75 808 1202 320.5
73 72 0.421 0.43175 42391 301 667 1402 289.5
74 73 0.417 0.43775 47760 306 730 1503 314.5
75 74 0.425 0.43075 54399 305.25 821 1759 324
76 75 0.418 0.4335 51360 303 821 1642 304.5
77 76 0.421 0.445 60484 314.5 1029 1839 304.5
78 77 0.425 0.44375 55800 315 654 1610 314
79 78 0.421 0.44875 53611 316.75 609 1479 307
80 79 0.421 0.45475 53756 316 768 1648 323.5
81 80 0.417 0.449 53756 321.5 786 1440 317
82 81 0.417 0.4375 48226 316 854 1629 312.5
83 82 0.425 0.4385 49689 313.25 777 1535 316.5
84 83 0.418 0.437 42262 307.25 1025 1307 306.5
85 84 0.417 0.43675 44706 300.75 695 1351 310.5
86 85 0.417 0.4375 43146 308.75 714 1526 292.5
87 86 0.417 0.442 53048 306.75 662 1519 313.5
88 87 0.421 0.43175 48740 311.25 840 1542 298
89 88 0.417 0.43925 48290 307.5 656 1430 324
90 89 0.417 0.437 49110 309.5 723 1631 312.5
91 90 0.421 0.4225 46233 300 791 1507 299.5
92 91 0.417 0.455 48580 312 819 1533 324.5
93 92 0.421 0.458 52052 315.5 805 1545 318
94 93 0.417 0.4345 54126 299.5 774 1684 305
95 94 0.421 0.4425 52824 320.75 940 1671 323
96 95 0.421 0.435 46120 310 751 1334 311.5
97 96 0.421 0.43975 50959 319.25 679 1482 311.5
98 97 0.429 0.4455 58096 315.5 656 1852 328.5
99 98 0.433 0.44775 50059 321 653 1454 310
100 99 0.425 0.44575 54046 315.75 704 1264 327.5
101 100 0.421 0.439 49898 315.5 751 1552 310.5
102 101 0.429 0.44975 57244 323.25 985 1853 320.5
103 102 0.421 0.43325 45429 296 866 1407 306
104 103 0.429 0.443 47808 301.25 1062 1703 306.5
105 104 0.421 0.4445 48146 318.75 1003 1656 302
106 105 0.421 0.4385 52518 308.25 788 1699 305.5
107 106 0.421 0.4435 55267 318 998 1710 322.5
108 107 0.421 0.44 47262 311 639 1298 304
109 108 0.421 0.42675 50396 312.75 803 1760 304.5
110 109 0.425 0.43425 49673 298.5 845 1614 291
111 110 0.42419 0.439 47374 306.5 847 1652 319
112 111 0.417 0.43975 49223 315.5 590 1570 311
113 112 0.421 0.44475 54480 310.25 570 1479 312
114 113 0.421 0.437 45609 312 819 1465 301
115 114 0.425 0.439 54560 302.5 625 1437 304.5
116 115 0.421 0.435 51280 303.25 709 1704 305
117 116 0.429 0.4445 52808 317.25 681 1727 310
118 117 0.427 0.436475 47583 314.25 719 1404 320
119 118 0.429 0.441 48918 311.5 814 1647 305.5
120 119 0.429 0.4435 53113 305.25 606 1390 315
121 120 0.421 0.443 49062 305.75 765 1577 304
122 121 0.417 0.44925 51136 309.5 791 1547 616
123 122 0.417 0.4395 49110 311.75 649 1414 586
124 123 0.421 0.436 53483 312.75 579 1521 306
125 124 0.417 0.43475 50557 312.5 912 1545 307.5
126 125 0.417 0.4305 46410 305 942 1608 298
127 126 0.421 0.4395 50204 311.5 836 1701 315
128 127 0.417 0.43775 44754 317.75 940 1362 312.5
129 128 0.421 0.438 46233 313.25 793 1398 302
130 129 0.417 0.43975 44095 301.25 663 1379 300.5
131 130 0.419 0.42375 45799 307.5 684 1500 299.5
132 131 0.419 0.45375 55317 323.25 650 1510 320
133 132 0.417 0.433 46426 302.25 625 1349 314
134 133 0.417 0.441 53917 315 719 1829 305.5
135 134 0.417 0.43125 53097 307.25 614 1410 305
136 135 0.421 0.4365 48532 312 744 1484 301.5
137 136 0.417 0.41475 46024 308.25 536 1489 301
138 137 0.421 0.4315 44513 307.25 796 1486 311
139 138 0.421 0.43575 49942 312.5 924 1664 298.5
140 139 0.419 0.42475 50284 311.75 714 1545 310.5
141 140 0.421 0.436 44384 308 803 1339 310
142 141 0.417 0.43875 51763 309 598 1437 311
143 142 0.419 0.45425 52711 321.5 662 1393 311.5
144 143 0.421 0.44675 53370 314.75 858 1802 322.5
145 144 0.417 0.4325 48275 307.75 642 1578 300
146 145 0.417 0.4415 45429 311.75 662 1407 299
147 146 0.429 0.439 49705 305.25 710 1554 299
148 147 0.419 0.44175 47703 305.75 824 1680 318.5
149 148 0.417 0.42375 40944 300.75 688 1363 292.5
150 149 0.421 0.43 44738 301.5 684 1328 306.5
151 150 0.421 0.44825 48741 308.5 704 1550 325
152 151 0.421 0.4385 46940 312 728 1466 307
153 152 0.425 0.4455 55176 313.25 766 1713 308.5
154 153 0.421 0.433 39594 306 749 1129 309.5
155 154 0.421 0.437329 49416 311.25 714 1335 309.5
156 155 0.425 0.44275 48258 318.75 872 1421 313.5
157 156 0.421 0.43475 45984 319.25 532 1218 312.5
158 157 0.425 0.42925 50300 304.75 712 1404 287
159 158 0.417 0.44225 54930 316.5 842 1704 318
160 159 0.417 0.44175 46024 313.5 742 1554 310
161 160 0.421 0.426 47599 299.75 681 1309 298
162 161 0.421 0.43 45976 297.5 760 1158 290
163 162 0.421 0.42775 44095 310.5 646 1390 310
164 163 0.417 0.4435 47085 327.75 912 1358 335
165 164 0.417 0.43375 47438 305.25 807 1729 314.5
166 165 0.417 0.43125 43002 307.75 892 1507 327
167 166 0.425 0.425 44223 294.75 502 1110 309.5
168 167 0.425 0.44325 52776 298 668 1498 312.5
169 168 0.421 0.43775 50911 308.75 858 1552 302
170 169 0.421 0.4375 56360 309.75 616 1465 309.5
171 170 0.421 0.43275 56328 310.75 686 1500 321.5
172 171 0.421 0.4265 45300 309.75 789 1816 314
173 172 0.425 0.44275 45976 313.25 761 1265 316.5
174 173 0.421 0.43925 49712 318 718 1640 296.5
175 174 0.421 0.44675 47969 315.5 863 1742 312
176 175 0.425 0.4455 52984 314 910 1824 302
177 176 0.417 0.44275 57936 315.75 807 1944 317.5
178 177 0.425 0.43025 46265 306.5 642 1580 309
179 178 0.417 0.43775 49305 322 744 1680 305
180 179 0.421 0.4355 54270 317.25 618 1647 332.5
181 180 0.417 0.43075 49512 318.25 676 1646 300
182 181 0.417 0.44075 49608 297.75 712 1500 295.5
183 182 0.417 0.43025 45831 299 730 1433 298
184 183 0.421 0.43375 48435 304.25 639 1638 313.5
185 184 0.417 0.432 51152 308 744 1505 302
186 185 0.417 0.44175 51827 309 861 1456 322.5
187 186 0.417 0.4365 52647 315 794 1818 319
188 187 0.417 0.437 48886 310.75 872 1533 312.5
189 188 0.417 0.44425 50782 310.75 724 1535 323.5
190 189 0.421 0.44225 50911 306.25 537 1323 306.5
191 190 0.417 0.441 50252 308.5 796 1542 316.5
192 191 0.419 0.42725 48757 315.5 606 1387 312
193 192 0.421 0.43125 49480 309.5 733 1610 308
194 193 0.421 0.43425 52422 309.75 565 1629 318
195 194 0.417 0.42775 45204 303.25 653 1367 310
196 195 0.421 0.43325 50766 310 793 1558 302.5
197 196 0.417 0.43575 48596 301 744 1500 307.5
198 197 0.421 0.43525 56344 324 914 1890 310.5
199 198 0.421 0.43725 54496 320.25 831 1550 317.5
200 199 0.421 0.4355 38244 317.5 858 1127 310
201 200 0.421 0.431 46217 294 690 1325 310
202 201 0.421 0.435 56280 320 814 1759 324
203 202 0.417 0.44675 51618 327.75 602 1302 324
204 203 0.417 0.42825 46876 317.75 798 1561 318.5
205 204 0.421 0.442 50380 318.75 709 1194 315
206 205 0.433 0.43725 47937 306.25 950 1447 327
207 206 0.415 0.439 51088 318.5 793 1659 317.5
208 207 0.421 0.43925 50557 311.5 906 1794 311.5
209 208 0.425 0.4255 46924 306 663 1407 311.5
210 209 0.417 0.43525 46313 322.5 891 1384 315
211 210 0.419 0.4335 54372 303.5 672 1686 310
212 211 0.421 0.44275 60508 315.75 693 1626 342
213 212 0.421 0.432 49978 312 828 1608 321.5
214 213 0.417 0.43175 45044 314 719 1508 302.5
215 214 0.421 0.433 48837 319 761 1656 317
216 215 0.417 0.4355 47165 314 892 1540 325.5
217 216 0.419 0.452 57630 328.25 828 1617 1800
218 217 0.421 0.44 61303 314.25 721 1864 319
219 218 0.421 0.4445 52952 327.75 777 1516 319
220 219 0.421 0.4355 48966 315 721 1566 313.5
221 220 0.417 0.43475 52727 323 824 1729 310.5
222 221 0.417 0.4295 43548 308 707 1402 319
223 222 0.417 0.42875 45349 307.75 662 1577 312
224 223 0.421 0.4445 53129 324 677 1575 319
225 224 0.417 0.43225 54274 317.5 628 1564 328.5
226 225 0.425 0.447 48339 312.25 763 1288 326
227 226 0.417 0.43425 52100 307.75 822 1768 313
228 227 0.417 0.43025 49239 315.25 901 1950 323.5
229 228 0.416 0.438 47438 304.25 782 1530 307
230 229 0.417 0.43375 48274 308.25 716 1398 309
231 230 0.417 0.4445 48660 321.5 712 1608 317
232 231 0.421 0.433 50750 320.5 788 1587 320
233 232 0.417 0.436 48602 310 808 1692 309
234 233 0.417 0.44825 49673 320.5 623 1377 310
235 234 0.421 0.4305 46201 303.75 618 1432 325.5
236 235 0.417 0.43475 51272 307.25 632 1320 320
237 236 0.421 0.438 49110 311.5 864 1526 311.5
238 237 0.417 0.427 53419 307.5 684 1572 310.5
239 238 0.421 0.42125 42439 303.5 648 1312 302.5
240 239 0.421 0.42575 41732 305.75 791 1506 303
241 240 0.417 0.43025 42310 315.5 758 1330 301.5
242 241 0.417 0.4495 49384 327.5 842 1692 326.5
243 242 0.417 0.45525 51875 320.5 861 1813 316.5
244 243 0.413 0.43025 46008 297.5 775 1526 307.5
245 244 0.417 0.44675 55839 318.5 674 1703 331.5
246 245 0.421 0.4365 46097 306 905 1522 304.5
247 246 0.433 0.435 46056 313.75 672 1330 310
248 247 0.421 0.418 48853 303.5 686 1573 317
249 248 0.409 0.4265745 52342 313.5 793 1736 319
250 249 0.413 0.44225 47840 309.75 950 1616 319.5
251 250 0.409 0.4345 47760 314.5 698 1498 312.5
252 251 0.413 0.439 48821 309.25 763 1596 326
253 252 0.409 0.4325 43998 314.5 782 1424 318
254 253 0.425 0.42475 47985 308.25 738 1577 301.5
255 254 0.421 0.44675 46088 302.75 665 1176 299
256 255 0.425 0.4185 46040 309.75 814 1628 286.5
257 256 0.413 0.4345 47937 306 761 1384 178.5
258 257 0.417 0.43675 47503 308.25 644 1400 314.5
259 258 0.413 0.44525 44995 318.25 866 1502 320
260 259 0.421 0.44175 46410 310.75 714 1484 326
261 260 0.417 0.43675 49609 314.25 665 1656 302.5
262 261 0.419 0.44225 48773 426.6666667 866 1580 307.5
263 262 0.417 0.43275 48902 314.75 873 1563 310
264 263 0.417 0.441 46972 305.75 842 1575 311.5
265 264 0.413 0.4245 48419 297.75 726 1514 321
266 265 0.417 0.4485 54239 322.75 1031 1876 326.5
267 266 0.417 0.433 47551 302 835 1654 308
268 267 0.421 0.4435 50187 312.75 658 1414 305.5
269 268 0.421 0.4585 47069 309.5 747 1404 307.5
270 269 0.419 0.454 48387 319.25 859 1410 1774
271 270 0.417 0.437 50300 317 1040 1687 304.5
272 271 0.413 0.428 49271 304.5 784 1293 312
273 272 0.413 0.43125 48242 306.5 704 1479 315.5
274 273 0.413 0.45 56248 326 774 1549 309
275 274 0.417 0.4395 47607 301.5 660 1496 312
276 275 0.421 0.42475 46088 295 868 1586 310
277 276 0.417 0.452 48907 313.75 726 1578 310.5
278 277 0.417 0.4343335 50702 313.5 752 1488 303
279 278 0.417 0.4485 50091 321.5 929 1536 310
280 279 0.413 0.42725 45831 309.75 763 1631 310
281 280 0.417 0.432 52744 309.75 612 1592 319.5
282 281 0.413 0.43775 48821 309 803 1640 304
283 282 0.413 0.44075 49882 302.5 861 1712 311
284 283 0.417 0.43025 52302 319.25 802 1549 304
285 284 0.417 0.44 43975 310.75 668 1435 314
286 285 0.413 0.432 46394 306.75 882 1774 311.5
287 286 0.413 0.43925 46635 308 817 1120 304
288 287 0.417 0.43825 51790 305.25 1004 1528 305.5
289 288 0.417 0.41525 54994 303.5 751 1815 311.5
290 289 0.421 0.42275 47567 311.25 940 1617 286
291 290 0.421 0.4425 52132 302.5 756 1694 306.5
292 291 0.415 0.425 50959 306.25 1186 1832 306
293 292 0.417 0.43125 49078 312.25 1055 1768 322
294 293 0.421 0.439 45092 314.75 686 1498 305.5
295 294 0.421 0.4435 52551 305.75 772 1687 308.5
296 295 0.413 0.4475 49239 304 721 1564 313
297 296 0.417 0.436 53836 318.5 775 1785 322
298 297 0.417 0.4325 45478 318.25 950 1502 307.5
299 298 0.417 0.44925 45895 315.5 935 1654 329
300 299 0.421 0.42725 48066 304.75 763 1696 307
301 300 0.417 0.45175 51859 311.5 709 1638 312.5
302 301 0.417 0.4295 52406 319.75 722 1549 333
303 302 0.417 0.43475 51522 317.5 678 1547 337.5
304 303 0.417 0.4445 47808 324.25 962 1552 316.5
305 304 0.421 0.44075 52468 312.5 637 1626 317.5
306 305 0.421 0.43225 48692 299.25 642 1519 298.5
307 306 0.421 0.442 52518 321 976 1727 320.5
308 307 0.417 0.4375 53499 305 768 1519 315.5
309 308 0.429 0.445 54512 313 696 1913 326
310 309 0.417 0.437 44529 311.75 884 1426 315.5
311 310 0.417 0.43675 53852 318.5 1122 1976 313
312 311 0.417 0.44 52438 312.75 774 1648 307.5
313 312 0.417 0.42825 43902 305 761 1477 312.5
314 313 0.417 0.44025 50509 308.25 886 1746 309.5
315 314 0.417 0.4305 47937 308.25 882 1556 303
316 315 0.417 0.43475 48708 309.5 910 1703 312
317 316 0.417 0.43675 49834 313 735 1521 311.5
318 317 0.417 0.441 55251 324.25 980 2039 309
319 318 0.421 0.4085 46740 311.75 802 1648 300.5
320 319 0.423 0.4345 50654 315.75 744 1508 321
321 320 0.421 0.4265 46780 305.25 779 1507 311.5
322 321 0.429 0.44075 48926 317.75 660 1701 326.5
323 322 0.437 0.578333333 57936 313.75 940 1932 316
324 323 0.421 0.44525 47969 316.75 738 1500 316.5
325 324 0.421 0.445 49271 304.5 733 1656 311.5
326 325 0.423 0.4385 51297 301 807 1587 317.5
327 326 0.429 0.432275 47390 426.25 716 1508 306.5
328 327 0.421 0.4355 49516 309.5 730 1475 294.5
329 328 0.421 0.4355 50606 313 821 1750 305.5
330 329 0.421 0.43225 51988 304.25 863 1764 312.5
331 330 0.417 0.427 47197 298.75 840 1600 300
332 331 0.421 0.4315 51972 318.75 822 1566 322.5
333 332 0.421 0.4575 58000 343.25 1060 1773 334
334 333 0.417 0.41725 42150 302.25 775 1524 316
335 334 0.417 0.445 60476 317.5 795 1748 311
336 335 0.441 0.453 60202 306.25 943 1953 327.5
337 336 0.419 0.429 48982 310.5 840 1598 310.5
338 337 0.421 0.43825 49962 309 852 1535 328.5
339 338 0.425 0.44725 57052 325.75 1017 2044 327.5
340 339 0.417 0.4385 50975 320.5 833 1631 302
341 340 0.417 0.45175 56537 318.5 793 1774 312.5
342 341 0.421 0.43825 50139 319.75 887 1788 318.5
343 342 0.425 0.43175 49898 306 872 1605 299.5
344 343 0.417 0.4445 49207 316.75 793 1356 318
345 344 0.421 0.43975 53547 317 826 1804 307
346 345 0.417 0.4385 47101 312 707 1503 309.5
347 346 0.413 0.42 45027 313 735 1636 322.5
348 347 0.417 0.436 53579 309.5 670 1771 310
349 348 0.417 0.443 53692 309.5 740 1762 307.5
350 349 0.423 0.43075 55332 317.25 1034 1843 315.5
351 350 0.421 0.43875 54672 305.25 990 1769 304
352 351 0.421 0.431 48564 308.5 943 1690 321.5
353 352 0.419 0.445 55412 328.25 1046 1846 315
354 353 0.419 0.4485 48998 313.25 959 1522 315.5
355 354 0.417 0.441 45558 314 644 1339 309.5
356 355 0.425 0.439 52454 307.5 744 1703 311.5
357 356 0.417 0.429 53901 315.25 733 1656 314
358 357 0.417 0.4345 49737 316.25 742 1412 316
359 358 0.417 0.44275 52824 317.25 684 1653 320
360 359 0.419 0.43525 50268 313.25 1139 1656 314
361 360 0.417 0.436 52302 309.75 746 1682 294.5
362 361 0.419 0.43475 51522 312.75 957 1852 316.5
363 362 0.417 0.44425 55312 321.25 934 1643 327.5
364 363 0.417 0.425 47326 306 681 1684 299.5
365 364 0.417 0.446 48403 311.75 875 1787 317.5
366 365 0.417 0.441 48274 302 833 1731 308.5
367 366 0.421 0.44125 48290 315 732 1516 316.5
368 367 0.421 0.43925 52357 314 730 1687 306.5
369 368 0.421 0.43525 52031 305.75 938 1659 312.5
370 369 0.421 0.4375 53290 311.75 952 1703 314
371 370 0.425 0.44075 58000 308 980 2014 318.5
372 371 0.417 0.439 55653 320 878 1824 314.5
373 372 0.417 0.4235 44690 298.25 957 1524 300.5
374 373 0.417 0.43775 49223 305 905 1701 307
375 374 0.423 0.434 49078 312.25 889 1638 309.5
376 375 0.419 0.429 49094 312.25 914 1750 293.5
377 376 0.419 0.42675 47165 303.25 870 1680 302.5
378 377 0.417 0.4325 49850 307.75 734 1530 316
379 378 0.413 0.43875 53338 311 782 1843 308
380 379 0.417 0.4325 53322 317 908 1843 311
381 380 0.417 0.429 46956 297 940 1594 314
382 381 0.421 0.439 56232 315 1048 2007 314
383 382 0.421 0.44975 49448 313 1090 2030 316.5
384 383 0.417 0.448 43709 317.5 985 1596 314
385 384 0.417 0.4525 54528 312.75 970 1685 317.5
386 385 0.419 0.426 45863 300.5 920 1704 293.5
387 386 0.419 0.424 46458 315.25 920 1577 295.5
388 387 0.417 0.432 46876 313.5 707 1267 319
389 388 0.417 0.439 50589 318.5 777 1379 304
390 389 0.419 0.4175 44610 294.75 658 1368 303.5
391 390 0.419 0.44675 45751 313.5 817 1440 302.5
392 391 0.425 0.441 53531 308.5 980 1522 285.5
393 392 0.425 0.4425 55669 304.5 732 1804 311.5
394 393 0.417 0.433 48307 310 702 1503 298.5
395 394 0.417 0.4455 54785 328.75 1022 1992 314
396 395 0.413 0.433 46634 309.25 793 1549 310
397 396 0.421 0.436 52534 310.5 1068 1895 297.5
398 397 0.425 0.44225 54464 304.75 964 1852 300.5
399 398 0.425 0.41925 45670 298 794 1568 303
400 399 0.417 0.4495 57743 322.5 905 1652 321
401 400 0.419 0.443 52390 307.75 934 1748 307.5
402 401 0.417 0.4255 48146 303.25 786 1516 320.5
403 402 0.417 0.439 53113 319.75 922 1512 310
404 403 0.417 0.44825 55653 310.25 780 1561 313.5
405 404 0.421 0.452 51762 311.25 987 1805 315
406 405 0.421 0.43225 57020 303 810 1841 310
407 406 0.417 0.4415 45124 307.5 875 1564 302
408 407 0.417 0.44275 52020 323.25 746 1662 317
409 408 0.421 0.44725 44786 313.25 733 1253 330
410 409 0.417 0.4215 45928 297.25 772 1592 294
411 410 0.417 0.444 65346 321.75 875 1866 336
412 411 0.417 0.45075 54608 324.5 808 1720 333.5
413 412 0.417 0.44425 65266 317.25 704 1801 331.5
414 413 0.417 0.423 42326 301.5 707 1208 311
415 414 0.417 0.44975 56264 302.5 861 1956 306
416 415 0.417 0.44325 50814 330 1029 1699 319
417 416 0.417 0.435 47920 323.5 800 1549 317
418 417 0.417 0.448 47165 319.75 996 1543 318
419 418 0.417 0.44975 51056 319.5 821 1488 306.5
420 419 0.417 0.4405 48724 307 700 1430 288
421 420 0.419 0.43625 45574 308.25 830 1533 334.5
422 421 0.419 0.42425 48773 305 1015 1694 315
423 422 0.425 0.4275 48242 302.25 971 1470 303.5
424 423 0.417 0.434 47503 306.5 718 1507 324
425 424 0.419 0.442 60508 309.5 737 1682 302.5
426 425 0.417 0.444 54062 318 884 1535 247.5
427 426 0.419 0.4235 45059 300 1001 1619 313.5
428 427 0.423 0.438 52164 299.25 920 1802 315
429 428 0.419 0.418 47937 304.25 921 1794 304
430 429 0.425 0.445 51457 300 893 1526 305
431 430 0.421 0.44025 53017 311.25 887 1575 298
432 431 0.417 0.44625 59351 323.5 789 1941 322
433 432 0.417 0.436 44749 310 789 1351 309.5
434 433 0.417 0.45075 59578 316.5 934 1818 334
435 434 0.419 0.4415 61167 325.25 1034 1992 321.5
436 435 0.425 0.43925 53016 308 1004 1780 305
437 436 0.419 0.42675 52551 294.5 641 1636 303
438 437 0.419 0.4505 57839 328 1172 1990 331
439 438 0.421 0.4405 57325 301.5 718 1545 311
440 439 0.425 0.44025 46554 303.75 896 1530 1862.5
441 440 0.428 0.45475 59752 316.5 810 1834 319
442 441 0.421 0.44725 52148 298 686 1550 307.5
443 442 0.429 0.431 52936 306.75 929 1743 303.5
444 443 0.417 0.4375 43034 307.75 791 1272 309.5
445 444 0.421 0.42575 46586 307.5 714 1675 310
446 445 0.421 0.43825 52792 321.5 875 1839 324
447 446 0.417 0.4235 47905 302.25 749 1650 314.5
448 447 0.421 0.449 52262 312.5 886 1741 319.5
449 448 0.421 0.442 51313 308 1024 1542 303.5
450 449 0.417 0.44225 56087 320.5 826 1486 324
451 450 0.417 0.44425 52204 310.25 868 1671 307.5
452 451 0.417 0.437 49400 316.75 947 1654 311
453 452 0.425 0.43525 46554 313.25 929 1608 315
454 453 0.417 0.44025 47310 312.5 1116 1750 316.5
455 454 0.421 0.443 53596 311 962 1754 298
456 455 0.417 0.453 57426 312.5 1024 2135 318
457 456 0.433 0.4435 53933 309.5 1183 1830 304
458 457 0.421 0.446 49030 316.75 1085 1930 310
459 458 0.421 0.432 49448 314 1036 1932 296
460 459 0.421 0.4455 48998 320.5 1148 1680 312
461 460 0.413 0.451 54769 301 816 1853 304
462 461 0.413 0.4425 54059 313.5 1017 1852 299.5
463 462 0.417 0.42925 47889 312.5 968 1675 309.5
464 463 0.417 0.444 55235 311.5 878 1754 300
465 464 0.417 0.4525 51699 310.25 931 1698 308
466 465 0.417 0.432 42809 307 906 1465 303.5
467 466 0.417 0.437 45526 301.25 796 1544 302
468 467 0.421 0.43375 55396 328.25 926 1995 305
469 468 0.421 0.43225 46298 304.75 948 1902 306.5
470 469 0.425 0.4355 50477 304 936 1908 297
471 470 0.417 0.44525 46988 307.5 989 1589 309.5
472 471 0.417 0.42975 41169 299.25 931 1295 290.5
473 472 0.421 0.433 47251 298.75 1029 1577 312.5
474 473 0.421 0.44 50557 314 1097 1844 302.5
475 474 0.421 0.438 48130 313.75 1172 1787 311
476 475 0.417 0.42625 47953 300.5 1026 1857 292
477 476 0.425 0.445 53515 314.75 1143 1692 313.5
478 477 0.421 0.446 56972 314.5 858 1832 324.5
479 478 0.417 0.4555 56328 315 772 1886 323.5
480 479 0.421 0.449 46683 313.25 866 1776 311
481 480 0.417 0.45925 42714 318.5 875 1472 310
482 481 0.417 0.43375 45176 306.5 882 1585 306.5
483 482 0.421 0.45275 53354 310 915 1696 313
484 483 0.421 0.45 62887 335 1099 2053 309.5
485 484 0.421 0.441 48724 299.25 1004 1596 283
486 485 0.417 0.42275 41780 306.25 1069 1466 296.5
487 486 0.421 0.43025 43789 296.5 1031 1549 304.5
488 487 0.417 0.43075 52550 313 864 1362 313.5
489 488 0.421 0.43525 47872 317.25 782 1642 327.5
490 489 0.421 0.4385 47889 315.5 878 1642 303
491 490 0.417 0.425 48808 317.25 828 1617 301.5
492 491 0.417 0.43775 45510 318.5 770 1444 319
493 492 0.417 0.424 47598 292.75 707 1342 292
494 493 0.417 0.4315 51248 316.5 802 1820 317
495 494 0.417 0.4425 49207 313 849 1620 314
496 495 0.425 0.44475 55058 310.5 770 1636 313
497 496 0.423 0.443 50007 306.75 1078 1820 296.5
498 497 0.421 0.4325 56216 310.25 756 1839 319.5
499 498 0.417 0.44625 52920 316 1150 1897 325.5
500 499 0.417 0.45675 49834 306.5 915 1766 315.5
501 500 0.425 0.4455 49593 315.75 914 1614 1808
502 501 0.421 0.44175 52245 319.25 1052 1886 317
503 502 0.421 0.4505 56039 316.75 1057 1962 329
504 503 0.417 0.443 46699 313.25 784 1594 326
505 504 0.421 0.4395 47438 305 931 1846 304.5
506 505 0.421 0.441 45027 306 850 1610 311.5
507 506 0.421 0.43025 46136 305.5 854 1626 315.5
508 507 0.421 0.433 45092 310 833 1582 307
509 508 0.417 0.4345 50862 321.25 1092 1934 296.5
510 509 0.417 0.4395 51200 306.75 805 1746 301
511 510 0.417 0.43675 51602 302.75 634 1426 289
512 511 0.417 0.4305 49071 303.75 850 1606 304
513 512 0.417 0.435 47776 304.75 796 1463 304
514 513 0.417 0.446 50605 321 686 1503 302.5
515 514 0.417 0.444 54158 321 910 1766 321.5
516 515 0.417 0.435 47390 308.25 864 1762 298.5
517 516 0.417 0.42775 44561 299 835 1542 305
518 517 0.421 0.4535 56167 318.5 864 1787 317
519 518 0.421 0.432 42359 315 976 1463 330.5
520 519 0.421 0.43675 42841 310.25 970 1416 313
521 520 0.425 0.43425 52856 324 1118 1771 306.5
522 521 0.425 0.444 50107 314 955 1788 300.5
523 522 0.421 0.43575 52277 308.75 760 1566 300.5
524 523 0.425 0.4545 50589 319.75 917 1614 323.5
525 524 0.417 0.4435 50621 318.75 1158 1864 309
526 525 0.421 0.425 47229 295.75 833 1558 314
527 526 0.417 0.458 53242 323.75 976 1815 303.5
528 527 0.417 0.4475 51474 319.75 858 1706 321.5
529 528 0.417 0.4435 46780 305.25 816 1638 325
530 529 0.421 0.4275 46281 306.5 873 1603 299.5
531 530 0.417 0.44175 45140 305 976 1886 306.5
532 531 0.417 0.4265 40012 294 914 1318 293.5
533 532 0.417 0.4225 45429 303.25 934 1561 296.5
534 533 0.417 0.44375 45879 312.75 1012 1734 324
535 534 0.417 0.437 44063 312 928 1713 302
536 535 0.417 0.433 44625 313.25 849 1255 302
537 536 0.413 0.42525 46538 310.25 970 1325 310
538 537 0.421 0.443 48701 320 850 1628 310
539 538 0.425 0.43975 50959 316.25 1045 1654 309.5
540 539 0.421 0.42775 42954 306.5 900 1505 314.5
541 540 0.417 0.42875 52872 317.75 812 1678 309
542 541 0.417 0.4295 49994 305.25 882 1668 304.5
543 542 0.417 0.42425 47583 313.75 852 1741 322.5
544 543 0.413 0.42775 49930 315 954 1715 311.5
545 544 0.413 0.4455 53885 304.25 931 1892 301
546 545 0.417 0.43125 48934 311 793 1349 308.5
547 546 0.421 0.433 46731 305.75 800 1536 312
548 547 0.417 0.45175 53017 323.75 747 1766 314
549 548 0.417 0.4575 51216 323 800 1740 348
550 549 0.421 0.43075 61440 307 954 2070 305.5
551 550 0.433 0.4375 54094 303.25 858 1871 308
552 551 0.417 0.42775 45172 309.5 936 1484 305
553 552 0.417 0.4215 43918 302.75 872 1556 299
554 553 0.417 0.44625 47872 411.6666667 758 1456 308.5
555 554 0.417 0.434 47503 313.5 718 1549 283.5
556 555 0.417 0.456 57646 315.25 826 1771 326
557 556 0.417 0.4325 52100 310.5 766 1764 310.5
558 557 0.417 0.44075 42696 306.75 968 1461 319.5
559 558 0.413 0.42925 48338 316.75 679 1362 308.5
560 559 0.413 0.441 49190 316 649 1540 333.5
561 560 0.417 0.42825 42873 312 901 1438 309.5
562 561 0.433 0.435 47214 302 1200 1676 357.5
563 562 0.417 0.43225 52052 301.75 793 1657 317
564 563 0.415 0.43275 49239 317 896 1843 299
565 564 0.415 0.43 50428 313.5 1036 1740 308.5
566 565 0.413 0.441 44931 306.75 830 1586 307
567 566 0.433 0.45775 47728 323.25 740 1461 310
568 567 0.421 0.4465 52534 309.25 756 1852 312.5
569 568 0.417 0.4395 51522 308.25 698 1866 335.5
570 569 0.417 0.4295 52068 320.75 1031 1760 318.5
571 570 0.421 0.4405 48483 309.25 1074 1533 308
572 571 0.417 0.44725 53226 306.75 1015 1787 320.5
573 572 0.417 0.42175 42037 288.5 728 1345 299.5
574 573 0.421 0.41775 44320 284 728 1521 292
575 574 0.413 0.43425 47856 304.25 864 1439 299
576 575 0.417 0.43175 46780 306.25 971 1564 299
577 576 0.417 0.43 52599 306.25 870 1778 316
578 577 0.417 0.43375 53901 302.25 774 1759 297
579 578 0.417 0.45225 55267 312.75 744 1897 329.5
580 579 0.413 0.45325 47198 319.25 987 1521 308
581 580 0.421 0.4255 44963 306.5 804 1701 312
582 581 0.415 0.418 44658 304.75 868 1547 309.5
583 582 0.417 0.43925 54432 322.25 948 1811 306
584 583 0.417 0.4485 54142 326.25 1169 1934 312.5
585 584 0.417 0.4425 47149 328 1104 1620 323
586 585 0.417 0.4525 55572 308.5 872 1746 322
587 586 0.421 0.44225 48628 313.75 936 1624 302
588 587 0.409 0.44575 47117 323.75 905 1493 321.5
589 588 0.417 0.4505 50590 323.75 990 1738 310.5
590 589 0.417 0.44 58965 307.5 896 1899 311
591 590 0.417 0.43475 51972 313.75 882 1785 307
592 591 0.417 0.44325 48210 304.5 856 1564 309.5
593 592 0.421 0.435 51788 312 959 1421 329
594 593 0.409 0.44775 51554 313.25 780 1804 322.5
595 594 0.413 0.43 48178 314 817 1642 316.5
596 595 0.433 0.44175 49770 308 788 1577 305.5
597 596 0.417 0.45375 54801 311.5 821 1746 311
598 597 0.409 0.443 48596 306 693 1521 305
599 598 0.417 0.44275 51779 310 849 1687 310.5
600 599 0.417 0.44925 48226 302.75 850 1920 314
601 600 0.413 0.43925 51297 318.75 970 1846 307
602 601 0.417 0.43358 49046 314.75 970 1906 318
603 602 0.417 0.436 47294 313 971 1619 311.5
604 603 0.417 0.45 49834 313 896 1456 303
605 604 0.413 0.4375 43088 306 919 1497 314.5
606 605 0.415 0.463 58836 313.75 1004 2034 317.5
607 606 0.413 0.455 43902 317.25 912 1586 317
608 607 0.417 0.437 49721 305 761 1678 313.5
609 608 0.417 0.4345 44111 304 844 1720 312.5
610 609 0.417 0.4515 54334 316.5 877 1918 311
611 610 0.425 0.43825 44336 304.5 794 1418 318.5
612 611 0.413 0.42875 43998 305 802 1582 303
613 612 0.413 0.4445 47953 325 978 1549 317.5
614 613 0.417 0.45125 48387 326.5 966 1923 330.5
615 614 0.417 0.4365 55621 314.25 1040 2174 326.5
616 615 0.417 0.439 47891 302.75 1003 1657 320
617 616 0.413 0.43925 50782 311 696 1458 310.5
618 617 0.417 0.43675 52631 313.25 1080 1981 310
619 618 0.433 0.44725 54383 323 998 1783 330
620 619 0.425 0.44 48757 316 1024 1550 313
621 620 0.417 0.42875 48564 305.75 877 1880 299
622 621 0.425 0.44375 48001 310 945 1568 306
623 622 0.419 0.40975 46956 304.75 1076 1790 313
624 623 0.425 0.43875 51924 315 870 1684 303
625 624 0.425 0.42825 46780 302.5 842 1633 315.5
626 625 0.417 0.4435 46506 306.5 926 1568 307
627 626 0.417 0.44175 56328 320 1101 2116 304.5
628 627 0.417 0.42375 42150 313.5 901 1470 323.5
629 628 0.417 0.43425 45590 304.5 696 1446 309
630 629 0.421 0.4290525 52310 300.5 796 1687 316.5
631 630 0.417 0.4295 48644 417.6666667 833 1722 313
632 631 0.417 0.4555 48580 303.5 772 1419 293.5
633 632 0.417 0.4355 43548 299.75 807 1423 299.5
634 633 0.425 0.4215 43580 298.5 940 1516 299.5
635 634 0.425 0.445 48371 305 891 1568 312
636 635 0.425 0.44625 47664 315.5 884 1594 322.5
637 636 0.421 0.43525 45494 311.25 966 1620 305.5
638 637 0.421 0.438 52100 306 770 1724 314
639 638 0.421 0.44625 59334 316.25 912 2170 322
640 639 0.417 0.4425 48258 326 989 1799 314
641 640 0.421 0.43025 49126 311.75 1003 1526 300
642 641 0.413 0.4465 47053 316.75 761 1668 321
643 642 0.413 0.43975 45638 309.5 854 1517 315
644 643 0.421 0.4205 47374 299 863 1769 315
645 644 0.421 0.437 46522 300 842 1678 317
646 645 0.421 0.432 43146 297.75 747 1382 295.5
647 646 0.417 0.42925 46274 321.75 1018 1519 318
648 647 0.417 0.423 44208 304.75 980 1608 286.5
649 648 0.417 0.42525 47245 311.25 984 1535 301.5
650 649 0.425 0.46625 50139 314.25 910 1561 304
651 650 0.421 0.432 51747 312.75 872 1549 317.5
652 651 0.421 0.424 42278 307.25 854 1433 304
653 652 0.429 0.44425 50548 311.75 864 1496 313
654 653 0.421 0.42675 42970 294.25 770 1354 287.5

654
data/spc_data_full.csv Normal file
View File

@ -0,0 +1,654 @@
Batch,Speed,BatchQty,Para1Tgt,Para1,Para2Tgt,Para2,Para3,Para4,Para5,Para6,Para7,Para8,Para9,Para10,Para11,Para12,Para13,Para14,Para15,Para16,Para17,Para18,Para19,Para20,Para21,Para22,Para23
1,84,26,0.429,0.43025,317,324,314,49512,1759,0.42775,308.75,21557,810,0.4275,309,840,0.425,315.5,1564,75,25.52325581,55.42857143,4.074505239,0.26,0.62,0.588235294,23
2,100,26,0.421,0.433,317,319,400,47101,1746,0.43375,306.75,20512,824,0.4305,309,756,0.431,305.5,784,64.5,31.6,59.34065934,2.097505669,0.34,0.77,0.839907193,22
3,102,34,0.417,0.4285,317,323,316,60023,1482,0.428,311.75,24933,765,0.4325,319.75,863,0.4375,330.5,1166,76.3,27.47068677,44.27083333,2.888503755,0.33,0.78,0.681710214,24
4,96,21,0.421,0.43775,316,322,332,55428,1857,0.43925,322.75,24997,933,0.4375,321.5,780,0.4395,319.5,1362,71.58333333,26.38966873,55.55555556,2.392344498,0.35,0.63,0.65437788,22
5,94,23,0.421,0.41725,317,321,313,46442,1844,0.4185,312.5,20850,686,0.42175,305.75,791,0.4245,323.5,1334,60.15,28.84500299,47.31182796,2.951191827,0.23,0.66,0.722090261,22
6,98,97,0.425,0.44075,317,320,312,45539,1584,0.43875,309.25,20866,1400,0.445,311.25,684,0.445,314.5,868,55.16666667,36.03603604,68.92655367,2.37700387,0.31,0.78,0.702031603,20
7,98,43,0.421,0.42275,317,320,314,51492,1689,0.42625,311.75,20352,864,0.427,317.75,912,0.43,319.5,886,63.5,25.54285714,50.81081081,2.36653825,0.32,0.55,0.769931663,20
8,94,25,0.425,0.43175,317,321,310,47661,1782,0.428,301,21991,858,0.4325,307.75,812,0.435,299,984,61.33333333,47.98619102,62.90322581,1.81200453,0.44,0.52,0.687943262,20
9,102,65,0.427,0.44225,317,321,316,70638,1572,0.44,304.25,20352,252,0.446,319.5,901,0.441,319.5,1082,64.83333333,33.22014714,56.98924731,1.672433679,0.34,0.6,0.664444444,20
10,94,15,0.421,0.42875,317,321,304,45944,1377,0.4335,339.75,21059,255,0.4295,308,677,0.425,289,945,59.5,29.93555946,45.25139665,1.952662722,0.28,0.59,0.712230216,20
11,98,40,0.421,0.43925,317,325,330,56955,1848,0.43675,330.25,26300,968,0.4415,336.25,856,0.435,315.5,945,56.56666667,37.69363167,54.05405405,3.058438012,0.25,0.76,0.600431965,20
12,104,35,0.417,0.4245,317,320,312,37616,1689,0.431,314,20496,473,0.431,314,854,0.434,318.5,1127,52.16666667,32.51318102,56.7251462,1.87820148,0.29,0.77,0.811320755,20
13,95,46,0.421,0.43175,317,320,310,47953,1528,0.4325,321.25,23470,840,0.43125,318,763,0.429,305.5,1362,66.98333333,29.3202765,53.47593583,1.962983735,0.27,0.58,0.637813212,21
14,65,83,0.427,0.4295,317,320,324,51891,1913,0.43025,331.75,24162,1034,0.4305,326.5,947,0.4335,316.5,1554,87,23.18757192,43.40659341,2.306425041,0.25,0.73,0.583138173,20
15,98,23,0.425,0.43025,3178,323,304,42608,1648,0.43125,306,21638,784,0.431,305.5,978,0.4295,298.5,1194,64,29.19075145,56.66666667,2.628571429,0.5,0.75,0.787185355,20
16,94,40,0.425,0.44275,317,321,312,60625,1470,0.44425,316,21107,796,0.445,320.75,870,0.443,320,1533,71.66666667,36.2400906,60.42780749,2.155172414,0.31,0.86,0.767184035,22
17,80,36,0.427,0.4275,317,321,296,42359,1398,0.41975,295.5,16563,746,0.42525,303.75,814,0.419,306.5,1200,81.5,25.40869565,53.21637427,2.75175644,0.36,0.73,0.58411215,20
18,102,58,0.421,0.43925,311,320,310,46554,1452,0.43875,307.25,22554,1245,0.43875,310,768,0.439,304,772,55.73333333,37.79036827,61.08108108,2.559821925,0.36,0.91,0.600896861,20
19,102,29,0.421,0.44575,315,319,318,49564,1377,0.4445,315,22634,728,0.446,321.25,680,0.4415,314.5,861,59.68333333,42.80022766,74.28571429,0.576036866,0.32,0.85,0.915367483,19
20,104,68,0.421,0.4425,317,322,305,47824,1433,0.4405,318.5,21123,870,0.4395,317,770,0.4375,304,1120,53.5,45.70637119,71.18644068,1.840490798,0.36,0.71,0.856512141,19
21,94,119,0.421,0.43,313,319,303,48516,1573,0.4315,305.5,23422,842,0.43175,308,872,0.428,298.5,1232,75.95,36.45348837,61.32596685,1.881246326,0.42,0.92,0.656612529,20
22,92,56,0.425,0.42675,317,320,308,75703,1349,0.42825,306,20288,654,0.4255,309.5,690,0.427,307,1400,69.83333333,38.59020311,53.84615385,1.366742597,0.4,0.71,0.735981308,20
23,75,40,0.433,0.439,314,321,318,53064,1732,0.43775,314,24708,1003,0.4375,316,768,0.4365,317.5,1536,92.66666667,26.65897288,53.72340426,1.022604952,0.39,0.76,0.6367713,22
24,98,32,0.421,0.4215,317,324,312,51152,1578,0.42375,304,20818,740,0.421,303.25,704,0.427,307,1480,53.96666667,29.01734104,48.8372093,2.949681897,0.43,0.62,0.866995074,19
25,98,50,0.421,0.42675,317,318,311,45172,1507,0.428,314.5,21091,821,0.42675,310.5,845,0.4325,325,1516,81,24.85448196,43.85026738,2.362204724,0.38,0.74,0.651658768,20
26,100,60,0.421,0.4275,317,320,308,49898,1628,0.425,297.5,20512,620,0.42325,302.5,616,0.4215,297.5,1575,57.33333333,32.42320819,66.11111111,1.922020868,0.31,0.77,0.634844869,19
27,98,40,0.421,0.43825,317,321,315,43420,1440,0.439,315.25,24596,200,0.4395,306.25,733,0.442,303,1550,65.16666667,24.29313329,41.30434783,2.223489168,0.37,0.54,0.638826185,18
28,102,57,0.421,0.4575,317,326,318,49625,1482,0.46125,318.5,23615,729,0.46025,316.5,660,0.4475,316,1026,45,36.76222597,56.98324022,1.038661281,0.27,0.58,0.417607223,22
29,102,35,0.417,0.427,317,323,315,48163,1512,0.4315,314.25,21975,700,0.42775,314.25,856,0.4385,319,1190,63.2,34.61084906,54.3956044,2.795208214,0.21,0.89,0.793911007,19
30,98,52,0.421,0.431,317,322,309,46619,1578,0.43,310,20560,870,0.4305,308.5,886,0.4325,311,1278,68.83333333,35.57199772,56.75675676,1.428571429,0.37,0.76,0.678321678,18
31,96,47,0.4213,0.43125,317,323,310,48532,1559,0.428,305.75,17956,595,0.42975,303.5,802,0.43,303.5,910,65.7,39.87268519,58.98876404,1.474758934,0.24,0.62,0.687793427,18
32,96,55,0.425,0.443,317,321,320,53965,1979,0.44075,316.25,23390,943,0.44,314,828,0.4405,310.5,1074,82.5,28.96983495,51.06382979,2.285714286,0.17,0.6,0.799097065,20
33,100,27,0.421,0.42975,317,323,319,49753,1755,0.42775,318.5,21959,929,0.4305,321.75,864,0.429,312.5,724,76.16666667,29.70930233,50.28901734,2.12514758,0.21,0.72,0.622119816,19
34,90,34,0.425,0.4305,318,320,302,48741,1610,0.42825,305.5,22345,831,0.43025,298.25,758,0.436,307,1298,76.66666667,29.08366534,48.92473118,1.386577926,0.3,0.61,0.788863109,20
35,104,100,0.421,0.44325,317,317,326,54110,1878,0.443,310.25,24869,936,0.44125,318,877,0.434,301,1102,70.16666667,33.90804598,60.81871345,2.151823072,0.1,0.6,0.634259259,21
36,90,37,0.421,0.45425,317,324,320,66539,1580,0.44775,329.25,24885,952,0.452,322.5,819,0.452,314.5,959,76.33333333,25.44444444,53.26086957,1.366742597,0.3,0.75,0.72967033,21
37,80,37,0.433,0.4405,317,320,318,49898,1792,0.4375,304,22988,961,0.439,315.25,1153,0.4425,316.5,1148,77,26.88652879,51.95530726,3.23699422,0.24,0.48,0.763157895,22
38,105,46,0.417,0.4345,317,322,306,44963,1223,0.43675,315.75,23358,742,0.437,305,768,0.443,303,1614,60,40.35693725,56.81818182,2.53776435,0.18,0.54,0.746067416,23
39,90,27,0.421,0.4385,317,327,317,47454,1738,0.428,311.5,19098,794,0.4305,313.75,803,0.433,307.5,1488,73.83333333,32.71245634,59.65909091,2.247191011,0.31,0.45,0.648837209,22
40,95,81,0.421,0.449,317,324,311,45574,1550,0.45325,326.75,23647,901,0.451,319.75,822,0.4475,320.5,1337,65.16666667,29.56326988,56.90607735,1.341531582,0.19,0.88,0.755707763,18
41,98,100,0.421,0.4485,317,326,303,47744,1498,0.449,311.5,21959,852,0.449,307.5,772,0.451,313.5,1208,52.5,32.48195447,56.49717514,2.868391451,0.37,0.74,0.747826087,19
42,104,60,0.419,0.4345,317,325,308,73536,1356,0.4335,307,19033,749,0.43075,310.75,758,0.4255,301.5,808,46.33333333,35.02331002,53.98773006,1.957186544,0.26,0.6,0.631929047,19
43,98,98,0.421,0.42775,317,320,308,47069,1442,0.43375,304.75,22618,962,0.42925,301,726,0.4325,306,1183,58.33333333,29.34232715,47.20812183,1.960784314,0.34,0.57,0.665882353,19
44,96,37,0.421,0.4385,317,322,308,48274,1530,0.4425,312.75,19837,662,0.43775,307.25,492,0.4375,305.5,1057,38.2,40.4935502,56.18556701,2.23838836,0.19,0.66,0.75,18
45,92,27,0.425,0.424,317,320,303,45622,1547,0.42425,298.5,17860,733,0.4245,313,919,0.428,296.5,1250,60.83333333,26.10695802,53.63128492,1.887840089,0.28,0.68,0.69047619,20
46,90,17,0.421,0.4345,317,322,314,49046,1416,0.43575,311.5,22763,707,0.43525,318,884,0.436,306.5,1302,67.56666667,23.93887946,42.32804233,2.727768685,0.35,0.7,0.638694639,20
47,75,27,0.433,0.451,317,324,324,55492,1601,0.449,320.5,26412,900,0.4515,330.75,892,0.4475,317,1284,51.5,27.73681225,54.59459459,2.067464635,0.3,0.61,0.651612903,20
48,101,78,0.421,0.43725,317,320,309,47582,1381,0.434,310.25,20576,898,0.43175,309.75,826,0.433,300,1036,53,33.40961098,60.79545455,2.504472272,0.21,0.68,0.835990888,19
49,80,30,0.421,0.43125,318,320,308,48387,1750,0.43525,312.5,22586,915,0.433,309.25,817,0.427,298.5,836,62.5,30.20172911,44.50549451,1.6,0.27,0.67,0.593967517,20
50,93,49,0.425,0.432,317,321,333,50200,1824,0.43275,339.75,21123,892,0.43125,323,1031,0.4335,310.5,875,55.16666667,32.25998807,55.0295858,1.343784994,0.34,0.67,0.759345794,20
51,102,44,0.421,0.4415,317,320,315,50477,1437,0.44325,308.25,20560,611,0.4425,317.5,578,0.4465,314,882,41.31666667,36.02484472,77.90697674,2.279202279,0.39,0.92,0.787671233,20
52,102,132,0.421,0.43725,317,322,313,46715,1255,0.4375,319,21606,621,0.43475,311.5,738,0.439,309.5,1127,55.18333333,31.49295775,48.40425532,1.048565121,0.37,0.7,0.692488263,19
53,92,55,0.421,0.427,317,320,306,48242,1894,0.428,315.25,20657,898,0.42575,308,910,0.4345,308.5,924,78.5,26.5793967,49.72375691,1.086956522,0.27,0.64,0.593220339,20
54,98,50,0.425,0.44275,317,320,316,53676,1517,0.438,311.75,17442,616,0.4435,310.25,768,0.4405,321,903,53.78333333,35.30415009,67.64705882,1.013333333,0.29,0.98,0.805429864,18
55,95,45,0.423,0.42875,317,321,306,44882,1528,0.43175,305,19802,850,0.43175,307.25,735,0.435,306.5,896,62.5,34.63079565,60.46511628,2.249134948,0.4,0.87,0.711627907,20
56,100,35,0.421,0.44,317,320,316,50493,1614,0.441,310,21862,817,0.4425,317.25,1004,0.447,311,1050,47.33333333,29.54285714,57.55813953,2.939375383,0.27,0.69,0.683146067,20
57,62,131,0.433,0.43725,317,319,312,55654,1617,0.4345,299.5,19419,770,0.434,312.5,854,0.438,300.5,959,70.5,26.98768197,48.04469274,1.920903955,0.35,0.45,0.655737705,22
58,90,30,0.421,0.43825,317,326,317,51200,1764,0.43925,306,22168,852,0.43775,309.75,779,0.444,312.5,1054,54,28.57142857,47.61904762,2.18579235,0.44,0.7,0.673423423,20
59,90,90,0.425,0.43925,317,322,320,54512,1797,0.44,314.25,23486,831,0.44075,322,957,0.4415,328.5,854,72.33333333,26.39734366,45.91836735,1.092896175,0.32,0.7,0.638248848,30
60,102,83,0.421,0.44525,317,321,306,44352,1393,0.44425,303,20384,656,0.448,305.75,702,0.45,314.5,840,49.88333333,35.34726143,75.88235294,1.455180442,0.39,0.69,0.754424779,19
61,93,64,0.421,0.42975,317,319,320,49705,1648,0.433,316.75,22136,864,0.428,316.75,959,0.4345,314.5,1141,57,29.43925234,51.74418605,2.383863081,0.37,0.7,0.613793103,21
62,94,81,0.421,0.43425,317,320,299,44480,1540,0.4365,298.25,19950,716,0.4335,297.5,779,0.4365,295,1326,63.5,31.66089965,64.02439024,1.690670006,0.32,0.83,0.595402299,20
63,80,22,0.429,0.44275,317,326,312,50718,1718,0.44175,318.25,25672,1029,0.44125,311.5,894,0.4365,304.5,1088,61.5,29.731243,59.30232558,1.826974745,0.45,0.91,0.635103926,23
64,85,45,0.421,0.451,3.7,319,326,48435,1587,0.44575,323.5,24772,691,0.45025,319.25,742,0.447,316,808,41.83333333,34.83398987,62.10526316,1.252041372,0.35,0.82,0.647186147,19
65,84,32,0.425,0.44125,317,324,324,53596,1904,0.44275,307,22441,840,0.4365,317,854,0.444,312.5,844,54.83333333,37.93103448,66.4893617,1.83639399,0.44,0.55,0.566513761,20
66,100,25,0.421,0.44975,318,323,308,48387,1362,0.44675,321.25,23084,721,0.4475,310.5,623,0.4505,312.5,581,37.43333333,48.1105471,91.62011173,2.633118783,0.4,0.7,0.714611872,20
67,85,36,0.429,0.438,317,320,312,46301,1323,0.4305,301.25,23502,793,0.43125,301.25,600,0.431,317.5,1218,51.66666667,30.23255814,45.25139665,3.994927077,0.43,0.44,0.592592593,21
68,86,30,0.425,0.44775,317,324,314,45890,1393,0.44525,312.25,22827,872,0.445,322.5,698,0.4455,312.5,595,49.33333333,43.92794887,69.61325967,1.662844037,0.46,0.83,0.824295011,22
69,97,37,0.417,0.43175,317,319,310,44850,1400,0.433325,312.75,25512,831,0.43025,310.5,761,0.4305,300,777,37.33333333,33.86524823,61.36363636,2.210884354,0.36,0.7,0.731207289,20
70,80,27,0.425,0.42225,317,320,307,42873,1220,0.42225,311.75,22023,679,0.42175,300.75,662,0.4215,303,1106,59.4,29.86935867,48.87640449,2.038369305,0.32,0.95,0.628841608,19
71,85,16,0.425,0.434,317,320,306,43388,1202,0.4385,314.75,25158,808,0.4365,315.25,632,0.439,320.5,917,49.83333333,39.7964952,74.55621302,2.140672783,0.37,0.88,0.971830986,23
72,94,99,0.421,0.43175,317,320,308,42391,1402,0.43075,301,19371,667,0.43275,303,595,0.4275,289.5,690,30,33.03886926,64.94252874,0.183823529,0.19,0.62,0.653579677,20
73,100,30,0.417,0.43775,317,321,302,47760,1503,0.43675,306,20818,730,0.43825,305.5,789,0.4395,314.5,945,36.16666667,33.44827586,65,1.838440111,0.26,0.51,0.879120879,18
74,100,42,0.425,0.43075,317,319,316,54399,1759,0.42725,305.25,21895,821,0.42925,316,896,0.437,324,777,36.83333333,24.39313203,53.93939394,2.320047591,0.35,0.22,0.534883721,18
75,98,32,0.418,0.4335,317,318,312,51360,1642,0.431,303,22474,821,0.43175,304.75,929,0.436,304.5,945,45.16666667,28.22120867,56.52173913,3.243540407,0.17,0.68,0.625882353,19
76,100,59,0.421,0.445,317,321,322,60484,1839,0.44325,314.5,22409,1029,0.44275,317.75,961,0.436,304.5,998,50.83333333,35.03981797,54.28571429,2.052597819,0.23,0.51,0.624719101,19
77,92,35,0.425,0.44375,317,324,320,55800,1610,0.44525,315,23936,654,0.4465,319,856,0.445,314,639,34.16666667,32.69983231,64.94252874,2.899408284,0.17,0.51,0.484162896,20
78,98,50,0.421,0.44875,317,320,325,53611,1479,0.4465,316.75,22152,609,0.4485,315.75,593,0.4495,307,784,38.05,43.83714445,64.21052632,2.378255946,0.3,0.56,0.671111111,20
79,98,56,0.421,0.45475,317,320,323,53756,1648,0.455,316,23486,768,0.45175,324.75,894,0.457,323.5,1295,49.16666667,33.15305571,62.01117318,1.825013419,0.16,0.43,0.666666667,18
80,102,129,0.417,0.449,317,322,324,53756,1440,0.45225,321.5,24226,786,0.451,311.5,562,0.4515,317,525,22.36666667,51.43165856,85.32608696,1.950659782,0.22,0.6,0.81797235,19
81,101,71,0.417,0.4375,317,319,304,48226,1629,0.4405,316,23310,854,0.44025,308.75,887,0.438,312.5,984,49.16666667,32.20823799,58.82352941,1.886792453,0.38,0.56,0.773033708,19
82,85,29,0.425,0.4385,317,319,314,49689,1535,0.44025,313.25,20496,777,0.43925,310.25,817,0.443,316.5,1190,65.16666667,25.55492316,60.22099448,2.272727273,0.38,0.62,0.801801802,20
83,102,102,0.418,0.437,317,322,308,42262,1307,0.441,307.25,24612,1025,0.4445,315.5,905,0.445,306.5,844,45.33333333,45.79855314,84.81675393,2.019650655,0.46,0.67,0.707207207,23
84,103,25,0.417,0.43675,317,320,317,44706,1351,0.4345,300.75,20802,695,0.44075,298.75,728,0.44,310.5,903,42.85,39.04542841,73.14285714,2.123672705,0.32,0.64,0.847161572,23
85,102,112,0.417,0.4375,317,321,302,43146,1526,0.442,308.75,20400,714,0.43825,297,712,0.44,292.5,822,49.33333333,32.37934905,56.04395604,2.366863905,0.23,0.46,0.657210402,20
86,100,42,0.417,0.442,317,321,324,53048,1519,0.4415,306.75,20239,662,0.436,312.75,642,0.443,313.5,784,37.45,33.6492891,58.92857143,1.720183486,0.31,0.8,0.681917211,20
87,98,43,0.421,0.43175,318,323,308,48740,1542,0.42925,311.25,21959,840,0.43225,313.5,940,0.431,298,1001,62.16666667,25.94093804,45.40540541,2.18579235,0.26,0.64,0.630136986,20
88,100,32,0.417,0.43925,317,323,314,48290,1430,0.4455,307.5,20480,656,0.44025,313.75,835,0.4515,324,1071,39.28333333,29.62750716,58.28571429,2.181400689,0.36,0.88,0.636155606,20
89,98,52,0.417,0.437,317,321,322,49110,1631,0.43175,309.5,21300,723,0.435,306,802,0.4335,312.5,826,47.83333333,31.31991051,56.61375661,1.142857143,0.34,0.79,0.881642512,20
90,88,71,0.421,0.4225,317,319,296,46233,1507,0.42125,300,18069,791,0.421,298,812,0.4265,299.5,1152,58.83333333,29.85865724,55.80110497,1.878453039,0.36,0.76,0.715294118,19
91,104,31,0.417,0.455,317,321,318,48580,1533,0.4525,312,23310,819,0.45325,313.25,738,0.4525,324.5,934,37.33333333,36.26373626,58.79120879,1.117318436,0.31,0.67,0.642857143,20
92,90,23,0.421,0.458,318,320,316,52052,1545,0.46025,315.5,25753,805,0.4595,320.5,763,0.462,318,652,37.16666667,43.72972973,90.39548023,2.985074627,0.36,0.68,0.815384615,23
93,95,67,0.417,0.4345,317,321,312,54126,1684,0.43025,299.5,22650,774,0.434,310,831,0.437,305,976,43.75,38.07890223,49.43820225,1.208981002,0.42,0.66,0.662037037,20
94,96,29,0.421,0.4425,317,320,316,52824,1671,0.4425,320.75,24933,940,0.442,323.75,920,0.445,323,1026,54.5,28.14982974,55.74712644,2.994011976,0.35,0.6,0.724373576,20
95,98,142,0.421,0.435,317,320,307,46120,1334,0.4365,310,19966,751,0.44,309.5,732,0.439,311.5,609,44.33333333,27.67402377,46.84210526,2.688172043,0.38,0.57,0.728110599,20
96,98,14,0.421,0.43975,317,322,312,50959,1482,0.43825,319.25,22184,679,0.43625,304,824,0.4405,311.5,777,44.85,38.04100228,64.40677966,3.306264501,0.47,0.57,0.661399549,20
97,80,10,0.429,0.4455,317,320,326,58096,1852,0.45,315.5,21590,656,0.4455,324,1001,0.4485,328.5,980,42,27.07209686,59.47368421,2.673796791,0.22,0.65,0.66962306,20
98,65,19,0.433,0.44775,317,321,318,50059,1454,0.449,321,21638,653,0.4465,308.25,719,0.444,310,938,54.45,22.68673356,52.97619048,2.485875706,0.34,0.64,0.539325843,21
99,104,29,0.425,0.44575,317,319,312,54046,1264,0.4425,315.75,24129,704,0.44575,317.75,744,0.449,327.5,1141,44,40.77555817,68.04733728,3.695408735,0.29,0.58,0.62962963,19
100,92,16,0.421,0.439,317,321,318,49898,1552,0.44325,315.5,22216,751,0.44075,317.25,924,0.4445,310.5,1078,51,28.90365449,61.05263158,2.173913043,0.32,0.84,0.753393665,20
101,75,26,0.429,0.44975,317,326,328,57244,1853,0.44925,323.25,26508,985,0.44675,323.5,929,0.446,320.5,1344,64.5,19.20903955,48.55491329,1.694915254,0.35,0.7,0.615044248,20
102,103,122,0.421,0.43325,317,318,303,45429,1407,0.42875,296,21300,866,0.442,300,639,0.4445,306,1022,47.33333333,35.86659377,79.76190476,2.839879154,0.28,0.62,0.587006961,21
103,80,97,0.429,0.443,317,321,312,47808,1703,0.4405,301.25,25882,1062,0.43875,315.25,789,0.4385,306.5,718,45.5,30.58823529,58.06451613,2.824858757,0.35,0.61,0.531322506,20
104,96,127,0.421,0.4445,317,320,313,48146,1656,0.45375,318.75,27216,1003,0.45075,312.5,779,0.45,302,766,40.33333333,35.32967033,65.43209877,1.807228916,0.32,0.62,0.981776765,22
105,90,30,0.421,0.4385,317,321,314,52518,1699,0.435,308.25,23004,788,0.4375,317.25,805,0.4335,305.5,861,47.35,39.18690006,56.61375661,2.310803004,0.47,0.65,0.648401826,21
106,94,30,0.421,0.4435,317,321,325,55267,1710,0.446,318,24354,998,0.445,314.75,756,0.451,322.5,819,45.66666667,24.87644152,56.52173913,2.310231023,0.37,0.56,0.875862069,20
107,98,72,0.421,0.44,317,323,307,47262,1298,0.44,311,21557,639,0.438,308.25,695,0.4405,304,522,39.56666667,26.04049494,58.75706215,2.151755379,0.45,0.67,0.803652968,20
108,88,32,0.421,0.42675,317,319,312,50396,1760,0.42625,312.75,23068,803,0.4245,310,903,0.422,304.5,1068,45,25.36873156,48.23529412,2.525832377,0.26,0.72,0.533333333,20
109,85,29,0.425,0.43425,317,315,310,49673,1614,0.43425,298.5,23036,845,0.43325,297.25,784,0.4335,291,1113,53.16666667,22.49544627,42.39130435,2.367941712,0.33,0.75,0.635730858,21
110,100,54,0.42419,0.439,317,322,316,47374,1652,0.43975,306.5,21702,847,0.4405,321.75,836,0.4635,319,892,36.66666667,35.63799888,58.69565217,1.663090129,0.43,0.56,0.653594771,21
111,94,77,0.417,0.43975,317,319,312,49223,1570,0.4385,315.5,19346,590,0.4385,313.75,818,0.443,311,966,49.83333333,33.86524823,59.28143713,2.361751152,0.18,0.71,0.690949227,20
112,92,18,0.421,0.44475,317,321,318,54480,1479,0.44025,310.25,20496,570,0.4435,308.75,716,0.4475,312,1162,38.4,27.32331664,48.33333333,3.076923077,0.22,0.56,0.805936073,21
113,88,46,0.421,0.437,317,321,312,45609,1465,0.4385,312,22586,819,0.43825,309,768,0.44,301,630,50.83333333,29.30153322,54.94505495,2.375565611,0.59,0.19,0.759637188,20
114,90,93,0.425,0.439,317,320,318,54560,1437,0.436,302.5,21236,625,0.4365,318.25,728,0.438,304.5,536,40.65,17.6536943,47.42857143,0.161290323,0.2,0.56,0.774941995,20
115,90,33,0.421,0.435,317,324,304,51280,1704,0.4335,303.25,21686,709,0.436,309.5,844,0.439,305,917,47.33333333,20.51282051,43.45238095,1.379310345,0.23,0.55,0.802352941,20
116,75,18,0.429,0.4445,317,322,311,52808,1727,0.44575,317.25,23374,681,0.445,311.5,968,0.4465,310,1194,55.65,20.01124227,40.95744681,1.902173913,0.13,0.53,0.665148064,20
117,82,82,0.427,0.436475,317,319,318,47583,1404,0.43875,314.25,22232,719,0.43825,315.5,604,0.4365,320,826,55.83333333,26.50115473,50.27624309,1.775147929,0.13,0.6,0.601830664,22
118,80,18,0.429,0.441,317,319,315,48918,1647,0.44025,311.5,24017,814,0.44325,318.75,919,0.4385,305.5,1306,58,25.7918552,54.64480874,1.725163593,0.27,0.6,0.665148064,21
119,70,25,0.429,0.4435,317,319,316,53113,1390,0.44475,305.25,20994,606,0.4425,309,653,0.441,315,1124,61.83333333,30.37330317,48.10810811,1.836969001,0.26,0.57,0.67114094,21
120,90,36,0.421,0.443,317,322,316,49062,1577,0.433576,305.75,20593,765,0.44125,306.25,737,0.439,304,1001,50,42.33870968,63.58381503,1.697045883,0.29,0.76,0.85077951,20
121,100,36,0.417,0.44925,317,322,320,51136,1547,0.444,309.5,23615,791,0.44575,317.5,698,0.882,616,630,37,29.79084228,65.69767442,3.03030303,0.35,0.63,0.749435666,20
122,103,86,0.417,0.4395,317,321,317,49110,1414,0.434,311.75,20994,649,0.434,319.25,597,0.867,586,483,39.51666667,43.06818182,65.90909091,2.477876106,0.35,0.59,0.654205607,20
123,104,34,0.421,0.436,317,324,316,53483,1521,0.44025,312.75,21638,579,0.438,312.5,607,0.44,306,700,35.6,27.13091922,54.14364641,0.634584876,0.25,0.43,0.775656325,20
124,98,26,0.417,0.43475,317,318,317,50557,1545,0.43625,312.5,24081,912,0.437,307.5,709,0.433,307.5,948,44.66666667,29.21348315,55.61497326,1.324854266,0.29,0.58,0.808219178,20
125,101,26,0.417,0.4305,317,320,312,46410,1608,0.438,305,23840,942,0.4325,303.75,796,0.438,298,802,40.83333333,29.9028016,59.21787709,2.5625,0.24,0.89,0.736238532,23
126,102,81,0.421,0.4395,317,320,315,50204,1701,0.4395,311.5,22088,836,0.44175,317.75,842,0.441,315,878,46.83333333,35.83945732,63.04347826,2.527472527,0.17,0.72,0.64037123,20
127,102,41,0.417,0.43775,317,323,312,44754,1362,0.43775,317.75,23325,940,0.4365,321.5,777,0.4415,312.5,700,39,33.97291196,61.29032258,2.177463255,0.31,0.77,0.814220183,20
128,106,104,0.421,0.438,317,321,304,46233,1398,0.43675,313.25,21493,793,0.429,304.75,719,0.437,302,976,36.83333333,32.81875357,66.66666667,1.802325581,0.28,0.75,0.77383592,20
129,104,19,0.417,0.43975,317,321,312,44095,1379,0.43925,301.25,18808,663,0.43875,301.25,740,0.444,300.5,480,36,32.84313725,56.61375661,2.389803505,0.29,0.72,0.897196262,18
130,92,1,0.419,0.42375,317,319,305,45799,1500,0.41775,307.5,18808,684,0.42225,299,782,0.423,299.5,987,63.83333333,29.78723404,65.19337017,2.154195011,0.32,0.83,0.658653846,18
131,96,42,0.419,0.45375,317,321,328,55317,1510,0.4575,323.25,23454,650,0.45475,322.25,831,0.4535,320,1071,51.83333333,38.92876864,52.12765957,1.479915433,0.37,0.92,0.543290043,18
132,100,45,0.417,0.433,317,322,312,46426,1349,0.43225,302.25,19162,625,0.4325,308,660,0.4335,314,648,31.9,47.95127353,59.45945946,1.808634772,0.3,0.88,0.833723653,18
133,104,23,0.417,0.441,317,321,326,53917,1829,0.44375,315,21991,719,0.43825,304,751,0.4435,305.5,822,49.5,40.7530454,65.95744681,0.818777293,0.39,0.67,0.712962963,18
134,100,12,0.417,0.43125,317,320,310,53097,1410,0.42375,307.25,20592,614,0.428,306.5,592,0.433,305,882,36.43333333,39.22241281,66.47727273,1.567944251,0.27,0.59,0.710648148,18
135,95,4,0.421,0.4365,317,324,316,48532,1484,0.43625,312,23181,744,0.433,306.25,640,0.4325,301.5,707,50.16666667,39.36170213,61.95652174,1.573033708,0.34,0.5,0.82983683,18
136,80,34,0.417,0.41475,317,320,307,46024,1489,0.41075,308.25,17346,536,0.41425,303,749,0.4175,301,696,77.51666667,23.65721183,46.77419355,1.806588735,0.22,0.53,0.658767773,20
137,90,26,0.421,0.4315,317,320,302,44513,1486,0.42975,307.25,22714,796,0.43075,307,779,0.431,311,900,50.5,26.65505226,60,2.51903925,0.23,0.5,0.745283019,20
138,100,112,0.421,0.43575,317,321,314,49942,1664,0.4355,312.5,23647,924,0.43625,311,791,0.432,298.5,830,51.83333333,32.56855064,60.21505376,2.047592695,0.3,0.67,0.755760369,19
139,98,118,0.419,0.42475,317,319,312,50284,1545,0.42325,311.75,20641,714,0.42525,307,712,0.4285,310.5,746,54.16666667,29.50437318,62.20930233,2.131336406,0.43,0.54,0.624708625,18
140,100,19,0.421,0.436,317,324,300,44384,1339,0.44325,308,21943,803,0.43825,300.75,712,0.446,310,798,41.66666667,42.65815438,28.40236686,1.576182137,0.37,0.56,0.811494253,19
141,97,31,0.417,0.43875,317,319,315,51763,1437,0.433,309,20528,598,0.44,309.5,800,0.441,311,938,51,30.01715266,64.44444444,2.356321839,0.29,0.72,0.597727273,20
142,102,27,0.419,0.45425,317,323,320,52711,1393,0.4495,321.5,23744,662,0.4535,315.75,732,0.46,311.5,570,31.11666667,43.56545961,69.18604651,1.835405565,0.39,0.54,0.721238938,19
143,98,23,0.421,0.44675,317,323,316,53370,1802,0.44275,314.75,22730,858,0.4425,316,849,0.444,322.5,1354,54.16666667,30.72118115,51.26903553,2.497398543,0.29,0.48,0.64380531,18
144,102,95,0.417,0.4325,317,322,306,48275,1578,0.4285,307.75,20496,642,0.42975,308,850,0.4275,300,1015,58.26666667,31.10102157,59.5505618,1.861702128,0.4,0.65,0.687203791,19
145,102,21,0.417,0.4415,317,322,315,45429,1407,0.43675,311.75,19805,662,0.438,311.25,733,0.4435,299,798,53.5,38.11936937,45.40540541,1.565120179,0.35,0.68,0.703196347,20
146,92,53,0.429,0.439,317,322,309,49705,1554,0.44075,305.25,21766,710,0.44125,305,796,0.443,299,1081,45.5,29.43502825,58.23529412,1.776960784,0.36,0.7,0.636986301,20
147,101,84,0.419,0.44175,317,318,315,47703,1680,0.4465,305.75,21204,824,0.4385,313,735,0.442,318.5,808,54.83333333,30.95505618,48.82352941,2.926525529,0.24,0.65,0.591836735,20
148,100,23,0.417,0.42375,317,321,300,40944,1363,0.425,300.75,18840,688,0.4235,299.25,705,0.4185,292.5,749,36,35.85858586,63.48314607,2.209302326,0.26,0.73,0.909722222,20
149,92,35,0.421,0.43,317,321,311,44738,1328,0.42975,301.5,21686,684,0.43,308.75,760,0.436,306.5,1071,53.28333333,32.33256351,50.81081081,2.570233114,0.31,0.67,0.76744186,20
150,95,150,0.421,0.44825,317,323,320,48741,1550,0.43825,308.5,21991,704,0.4435,312.5,633,0.445,325,816,44.33333333,28.83295195,63.31360947,2.005730659,0.33,0.52,0.610599078,20
151,100,141,0.421,0.4385,317,322,312,46940,1466,0.441,312,21798,728,0.4375,309,746,0.438,307,570,36.16666667,30.90705487,55.4973822,1.621621622,0.41,0.75,0.931034483,20
152,90,22,0.425,0.4455,317,321,312,55176,1713,0.44225,313.25,21187,766,0.44525,311.75,854,0.4425,308.5,952,46.33333333,27.50434279,54.11764706,2.362669817,0.27,0.76,0.717391304,19
153,88,70,0.421,0.433,317,321,301,39594,1129,0.42925,306,20303,749,0.43225,303,718,0.436,309.5,896,52.33333333,35.3314121,61.62162162,0.911039657,0.32,0.72,0.702576112,18
154,92,35,0.421,0.437329,317,320,313,49416,1335,0.4345,311.25,22666,714,0.43425,313.25,744,0.436,309.5,732,40.21666667,37.16452742,58.24175824,1.893287435,0.32,0.8,0.717539863,19
155,88,14,0.425,0.44275,317,320,315,48258,1421,0.43975,318.75,28984,872,0.4425,319.25,760,0.4465,313.5,707,49.23333333,31.90883191,50.88757396,2.092760181,0.2,0.51,0.681093394,20
156,92,13,0.421,0.43475,317,319,308,45984,1218,0.436,319.25,22409,532,0.43725,303,499,0.4315,312.5,718,41,39.04542841,76.60818713,2.074927954,0.28,0.56,0.745920746,18
157,92,121,0.425,0.42925,317,320,306,50300,1404,0.43575,304.75,21702,712,0.43075,304,654,0.441,287,513,37.5,33.16239316,68.86227545,1.993957704,0.25,0.66,0.945080092,21
158,100,124,0.417,0.44225,317,320,323,54930,1704,0.44475,316.5,23036,842,0.44925,318.75,634,0.442,318,527,25.66666667,29.17831191,59.44444444,2.253032929,0.3,0.6,0.918367347,18
159,98,92,0.417,0.44175,317,322,315,46024,1554,0.439,313.5,22220,742,0.44525,319.75,704,0.447,310,679,36.85,47.45075319,70.45454545,1.942926533,0.38,0.52,0.668903803,19
160,98,74,0.421,0.426,321,320,309,47599,1309,0.4255,299.75,20255,681,0.43175,301.5,598,0.4235,298,672,53.46666667,38.0952381,88.34355828,2.038439138,0.3,0.89,0.832183908,19
161,94,110,0.421,0.43,317,321,310,45976,1158,0.4285,297.5,22554,760,0.43575,305.5,677,0.428,290,518,38.01666667,22.78835386,47.02702703,4.134078212,0.36,0.53,0.629186603,20
162,85,77,0.421,0.42775,317,321,307,44095,1390,0.428,310.5,20657,646,0.4275,309.5,747,0.4275,310,914,59.43333333,47.9006505,76.43678161,0.976450316,0.24,0.58,0.693023256,20
163,100,45,0.417,0.4435,317,324,314,47085,1358,0.4465,327.75,24788,912,0.44675,322,900,0.4475,335,819,54.33333333,34.48464912,55.02392344,2.00927357,0.3,1.07,0.719457014,20
164,96,15,0.417,0.43375,317,320,310,47438,1729,0.429,305.25,20368,807,0.43575,300.5,662,0.4355,314.5,774,55,29.9522673,70.58823529,2.558139535,0.41,0.84,0.940229885,21
165,100,20,0.417,0.43125,317,320,304,43002,1507,0.4325,307.75,21396,892,0.433,309,700,0.444,327,644,40.16666667,27.68691589,48.82352941,2.915951973,0.42,0.75,0.630071599,20
166,80,14,0.425,0.425,317,319,293,44223,1110,0.42525,294.75,19162,502,0.42625,301,665,0.4255,309.5,1252,53.33333333,33.67816092,61.45251397,1.712707182,0.25,0.65,0.745762712,20
167,90,137,0.425,0.44325,317,322,314,52776,1498,0.4425,298,22698,668,0.4425,314.75,592,0.4515,312.5,504,35.23333333,38.66513234,67.93478261,2.614758861,0.4,0.76,0.733634312,20
168,90,98,0.421,0.43775,317,318,320,50911,1552,0.438,308.75,27264,858,0.4365,316.25,639,0.4385,302,504,35.21666667,34.39093484,55.02645503,2.293064877,0.35,0.62,0.81498829,24
169,88,96,0.421,0.4375,317,321,316,56360,1465,0.43525,309.75,20962,616,0.439,312.75,887,0.4415,309.5,724,41.28333333,29.79683973,57.60869565,2.190580504,0.2,0.71,0.75,18
170,88,96,0.421,0.43275,317,320,319,56328,1500,0.434,310.75,22425,686,0.431,312.5,730,0.4335,321.5,872,41.4,27.40440324,51.61290323,2.159468439,0.27,0.64,0.712264151,18
171,92,73,0.421,0.4265,317,320,311,45300,1816,0.4225,309.75,20384,789,0.426,307.5,754,0.424,314,945,66.16666667,26.60388464,54.11764706,1.471453796,0.35,0.72,0.778823529,19
172,100,113,0.425,0.44275,317,325,313,45976,1265,0.448,313.25,22522,761,0.4425,315.75,525,0.44,316.5,665,38.16666667,40.90909091,71.26436782,1.68444694,0.25,0.75,0.902222222,18
173,101,48,0.421,0.43925,317,321,320,49712,1640,0.4335,318,23695,718,0.4375,307.25,693,0.435,296.5,763,39.36666667,30.01138952,65.14285714,2.479338843,0.23,0.72,0.826879271,18
174,103,74,0.421,0.44675,317,319,315,47969,1742,0.44675,315.5,24354,863,0.44325,316,864,0.4425,312,931,40.66666667,36.53738055,58.24175824,4.021289178,0.33,0.57,0.683257919,20
175,92,12,0.425,0.4455,317,323,323,52984,1824,0.4455,314,24194,910,0.4495,312.5,800,0.4485,302,846,41.65,36.54178674,55.30726257,2.34375,0.36,0.6,0.68220339,20
176,100,47,0.417,0.44275,317,321,322,57936,1944,0.43975,315.75,21991,807,0.441,318.5,744,0.4395,317.5,784,40.16666667,30.07432819,58.42696629,2.535832415,0.28,0.57,0.727477477,20
177,88,59,0.425,0.43025,317,320,305,46265,1580,0.432,306.5,20271,642,0.4315,303.75,821,0.4325,309,1211,58.66666667,32.03214696,50.81967213,2.015411974,0.3,0.6,0.848623853,19
178,104,66,0.417,0.43775,317,323,315,49305,1680,0.4375,322,21895,744,0.43975,311,724,0.434,305,780,42.83333333,37.00234192,59.52380952,1.44092219,0.24,0.9,0.85778781,18
179,102,33,0.421,0.4355,317,319,320,54270,1647,0.43475,317.25,23342,618,0.44215,319.5,676,0.441,332.5,836,53.5,32.25083987,59.21787709,2.111111111,0.26,0.82,0.613839286,17
180,100,23,0.417,0.43075,317,319,313,49512,1646,0.4355,318.25,24354,676,0.431,311.5,861,0.4275,300,1092,45,38.52889667,59.3220339,2.485549133,0.25,0.86,0.661214953,18
181,104,81,0.417,0.44075,317,319,308,49608,1500,0.4315,297.75,19680,712,0.43775,305.25,665,0.4405,295.5,570,29.83333333,35.39358601,65.49707602,2.29226361,0.31,0.66,0.722222222,20
182,103,153,0.417,0.43025,317,321,302,45831,1433,0.4285,299,20818,730,0.42775,304,691,0.428,298,714,42.66666667,36.67439166,70.83333333,2.202380952,0.27,0.65,0.917620137,20
183,98,30,0.421,0.43375,317,319,308,48435,1638,0.43075,304.25,23752,639,0.43225,304.25,672,0.4385,313.5,1113,41,40.13040901,51.14942529,2.173913043,0.39,0.63,0.648275862,21
184,102,16,0.417,0.432,317,323,312,51152,1505,0.43,308,22296,744,0.42775,304,728,0.43,302,518,36.23333333,32.12589074,71.42857143,2.58780037,0.21,0.87,0.816091954,20
185,102,21,0.417,0.44175,327,322,318,51827,1456,0.44,309,25286,861,0.44425,322.25,550,0.447,322.5,486,37.98333333,35.06044905,56.52173913,2.121390689,0.31,0.91,0.764044944,20
186,102,153,0.417,0.4365,317,323,320,52647,1818,0.43225,315,22377,794,0.4375,314.75,768,0.442,319,651,46,29.63604853,58.52272727,2.024539877,0.29,0.73,0.754022989,19
187,102,24,0.417,0.437,317,322,317,48886,1533,0.44,310.75,24688,872,0.44025,315,666,0.45,312.5,479,44.83333333,33.29564726,54.4973545,2.248454188,0.35,0.72,0.95045045,19
188,105,150,0.417,0.44425,317,322,316,50782,1535,0.437,310.75,21091,724,0.44425,318,649,0.4415,323.5,514,31.33333333,42.09039548,71.42857143,1.594802126,0.24,0.84,NULL,20
189,101,32,0.421,0.44225,317,319,304,50911,1323,0.4395,306.25,21525,537,0.441,308.25,690,0.4445,306.5,805,36,19.87435751,39.20454545,2.005730659,0.35,0.68,0.657407407,20
190,102,63,0.417,0.441,317,321,308,50252,1542,0.4405,308.5,23502,796,0.44225,306,623,0.4475,316.5,581,32.83333333,34.93571828,62.23404255,2.370689655,0.36,0.81,0.700460829,21
191,104,17,0.419,0.42725,317,319,307,48757,1387,0.425,315.5,22940,606,0.42875,308.25,656,0.4295,312,640,37.83333333,39.19860627,50.27027027,2.5,0.17,0.82,0.645539906,18
192,105,94,0.421,0.43125,317,320,317,49480,1610,0.4365,309.5,21364,733,0.431,314.5,602,0.437,308,534,31.28333333,42.85714286,60.54054054,2.347161572,0.35,0.67,0.889952153,20
193,102,40,0.421,0.43425,317,323,325,52422,1629,0.43425,309.75,19676,565,0.43325,326,775,0.439,318,784,34.36666667,42.41573034,68.7150838,2.586206897,0.2,0.68,0.678082192,20
194,102,98,0.417,0.42775,317,321,306,45204,1367,0.42875,303.25,19226,653,0.4255,300.5,663,0.427,310,623,37.33333333,29.31844888,59.52380952,1.649746193,0.26,0.68,0.788235294,20
195,100,61,0.421,0.43325,317,322,318,50766,1558,0.431,310,21782,793,0.434,308.25,788,0.4365,302.5,1054,56.33333333,27.7998863,53.63128492,2.575587906,0.21,0.67,0.698823529,19
196,100,111,0.417,0.43575,317,322,311,48596,1500,0.436,301,19130,744,0.43875,299,756,0.442,307.5,1200,46.33333333,41.10465116,59.23913043,1.851851852,0.22,0.6,0.659090909,18
197,102,10,0.421,0.43525,317,320,329,56344,1890,0.43525,324,25479,914,0.43625,327.5,793,0.434,310.5,802,58.66666667,28.61789514,50,3.128621089,0.41,0.81,0.725118483,20
198,96,20,0.421,0.43725,317,319,323,54496,1550,0.4425,320.25,27682,831,0.4395,320.25,789,0.44465,317.5,882,44,30.05714286,52.84090909,3.428571429,0.25,0.66,0.570114943,22
199,100,142,0.421,0.4355,317,323,312,38244,1127,0.43875,317.5,22345,858,0.436,316.5,768,0.438,310,973,51.66666667,29.44162437,54.83870968,1.065989848,0.44,0.55,0.747706422,20
200,100,87,0.421,0.431,317,321,304,46217,1325,0.4315,294,18840,690,0.43075,307.25,780,0.4385,310,1186,49.83333333,33.14285714,61.875,1.483171706,0.35,0.92,0.777777778,19
201,100,44,0.421,0.435,318,321,314,56280,1759,0.434,320,23647,814,0.43575,303.5,705,0.439,324,1348,51.61666667,33.18129989,50.84745763,2.68378063,0.32,0.82,0.623501199,20
202,102,16,0.417,0.44675,317,322,320,51618,1302,0.43925,327.75,21621,602,0.443,313.75,537,0.442,324,476,28.15,47.21906924,58.52272727,1.860202931,0.43,0.78,0.755196305,21
203,95,2,0.417,0.42825,317,323,310,46876,1561,0.425,317.75,22345,798,0.43025,317.75,576,0.43,318.5,766,47.61666667,30.57996485,52.74725275,0.8,0.31,0.6,0.623556582,21
204,98,6,0.421,0.442,317,323,318,50380,1194,0.44325,318.75,23663,709,0.4395,315,705,0.4465,315,1057,57,32.43553009,42.39130435,0.275330396,0.27,0.41,0.769574944,21
205,70,1,0.433,0.43725,317,319,309,47937,1447,0.43825,306.25,26099,950,0.437,309.25,694,0.4345,327,651,54.26666667,32.58362168,44.44444444,2.540937324,0.3,0.7,0.493181818,21
206,104,32,0.415,0.439,317,321,314,51088,1659,0.4365,318.5,23567,793,0.4415,325,800,0.4445,317.5,998,49.61666667,37.74985722,48.38709677,3.07424594,0.3,0.5,0.703539823,21
207,95,42,0.421,0.43925,317,324,314,50557,1794,0.439,311.5,25029,906,0.434,319,821,0.435,311.5,1102,73.33333333,25.17281106,48.31460674,2.708933718,0.31,0.64,0.798657718,21
208,84,35,0.425,0.4255,317,320,305,46924,1407,0.42925,306,21268,663,0.4235,305.75,822,0.427,311.5,906,66.15,26.60388464,47.25274725,2.464985994,0.34,0.63,0.637647059,20
209,100,64,0.417,0.43525,317,423,316,46313,1384,0.4345,322.5,20528,891,0.4345,308.25,704,0.432,315,990,48.66666667,37.06253586,62.85714286,2.301369863,0.24,0.62,0.523041475,18
210,102,27,0.419,0.4335,317,319,317,54372,1686,0.43225,303.5,23164,672,0.43275,324,684,0.4335,310,987,58.16666667,31.875,57.37704918,3.337236534,0.32,0.89,0.823943662,22
211,99,18,0.421,0.44275,317,323,318,60508,1626,0.4395,315.75,23358,693,0.444,317.75,763,0.45,342,914,38.7,35.11576626,53.73134328,3.396809058,0.37,0.73,0.782909931,20
212,100,32,0.421,0.432,317,324,314,49978,1608,0.43375,312,22246,828,0.4365,315.25,1012,0.442,321.5,1015,63.33333333,27.23138147,51.47928994,2.716763006,0.4,0.74,0.661137441,20
213,100,46,0.417,0.43175,317,323,318,45044,1508,0.427,314,20576,719,0.4305,318.75,728,0.428,302.5,970,51.11666667,40.11560694,52.30769231,2.132312739,0.43,0.79,0.68321513,20
214,98,27,0.421,0.433,317,322,311,48837,1656,0.4355,319,21171,761,0.436,316,822,0.4375,317,1208,57,37.06015891,57.78894472,2.638664513,0.3,0.78,0.998842593,22
215,104,79,0.417,0.4355,317,320,310,47165,1540,0.438,314,22634,892,0.4365,309.25,746,0.444,325.5,1250,50.33333333,38.71693866,61.17021277,2.785838654,0.29,0.69,0.840546697,20
216,102,30,0.419,0.452,317,319,326,57630,1617,0.44675,328.25,28293,828,0.448,318.25,782,0.447,1800,931,51.33333333,42.56410256,46.44808743,0.171722954,0.22,0.5,0.737931034,21
217,102,50,0.421,0.44,317,319,344,61303,1864,0.438,314.25,25176,721,0.4445,328,840,0.4335,319,1130,59.83333333,24.66063348,48.63387978,3.723404255,0.24,0.79,0.660592255,20
218,102,64,0.421,0.4445,317,323,321,52952,1516,0.44725,327.75,22666,777,0.4435,316.75,791,0.444,319,994,41.66666667,34.92957746,52.17391304,2.866593164,0.15,0.62,0.745495495,20
219,100,37,0.421,0.4355,317,323,316,48966,1566,0.4305,315,18406,721,0.4325,316.75,754,0.43,313.5,984,61.83333333,27.49262537,54.03726708,2.327005511,0.23,0.65,0.84494382,20
220,105,30,0.417,0.43475,317,324,325,52727,1729,0.43575,323,23744,824,0.4325,311.75,737,0.436,310.5,861,45.01666667,35.68985177,51.12359551,3.18627451,0.27,1.51,0.853080569,20
221,103,47,0.417,0.4295,317,322,312,43548,1402,0.42675,308,19323,707,0.42925,305.75,714,0.436,319,1186,59.33333333,35.71844095,63.06818182,2.19017094,0.31,0.63,0.769784173,20
222,104,16,0.417,0.42875,317,321,301,45349,1577,0.429,307.75,20962,662,0.43425,321,735,0.437,312,896,44.7,34.20899008,33.33333333,2.827466821,0.35,0.78,0.773148148,21
223,104,92,0.421,0.4445,317,319,326,53129,1575,0.45025,324,26010,677,0.44725,324.5,676,0.4425,319,840,34,22.39641657,52.12121212,1.149425287,0.46,0.82,0.657471264,20
224,108,29,0.417,0.43225,317,319,324,54274,1564,0.43375,317.5,21396,628,0.4355,324.5,808,0.4405,328.5,1218,53.33333333,30.00573723,45.40540541,3.294797688,0.37,0.62,0.662068966,20
225,98,43,0.425,0.447,317,322,304,48339,1288,0.4475,312.25,20673,763,0.4465,310,670,0.4545,326,1253,35,34.54947485,54.54545455,1.767955801,0.45,0.88,0.733924612,19
226,104,38,0.417,0.43425,317,324,323,52100,1768,0.42825,307.75,20207,822,0.435,322,1040,0.433,313,1166,66.16666667,38.08724832,55.55555556,2.517162471,0.29,0.85,0.776978417,20
227,103,57,0.417,0.43025,317,321,315,49239,1950,0.4285,315.25,22474,901,0.4295,314.5,779,0.44,323.5,1054,41.55,32.21320973,49.45652174,2.549246813,0.38,0.62,0.694252874,21
228,109,41,0.416,0.438,317,320,306,47438,1530,0.43575,304.25,20440,782,0.44125,309,840,0.4395,307,1326,49.33333333,43.93939394,67.0212766,2.863559798,0.38,0.86,0.868965517,20
229,108,26,0.417,0.43375,317,323,306,48274,1398,0.43,308.25,23084,716,0.434,307.5,628,0.437,309,662,38.11666667,39.39220183,56.98324022,2.920560748,0.27,0.74,0.739030023,21
230,108,39,0.417,0.4445,317,321,320,48660,1608,0.445,321.5,21396,712,0.4425,320.25,668,0.437,317,654,37.45,28.66741321,58.38150289,3.00982801,0.28,0.55,0.862790698,20
231,102,35,0.421,0.433,317,319,320,50750,1587,0.43525,320.5,26573,788,0.43325,313.5,770,0.4365,320,1354,69.83333333,23.31969608,46.11111111,3.442340792,0.32,0.56,0.693548387,20
232,108,31,0.417,0.436,317,322,314,48602,1692,0.43025,310,21622,808,0.43575,311.5,826,0.4385,309,816,33.33333333,44.70655926,57.62711864,3.352601156,0.31,0.67,0.924137931,22
233,108,87,0.417,0.44825,317,323,313,49673,1377,0.44375,320.5,20512,623,0.4495,314.25,821,0.45,310,802,43.1,37.40661686,60.86956522,2.761550717,0.42,0.97,0.943262411,20
234,98,50,0.421,0.4305,317,323,312,46201,1432,0.42875,303.75,19387,618,0.4285,308.25,606,0.433,325.5,1092,52.18333333,23.9906378,40.33149171,2.390670554,0.39,0.86,0.796296296,20
235,106,19,0.417,0.43475,317,319,318,51272,1320,0.43525,307.25,20690,632,0.44275,317.25,723,0.4395,320,906,47.66666667,40.67121729,66.86046512,3.183962264,0.38,0.87,0.692307692,20
236,101,117,0.421,0.438,317,319,318,49110,1526,0.436,311.5,21589,864,0.43875,317.5,878,0.438,311.5,1032,54.16666667,37.03703704,54.65116279,2.790697674,0.36,0.79,0.712643678,19
237,100,50,0.417,0.427,317,319,316,53419,1572,0.42325,307.5,22666,684,0.42525,307,582,0.427,310.5,868,64.78333333,27.84810127,44.91017964,3.273809524,0.4,0.66,0.612903226,19
238,105,56,0.421,0.42125,317,321,305,42439,1312,0.42175,303.5,18326,648,0.41575,291.5,724,0.418,302.5,732,47.83333333,36.20791494,61.45251397,2.837290098,0.31,0.69,0.788732394,18
239,102,47,0.421,0.42575,317,321,310,41732,1506,0.425,305.75,19628,791,0.566333333,409.3333333,716,0.4305,303,850,53.5,40.47619048,62.3655914,2.705882353,0.41,0.66,0.813364055,20
240,102,16,0.417,0.43025,317,323,308,42310,1330,0.42925,315.5,21686,758,0.4285,306.5,800,0.4285,301.5,819,58.83333333,40.0234055,54.18994413,2.900232019,0.39,0.71,0.845454545,20
241,107,71,0.417,0.4495,317,320,318,49384,1692,0.449,327.5,25962,842,0.45075,316.5,761,0.453,326.5,994,48.5,28.7394958,49.7382199,3.174603175,0.4,0.74,0.827956989,20
242,104,40,0.417,0.45525,317,328,324,51875,1813,0.45725,320.5,24177,861,0.46,324,898,0.463,316.5,1088,53.83333333,34.01950163,60.82474227,3.249475891,0.42,0.94,0.633832976,20
243,107,15,0.413,0.43025,317,324,313,46008,1526,0.42275,297.5,20657,775,0.43325,308.75,754,0.4325,307.5,1238,55.2,30.50749712,56.81818182,3.550295858,0.31,0.36,0.874709977,20
244,106,30,0.417,0.44675,317,319,323,55839,1703,0.44325,318.5,23245,674,0.44975,325.75,679,0.4555,331.5,1144,49.33333333,33.60210538,63.07692308,4.371584699,0.38,0.71,0.623287671,22
245,105,92,0.421,0.4365,317,325,317,46097,1522,0.4305,306,20866,905,0.42675,309,752,0.423,304.5,882,47.66666667,33.19977104,47.84946237,2.591283863,0.35,0.74,0.705882353,21
246,80,21,0.433,0.435,317,319,310,46056,1330,0.43225,313.75,22490,672,0.43575,305.5,690,0.44,310,1246,54.66666667,28.26086957,53.55191257,2.688486265,0.25,0.83,0.630841121,19
247,106,52,0.421,0.418,317,320,312,48853,1573,0.4215,303.5,20464,686,0.42,308.5,802,0.427,317,1306,55,30.75571178,54.18994413,3.275862069,0.33,0.61,0.7470726,22
248,108,37,0.409,0.4265745,317,324,316,52342,1736,0.42825,313.5,21059,793,0.4295,322.25,1020,0.428,319,1026,74,30.58280439,59.89010989,3.333333333,0.35,0.74,0.683333333,20
249,106,43,0.413,0.44225,317,322,320,47840,1616,0.4445,309.75,22522,950,0.43925,312.5,774,0.446,319.5,1008,50.16666667,40.75144509,43.24324324,2.923076923,0.46,0.76,0.731707317,20
250,109,70,0.409,0.4345,317,321,306,47760,1498,0.43875,314.5,19451,698,0.434,308.75,735,0.4405,312.5,770,45.83333333,35.18621456,61.05263158,3.191489362,0.23,0.73,0.953917051,18
251,108,51,0.413,0.439,317,322,307,48821,1596,0.435,309.25,19805,763,0.4415,311,718,0.4485,326,606,52.16666667,43.82955174,67.20430108,3.852596315,0.35,0.85,0.941724942,19
252,104,39,0.409,0.4325,317,321,314,43998,1424,0.43325,314.5,18712,782,0.43275,310.25,705,0.441,318,644,58.66666667,42.84064665,68.64864865,2.415966387,0.23,0.73,0.967592593,20
253,100,46,0.425,0.42475,317,321,311,47985,1577,0.419,308.25,18744,738,0.42925,313.75,826,0.4265,301.5,1116,59.66666667,30.7735426,49.72972973,2.824267782,0.39,0.96,0.70521542,19
254,95,15,0.421,0.44675,317,319,309,46088,1176,0.448,302.75,22602,665,0.44675,308.75,648,0.446,299,1127,66.5,32.13483146,54.54545455,2.419808666,0.4,0.9,0.587973274,21
255,103,108,0.425,0.4185,317,320,312,46040,1628,0.4225,309.75,17908,814,0.422,302.25,819,0.42,286.5,1155,61.16666667,33.03834808,50.85714286,2.34939759,0.38,1.01,0.624676242,18
256,106,35,0.413,0.4345,317,320,315,47937,1384,0.43925,306,21992,761,0.437,312.5,847,0.4455,178.5,749,54.16666667,32.94930876,58.01104972,2.958579882,0.46,0.9,0.922897196,18
257,104,45,0.417,0.43675,317,320,310,47503,1400,0.43625,308.25,19644,644,0.43575,310.75,789,0.441,314.5,952,50.08333333,28.30613393,52.68817204,2.888503755,0.38,0.79,0.944567627,19
258,104,16,0.413,0.44525,317,320,314,44995,1502,0.44525,318.25,21460,866,0.44175,315,816,0.4475,320,980,58.16666667,38.18696884,50.50505051,2.717391304,0.42,0.93,0.769230769,20
259,102,39,0.421,0.44175,317,324,310,46410,1484,0.44425,310.75,19194,714,0.4375,317.75,847,0.4405,326,906,37.83333333,33.03964758,56.31578947,2.905982906,0.33,0.8,0.751662971,19
260,106,24,0.417,0.43675,317,319,305,49609,1656,0.43875,314.25,23326,665,0.433,304.25,779,0.4345,302.5,1071,46,27.9478458,52.84090909,3.05997552,0.32,0.79,0.618721461,20
261,104,31,0.419,0.44225,317,325,313,48773,1580,0.594,426.6666667,21948,866,0.4435,313.5,849,0.4405,307.5,889,52.33333333,41.57923799,62.37113402,2.936549554,0.35,0.64,0.730088496,19
262,103,47,0.417,0.43275,317,319,316,48902,1563,0.4265,314.75,22490,873,0.4325,321,868,0.4355,310,1144,57,34.20902342,65,3.406466513,0.26,0.61,0.650574713,20
263,106,37,0.417,0.441,317,322,306,46972,1575,0.4345,305.75,22634,842,0.43625,307,828,0.436,311.5,637,46.83333333,35.31122746,60.97560976,3.105590062,0.34,0.64,0.862302483,20
264,102,37,0.413,0.4245,317,322,307,48419,1514,0.422,297.75,20158,726,0.42725,309.75,875,0.4255,321,1036,54.16666667,33.60137852,55.11363636,2.89017341,0.2,0.75,0.82038835,20
265,106,64,0.417,0.4485,318,324,324,54239,1876,0.4475,322.75,25656,1031,0.4525,328.75,828,0.4575,326.5,1043,65.5,31.82308522,54.27135678,3.157894737,0.2,0.63,0.956018519,20
266,107,29,0.417,0.433,317,324,302,47551,1654,0.43375,302,20158,835,0.42975,295,779,0.4315,308,1239,57,42.25988701,56.31578947,1.685393258,0.21,0.67,0.72985782,19
267,103,90,0.421,0.4435,317,319,308,50187,1414,0.443,312.75,21749,658,0.44375,309.5,728,0.443,305.5,886,59.33333333,29.92081448,21.10552764,3.067484663,0.31,0.63,0.609865471,20
268,100,42,0.421,0.4585,317,320,312,47069,1404,0.456,309.5,21043,747,0.4555,304.25,698,0.457,307.5,984,31,39.06926407,67.77777778,3.409090909,0.32,0.78,0.986754967,21
269,108,32,0.419,0.454,317,319,306,48387,1410,0.45075,319.25,27062,859,0.4495,314.25,681,0.4575,1774,1400,34.66666667,33.98656215,51.35135135,3.431101273,0.35,0.66,0.611353712,20
270,102,27,0.417,0.437,317,320,310,50300,1687,0.43575,317,24852,1040,0.4325,315.75,798,0.43,304.5,819,62.16666667,29.42857143,40.11299435,2.98136646,0.31,0.75,0.748267898,20
271,108,40,0.413,0.428,317,323,302,49271,1293,0.42475,304.5,21412,784,0.42425,301.75,686,0.436,312,910,52.18333333,33.80447585,49.06832298,2.841918295,0.36,0.65,0.758949881,20
272,109,23,0.413,0.43125,317,322,316,48242,1479,0.432075,306.5,22522,704,0.43525,318.75,760,0.434,315.5,794,57.03333333,34.0546697,55.97826087,2.603613177,0.28,0.63,0.723809524,20
273,109,79,0.413,0.45,317,321,327,56248,1549,0.446,326,25480,774,0.441,319,863,0.4395,309,1004,48.68333333,31.90770962,62.42774566,2.923331495,0.24,0.69,0.749425287,20
274,104,92,0.417,0.4395,317,317,315,47607,1496,0.436,301.5,23792,660,0.444,317.25,814,0.4445,312,1060,58.16666667,24.06892718,49.45054945,2.023608769,0.38,0.76,0.670533643,20
275,104,111,0.421,0.42475,3.7,321,316,46088,1586,0.42325,295,19049,868,0.42375,305.75,672,0.428,310,760,63,33.55184744,50,2.869518138,0.23,0.88,0.545673077,19
276,103,26,0.417,0.452,317,319,316,48907,1578,0.4455,313.75,23004,726,0.45125,326,866,0.451,310.5,931,61.5,38.35242771,60.33519553,3.152173913,0.31,0.88,0.61790393,20
277,105,136,0.417,0.4343335,317,319,316,50702,1488,0.431,313.5,23470,752,0.4385,327,840,0.441,303,861,65.83333333,26.22196665,45.76271186,2.824858757,0.18,0.67,0.662870159,20
278,104,30,0.417,0.4485,317,324,309,50091,1536,0.4495,321.5,24531,929,0.44825,317.25,943,0.4555,310,752,62.66666667,27.42474916,56.21621622,3.136629452,0.46,0.74,0.958997722,20
279,106,128,0.413,0.42725,317,324,308,45831,1631,0.429,309.75,20271,763,0.42875,301,912,0.4275,310,819,56.16666667,31.84421535,57.37704918,2.521008403,0.34,0.74,0.858513189,20
280,102,96,0.417,0.432,317,321,309,52744,1592,0.4335,309.75,20158,612,0.43825,304.25,724,0.445,319.5,1127,51.55,31.10465116,50.57471264,3.419811321,0.37,0.66,0.871853547,20
281,102,149,0.413,0.43775,317,321,310,48821,1640,0.43875,309,21396,803,0.43675,312,684,0.4405,304,990,50.26666667,38.50354997,54.78723404,3.517877739,0.32,0.94,0.995305164,23
282,104,60,0.413,0.44075,317,320,310,49882,1712,0.4375,302.5,22650,861,0.44375,316.5,840,0.4505,311,956,69.83333333,25.04145937,53.67231638,2.824858757,0.34,0.73,0.744186047,20
283,103,20,0.417,0.43025,317,324,316,52302,1549,0.43075,319.25,22795,802,0.4315,309.5,732,0.436,304,1652,69.11666667,33.48623853,57.22222222,3.058280439,0.61,0.59,0.836065574,23
284,108,103,0.417,0.44,317,320,306,43975,1435,0.43625,310.75,20754,668,0.4395,306.75,814,0.443,314,1354,54.98333333,33.29519451,50.86705202,2.728285078,0.41,0.98,0.81264637,20
285,105,23,0.413,0.432,317,319,304,46394,1774,0.43025,306.75,21155,882,0.4295,298.5,817,0.4295,311.5,959,62.83333333,30.4246655,55.23255814,3.548574753,0.3,0.93,0.744186047,20
286,108,125,0.413,0.43925,317,319,304,46635,1120,0.43975,308,21766,817,0.44125,303.75,598,0.437,304,1088,59.66666667,31.99320498,53.47593583,2.75175644,0.25,0.71,0.670588235,20
287,107,35,0.417,0.43825,317,319,300,51790,1528,0.4315,305.25,25801,1004,0.43525,306.25,866,0.437,305.5,978,66.16666667,28.30080367,45.05494505,3.866128102,0.24,0.76,0.581589958,20
288,106,110,0.417,0.41525,317,319,295,54994,1815,0.4165,303.5,20753,751,0.41825,305,751,0.422,311.5,1082,70,25.33883324,46.59090909,3.244837758,0.32,0.67,0.717761557,19
289,105,100,0.421,0.42275,317,322,302,47567,1617,0.42375,311.25,20882,940,0.42375,299,719,0.419,286,812,59.5,28.04129794,50.84745763,2.978723404,0.31,0.79,0.70990566,20
290,90,133,0.421,0.4425,317,319,318,52132,1694,0.4475,302.5,24274,756,0.445,316.75,1020,0.443,306.5,724,64.5,31.76996092,42.47311828,2.547065338,0.3,0.57,0.74049217,20
291,105,21,0.415,0.425,317,321,308,50959,1832,0.42425,306.25,24081,1186,0.42075,300.5,973,0.426,306,938,72.5,28.74423963,48.91304348,3.093922652,0.29,0.61,0.822323462,22
292,98,72,0.417,0.43125,317,322,313,49078,1768,0.4335,312.25,25302,1055,0.43575,309.5,845,0.445,322,1082,71.5,27.73841962,55.67567568,3.989361702,0.4,0.61,0.623093682,20
293,101,28,0.421,0.439,317,319,312,45092,1498,0.439,314.75,20528,686,0.43875,309,635,0.437,305.5,808,54.5,35.06721216,63.27683616,1.776504298,0.18,0.46,0.768888889,22
294,102,17,0.421,0.4435,317,323,313,52551,1687,0.4435,305.75,20464,772,0.4425,314,721,0.4495,308.5,802,61.71666667,28.5304248,56.41025641,2.997601918,0.28,0.78,0.903153153,23
295,108,71,0.413,0.4475,317,323,306,49239,1564,0.4475,304,19676,721,0.451,306,768,0.4545,313,1088,58.16666667,37.49309774,65.0273224,2.18579235,0.34,0.73,0.662921348,18
296,101,28,0.417,0.436,317,320,318,53836,1785,0.43525,318.5,23679,775,0.43225,313.25,796,0.4355,322,1208,57.31666667,26.86397268,47.72727273,3.394255875,0.26,0.68,0.832167832,18
297,107,45,0.417,0.4325,317,323,312,45478,1502,0.44075,318.25,23920,950,0.43675,303.25,718,0.4375,307.5,1197,59.66666667,26.98504028,50.56179775,2.7479092,0.3,0.74,0.827586207,20
298,104,113,0.417,0.44925,317,327,313,45895,1654,0.44325,315.5,25415,935,0.4555,315,709,0.456,329,1340,58.16666667,35.20494104,63.97849462,2.699530516,0.3,0.6,0.796338673,25
299,105,38,0.421,0.42725,318,325,301,48066,1696,0.42475,304.75,20422,763,0.4235,302,756,0.432,307,1281,60.33333333,33.29473075,51.95530726,3.282399547,0.22,0.55,0.915331808,20
300,105,130,0.417,0.45175,317,318,318,51859,1638,0.4455,311.5,23936,709,0.4495,322.75,766,0.453,312.5,1264,56,33.22072072,60.79545455,2.795208214,0.22,0.75,0.629711752,22
301,90,104,0.417,0.4295,317,317,322,52406,1549,0.4285,319.75,22104,722,0.4375,339.5,718,0.42,333,1372,48.33333333,20.58993638,40.55555556,2.728285078,0.38,0.94,0.655502392,22
302,96,17,0.417,0.43475,317,317,326,51522,1547,0.429,317.5,22988,678,0.4355,320.75,817,0.451,337.5,1141,75.66666667,26.18368511,47.72727273,2.66591038,0.24,0.74,0.675862069,20
303,104,73,0.417,0.4445,317,320,317,47808,1552,0.44575,324.25,29225,962,0.446,318.25,700,0.454,316.5,1400,75,34.83941208,52.87958115,3.664921466,0.31,0.81,0.607843137,20
304,95,64,0.421,0.44075,317,325,311,52468,1626,0.438,312.5,19950,637,0.44375,315.25,784,0.446,317.5,1106,57.16666667,32.43395166,45.94594595,3.395784543,0.4,0.9,0.641891892,20
305,106,125,0.421,0.43225,317,321,299,48692,1519,0.4335,299.25,19756,642,0.42925,295.75,726,0.43,298.5,718,55.28333333,37.621498,53.33333333,3.142536476,0.34,0.85,0.829383886,21
306,98,115,0.421,0.442,317,322,322,52518,1727,0.44525,321,23647,976,0.444,314,976,0.4445,320.5,1092,66.83333333,28.35400225,51.1627907,2.469135802,0.2,0.46,0.67816092,22
307,95,43,0.417,0.4375,317,322,312,53499,1519,0.435,305,21010,768,0.43675,309.5,754,0.445,315.5,756,65.38333333,32.58426966,48.40425532,2.249598286,0.3,0.57,0.762352941,20
308,88,103,0.429,0.445,317,320,312,54512,1913,0.43725,313,21380,696,0.4425,311.75,877,0.4505,326,1197,68.25,25.97844583,48.82352941,2.305159166,0.27,0.55,0.694382022,20
309,104,36,0.417,0.437,317,323,309,44529,1426,0.44075,311.75,21775,884,0.4375,303.5,780,0.4475,315.5,760,70,35.54046406,63.44086022,3.064066852,0.22,0.51,0.807962529,22
310,100,96,0.417,0.43675,317,322,320,53852,1976,0.44,318.5,26605,1122,0.438,304.25,877,0.4405,313,864,68.5,25.27901786,38.79781421,4.340175953,0.24,0.68,0.680434783,25
311,102,40,0.417,0.44,317,319,311,52438,1648,0.43875,312.75,24161,774,0.44,306.25,766,0.438,307.5,1116,61,32.92682927,50,4.284037559,0.38,0.99,0.704651163,20
312,108,24,0.417,0.42825,317,321,308,43902,1477,0.426,305,20432,761,0.4315,311,732,0.4275,312.5,746,38.5,37.66233766,58.88888889,3.546099291,0.36,0.86,0.790754258,20
313,106,118,0.417,0.44025,317,323,310,50509,1746,0.44175,308.25,23502,886,0.438,314.75,751,0.445,309.5,878,41.66666667,38.69148336,56.08465608,2.991944764,0.41,0.57,0.737668161,21
314,100,54,0.417,0.4305,317,324,314,47937,1556,0.43,308.25,19403,882,0.43125,312.75,796,0.4285,303,1320,57,38.08695652,61.4973262,2.857142857,0.25,0.5,0.877880184,20
315,102,122,0.417,0.43475,317,323,314,48708,1703,0.43725,309.5,22490,910,0.4385,309,758,0.4455,312,704,60.83333333,31.38357705,56.38297872,2.777777778,0.31,0.61,0.76056338,20
316,98,26,0.417,0.43675,317,321,315,49834,1521,0.43075,313,22200,735,0.4375,310.75,688,0.441,311.5,1078,51.35,30.01132503,45.55555556,2.98102981,0.4,0.58,0.708333333,19
317,106,97,0.417,0.441,317,324,324,55251,2039,0.4395,324.25,23015,980,0.449,320.25,987,0.4545,309,1018,60.83333333,28.11135371,56.32183908,3.770197487,0.11,0.53,0.776315789,20
318,87,55,0.421,0.4085,317,321,312,46740,1648,0.40775,311.75,17683,802,0.41075,311,835,0.4115,300.5,844,54.5,23.70458606,41.30434783,2.218524681,0.15,0.41,0.680387409,19
319,88,152,0.423,0.4345,317,322,320,50654,1508,0.42875,315.75,17812,744,0.43,307.5,732,0.4305,321,847,60.83333333,26.27070246,46.44808743,1.912568306,0.025,0.57,0.756818182,19
320,103,25,0.421,0.4265,317,319,294,46780,1507,0.424625,305.25,22136,779,0.42425,306.75,765,0.428,311.5,1295,58.5,24.52830189,48.35164835,3.436018957,0.29,0.59,0.699769053,20
321,83,103,0.429,0.44075,317,319,314,48926,1701,0.44425,317.75,25762,660,0.44375,311.5,714,0.453,326.5,1057,57.16666667,24.5883021,36.55913978,3.470588235,0.36,0.65,0.730088496,20
322,90,26,0.437,0.578333333,317,318,411,57936,1932,0.4335,313.75,22843,940,0.43025,299,863,0.433,316,1228,69.33333333,24.61273666,49.04458599,2.746893394,0.31,0.58,0.740909091,19
323,99,22,0.421,0.44525,317,319,321,47969,1500,0.454,316.75,23920,738,0.4525,310.75,716,0.437,316.5,1400,52.33333333,33.0255296,55.37634409,3.327877796,0.3,0.8,0.839622642,20
324,106,77,0.421,0.445,317,317,314,49271,1656,0.43925,304.5,23197,733,0.44625,309.25,859,0.453,311.5,1330,48.16666667,37.62827822,76.78571429,3.052064632,0.23,0.72,0.941309255,20
325,100,35,0.423,0.4385,317,320,306,51297,1587,0.44275,301,23197,807,0.445,315.5,887,0.446,317.5,1166,54.83333333,30.98987627,58.42696629,3.65630713,0.49,0.75,0.716553288,19
326,108,77,0.429,0.432275,317,319,305,47390,1508,0.42875,426.25,20087,716,0.42725,300.5,749,0.4285,306.5,938,40.66666667,44.77521264,66.25,2.727272727,0.15,0.94,0.633333333,20
327,108,19,0.421,0.4355,317,319,305,49516,1475,0.42925,309.5,22908,730,0.42925,303.5,688,0.4335,294.5,1064,61,39.68521641,55.97826087,2.544378698,0.25,0.89,0.674584323,20
328,98,129,0.421,0.4355,315,320,320,50606,1750,0.439,313,23518,821,0.43675,315,882,0.437,305.5,917,52.83333333,35.2072686,63.27683616,3.057757644,0.41,0.77,0.977011494,20
329,88,28,0.421,0.43225,315,320,309,51988,1764,0.4295,304.25,21750,863,0.434,307.75,723,0.4365,312.5,812,51.95,26.81924883,42.69662921,2.169869808,0.35,0.65,0.687782805,19
330,107,104,0.417,0.427,315,320,300,47197,1600,0.42625,298.75,22200,840,0.42575,295.5,688,0.4295,300,1074,47.81666667,36.63024727,55.0802139,2.750275028,0.29,0.7,0.712962963,21
331,90,25,0.421,0.4315,315,320,310,51972,1566,0.4325,318.75,22215,822,0.43475,320,950,0.4385,322.5,987,68,25.84841629,50.26455026,3.246376812,0.3,0.79,0.954022989,18
332,104,109,0.421,0.4575,315,322,325,58000,1773,0.45475,343.25,30238,1060,0.4535,328.25,880,0.4665,334,1096,52.76666667,31.97316937,55.78947368,3.395585739,0.24,0.68,0.88172043,20
333,109,44,0.417,0.41725,315,318,306,42150,1524,0.42075,302.25,20930,775,0.4175,303,541,0.417,316,668,42.16666667,44.24242424,55.74712644,2.631578947,0.33,0.7,0.825775656,19
334,108,112,0.417,0.445,315,319,322,60476,1748,0.442,317.5,25263,795,0.44575,314.5,635,0.458,311,679,35.9,29.59912136,51.61290323,4.154809334,0.36,0.78,0.895591647,19
335,67,44,0.441,0.453,315,320,317,60202,1953,0.44975,306.25,25190,943,0.45125,310.25,961,0.4565,327.5,1312,49.83333333,22.49718785,44.31818182,2.490096208,0.24,0.71,0.582417582,20
336,102,11,0.419,0.429,315,317,308,48982,1598,0.422,310.5,27457,840,0.43025,308.75,761,0.4445,310.5,1064,66.83333333,30.65268065,54.80225989,3.701492537,0.32,0.7,0.634482759,22
337,99,103,0.421,0.43825,315,319,310,49962,1535,0.438,309,25238,852,0.4435,317.25,664,0.4415,328.5,1544,69.5,37.78647289,57.80346821,3.795284646,0.29,0.7,0.667447307,22
338,95,26,0.425,0.44725,315,319,324,57052,2044,0.444875,325.75,24708,1017,0.44775,324,990,0.4475,327.5,1270,64.33333333,33.29652126,54.89130435,3.218645949,0.44,0.83,0.80778032,20
339,104,38,0.417,0.4385,315,321,319,50975,1631,0.43825,320.5,22104,833,0.43775,315,824,0.441,302,1306,58.21666667,33.5864486,55.81395349,2.97691373,0.2,0.61,0.706546275,20
340,108,105,0.417,0.45175,315,319,322,56537,1774,0.45325,318.5,26187,793,0.454,327.25,859,0.4615,312.5,844,36.45,38.58607663,53.36787565,3.303471445,0.35,0.71,0.848214286,22
341,104,54,0.421,0.43825,315,320,312,50139,1788,0.436,319.75,22457,887,0.437,316.5,908,0.4335,318.5,1036,53.83333333,34.49419569,57.07070707,2.985074627,0.44,0.73,0.860986547,20
342,90,50,0.425,0.43175,315,321,312,49898,1605,0.43,306,22474,872,0.4355,310,738,0.4255,299.5,1309,53.9,29.87238979,44,2.505827506,0.05,0.28,0.589201878,20
343,108,96,0.417,0.4445,315,323,322,49207,1356,0.443,316.75,21284,793,0.44425,317.75,749,0.4405,318,875,51.78333333,46.36015326,55.02645503,2.49031544,0.332,0.78,0.779775281,20
344,100,15,0.421,0.43975,315,321,319,53547,1804,0.4405,317,21943,826,0.4385,312.5,863,0.4415,307,1285,62.33333333,28.39931153,59.25925926,2.367242482,0.3,0.7,0.857471264,20
345,104,17,0.417,0.4385,315,321,313,47101,1503,0.4385,312,19498,707,0.43925,313,833,0.4355,309.5,1170,52.7,28.92423366,46.85714286,2.8713418,0.26,0.7,0.776523702,20
346,109,88,0.413,0.42,315,320,312,45027,1636,0.41625,313,18776,735,0.41725,310.5,872,0.4255,322.5,1774,63.78333333,31.37026239,58.52272727,2.764423077,0.23,0.69,0.694581281,20
347,106,27,0.417,0.436,317,NULL,312,53579,1771,0.4335,309.5,20448,670,0.431,305.25,877,0.4365,310,1421,54.5,33.06497987,49.41176471,3.416149068,0.4,0.72,0.670644391,20
348,108,141,0.417,0.443,315,319,320,53692,1762,0.44175,309.5,24451,740,0.44175,308.75,768,0.445,307.5,1502,54.5,27.08449916,56.4516129,3.341013825,0.39,0.61,0.6,21
349,88,21,0.423,0.43075,317,322,312,55332,1843,0.4305,317.25,22779,1034,0.4275,312.75,800,0.4455,315.5,1106,74,32.04407208,50,3.185035389,0.32,0.64,0.689252336,20
350,96,98,0.421,0.43875,315,321,319,54672,1769,0.44,305.25,22264,990,0.442,324.75,1040,0.4475,304,1106,61.83333333,26.53867871,57.89473684,3.426791277,0.43,0.65,0.70521542,20
351,98,22,0.421,0.431,315,321,314,48564,1690,0.4385,308.5,25268,943,0.437,318.75,898,0.447,321.5,1334,57,36.35860542,61.2745098,3.270564916,0.36,0.69,0.774580336,21
352,108,50,0.419,0.445,315,321,322,55412,1846,0.4445,328.25,25705,1046,0.44625,325.5,901,0.443,315,1057,64.83333333,27.01181767,47.87878788,3.520691785,0.35,0.54,0.557017544,23
353,104,21,0.419,0.4485,315,318,298,48998,1522,0.4535,313.25,28373,959,0.4485,306.5,808,0.458,315.5,844,46.66666667,23.87562465,51.74418605,3.703703704,0.36,0.64,0.785714286,20
354,109,126,0.417,0.441,315,320,308,45558,1339,0.43825,314,19692,644,0.4425,305.75,780,0.445,309.5,1302,47.33333333,35.23700742,50.9202454,2.907328892,0.32,0.84,0.751677852,19
355,85,13,0.425,0.439,315,318,318,52454,1703,0.43775,307.5,20464,744,0.4435,324.25,774,0.441,311.5,1302,56.65,23.81747357,43.02325581,3.59212051,0.36,0.68,0.820930233,18
356,109,42,0.417,0.429,315,320,314,53901,1656,0.43025,315.25,21862,733,0.432,318.25,830,0.4375,314,1194,60.65,21.84971098,48.73417722,2.962962963,0.29,0.82,0.823113208,20
357,109,95,0.417,0.4345,315,319,314,49737,1412,0.4355,316.25,21830,742,0.43975,323.5,922,0.437,316,1242,58.86666667,32.4141812,56.83060109,3.185437998,0.29,0.76,0.804651163,20
358,109,17,0.417,0.44275,315,318,312,52824,1653,0.445,317.25,22506,684,0.44275,306.75,645,0.4475,320,1158,56.33333333,26.06741573,42.42424242,2.781136638,0.35,0.69,0.617777778,20
359,105,59,0.419,0.43525,315,320,310,50268,1656,0.43275,313.25,27424,1139,0.43025,310.25,791,0.446,314,1326,59,26.17255356,49.45652174,3.002309469,0.39,0.67,0.639908257,22
360,109,28,0.417,0.436,315,317,315,52302,1682,0.44275,309.75,25576,746,0.4455,307.5,805,0.443,294.5,651,55.66666667,26.54320988,44.76744186,3.064066852,0.44,0.81,0.623831776,20
361,105,81,0.419,0.43475,315,321,320,51522,1852,0.437,312.75,28196,957,0.43425,302.75,716,0.437,316.5,948,49.66666667,28.25191289,51.1627907,3.353293413,0.28,0.95,0.70917226,25
362,103,30,0.417,0.44425,315,321,315,55312,1643,0.44825,321.25,26846,934,0.45175,315.75,906,0.4595,327.5,896,47.06666667,28.04597701,54.74860335,2.964959569,0.3,0.96,0.741935484,24
363,98,126,0.417,0.425,315,320,302,47326,1684,0.42275,306,18503,681,0.424,310.25,822,0.4225,299.5,826,56.26666667,34.06976744,53.71428571,2.55648038,0.29,0.93,0.565320665,21
364,104,48,0.417,0.446,315,319,319,48403,1787,0.448,311.75,21573,875,0.44525,318,849,0.4505,317.5,1572,53.5,30.31973539,58.79120879,3.03030303,0.47,0.94,0.709006928,25
365,109,112,0.417,0.441,315,321,302,48274,1731,0.43975,302,21525,833,0.44225,308,830,0.446,308.5,1288,38.66666667,31.49915778,65.14285714,2.808988764,0.38,0.7,0.939252336,25
366,98,29,0.421,0.44125,315,318,297,48290,1516,0.4405,315,20691,732,0.44675,310.75,800,0.4555,316.5,1278,47.51666667,26.41615255,55.43478261,2.915291529,0.45,0.96,0.663615561,22
367,90,98,0.421,0.43925,315,321,310,52357,1687,0.43625,314,22956,730,0.437,311.75,906,0.449,306.5,976,62.8,20.99603848,46.02272727,2.845982143,0.3,1.08,0.570071259,21
368,104,17,0.421,0.43525,315,321,311,52031,1659,0.43325,305.75,25882,938,0.441,311.75,819,0.4415,312.5,1547,51.33333333,25.85915493,50.56179775,2.848101266,0.31,0.64,0.653206651,25
369,100,109,0.421,0.4375,315,319,320,53290,1703,0.445,311.75,23904,952,0.44,312.5,901,0.4485,314,1428,61.83333333,21.82539683,61.25,2.923976608,0.3,0.92,0.674364896,20
370,92,44,0.425,0.44075,315,320,314,58000,2014,0.44825,308,24660,980,0.445,312.75,914,0.447,318.5,1687,63,17.4904943,37.05583756,3.404924044,0.22,0.98,0.570093458,21
371,108,116,0.417,0.439,315,320,320,55653,1824,0.44425,320,22522,878,0.4415,317,826,0.447,314.5,1274,54.66666667,27.78088317,56.91489362,2.988378528,0.28,0.73,0.729119639,21
372,104,34,0.417,0.4235,315,318,298,44690,1524,0.42425,298.25,21879,957,0.4225,296.75,982,0.4285,300.5,1309,47.5,26.36729994,50.85714286,3.130434783,0.33,0.83,0.622171946,23
373,102,114,0.417,0.43775,315,322,308,49223,1701,0.43675,305,25553,905,0.44,310.5,796,0.447,307,1204,45.33333333,26.88290269,57.06521739,3.494467094,0.33,0.81,0.75877193,25
374,88,59,0.423,0.434,315,318,303,49078,1638,0.445,312.25,23422,889,0.445,313.75,1026,0.4495,309.5,1526,54,32.56616801,47.97687861,2.719033233,0.34,0.67,0.762124711,20
375,102,26,0.419,0.429,315,316,302,49094,1750,0.43425,312.25,21910,914,0.43425,310.5,903,0.4375,293.5,760,49,42.86542923,71.0982659,2.863961814,0.39,0.58,0.495348837,21
376,105,75,0.419,0.42675,315,319,306,47165,1680,0.4255,303.25,21380,870,0.42875,304.5,742,0.443,302.5,872,46.83333333,34.31372549,60.11235955,3.592814371,0.37,0.68,0.665178571,21
377,104,21,0.417,0.4325,315,323,318,49850,1530,0.42925,307.75,21461,734,0.4335,311,854,0.4475,316,868,43.61666667,34.99152063,50.81081081,3.050847458,0.38,0.66,0.610849057,19
378,108,122,0.413,0.43875,315,321,309,53338,1843,0.43775,311,21911,782,0.43425,305,712,0.4395,308,1071,44.31666667,41.41531323,64.04494382,2.444570779,0.3,0.63,0.774336283,22
379,106,69,0.417,0.4325,315,322,316,53322,1843,0.4375,317,21911,908,0.4365,315.75,962,0.4365,311,1386,48.16666667,37.44292237,64,2.162162162,0.37,0.71,0.726190476,22
380,95,130,0.417,0.429,315,322,312,46956,1594,0.431,297,22458,940,0.4335,308.25,878,0.4325,314,1407,53.66666667,30.65735893,57.22222222,2.352941176,0.38,0.69,0.607981221,20
381,94,17,0.421,0.439,315,320,318,56232,2007,0.4425,315,28630,1048,0.445,315.25,978,0.4455,314,1228,54,23.20601852,49.09090909,4.242424242,0.44,0.67,0.587006961,23
382,104,126,0.421,0.44975,315,321,314,49448,2030,0.449,313,24467,1090,0.44825,317,1020,0.454,316.5,1228,45.73333333,32.57661748,49.16201117,3.183962264,0.4,0.62,0.735099338,20
383,108,28,0.417,0.448,315,321,315,43709,1596,0.449,317.5,24499,985,0.4465,315.25,1069,0.4515,314,1382,55.5,32.25985564,59.45945946,3.081232493,0.37,0.57,0.730337079,20
384,109,56,0.417,0.4525,315,320,315,54528,1685,0.45075,312.75,24531,970,0.44975,317.25,970,0.4555,317.5,1712,49.66666667,32.4668435,59.68586387,2.798708288,0.4,0.58,0.870748299,23
385,106,42,0.419,0.426,315,318,299,45863,1704,0.42225,300.5,20770,920,0.4235,306.5,875,0.424,293.5,1148,37.16666667,25.56390977,52.60115607,2.643948296,0.34,0.69,0.722477064,21
386,107,74,0.419,0.424,315,318,304,46458,1577,0.424,315.25,20770,920,0.42425,302.75,898,0.4195,295.5,1186,54,31.49107657,55.24861878,2.766333137,0.25,0.46,0.752808989,22
387,104,30,0.417,0.432,315,319,307,46876,1267,0.42975,313.5,22778,707,0.43325,314,749,0.4385,319,1292,51.16666667,38.32650673,80,2.944640754,0.41,0.67,0.639344262,21
388,106,84,0.417,0.439,315,319,310,50589,1379,0.439,318.5,24097,777,0.44325,312.5,751,0.44,304,1281,47.16666667,40.63384267,70.65217391,3.114186851,0.33,0.74,0.619489559,22
389,106,26,0.419,0.4175,315,316,296,44610,1368,0.41775,294.75,19789,658,0.4155,297.25,768,0.4185,303.5,987,38.66666667,38.6869871,59.53757225,2.386634845,0.27,0.58,0.714285714,23
390,108,120,0.419,0.44675,315,317,300,45751,1440,0.44775,313.5,23342,817,0.44525,314.25,726,0.4495,302.5,864,34.66666667,29.50437318,52.87356322,2.55648038,0.41,0.61,0.693181818,21
391,82,25,0.425,0.441,315,317,312,53531,1522,0.439,308.5,29402,980,0.439,312.25,788,0.441,285.5,1309,52,15.17010597,40.76086957,2.696629213,0.32,0.9,0.648401826,22
392,82,75,0.425,0.4425,315,319,302,55669,1804,0.44075,304.5,25030,732,0.443,307,807,0.4505,311.5,1054,53.66666667,23.02962549,49.19786096,3.163841808,0.36,0.61,0.58276644,23
393,104,23,0.417,0.433,315,321,305,48307,1503,0.43275,310,20271,702,0.43275,311.25,856,0.434,298.5,994,36.15,41.14942529,69.94219653,2.997737557,0.41,0.83,0.826388889,25
394,105,26,0.417,0.4455,315,321,320,54785,1992,0.447,328.75,25576,1022,0.4505,323,915,0.4565,314,987,40,25.56723852,58.60215054,2.857142857,0.27,0.58,0.890868597,23
395,110,68,0.413,0.433,315,321,304,46634,1549,0.43725,309.25,21412,793,0.43575,310.75,849,0.444,310,1337,43,30.67520373,58.68263473,3.048780488,0.28,0.82,0.896162528,23
396,96,77,0.421,0.436,315,320,311,52534,1895,0.43325,310.5,25592,1068,0.437,310,952,0.4295,297.5,1148,55.83333333,24.78729438,54.44444444,2.732240437,0.27,0.831,0.733021077,20
397,98,27,0.425,0.44225,315,321,309,54464,1852,0.44375,304.75,24113,964,0.442,308.75,810,0.443,300.5,910,41.5,29.23752057,53.19148936,2.694786175,0.31,0.78,0.781659389,21
398,102,84,0.425,0.41925,315,317,298,45670,1568,0.42375,298,19307,794,0.42175,301.25,856,0.428,303,1152,43.83333333,23.28847279,54.54545455,2.756141402,0.27,0.66,0.730593607,19
399,108,10,0.417,0.4495,315,317,321,57743,1652,0.45175,322.5,25946,905,0.45025,325.75,746,0.461,321,952,37.33333333,32.62527233,69.83240223,3.510696654,0.18,0.72,0.534934498,20
400,106,41,0.419,0.443,315,318,305,52390,1748,0.441,307.75,26106,934,0.43475,302,805,0.4365,307.5,1278,42.83333333,26.21195039,44.57142857,3.773584906,0.33,0.54,0.575555556,22
401,108,80,0.417,0.4255,315,319,309,48146,1516,0.42525,303.25,23254,786,0.4245,305.25,768,0.428,320.5,1477,46.83333333,29.67853042,69.23076923,2.670623145,0.15,0.68,0.639269406,20
402,107,45,0.417,0.439,315,321,317,53113,1512,0.44175,319.75,26637,922,0.4395,316.75,938,0.4385,310,1110,48.33333333,30.40540541,52.84090909,3.692674211,0.29,0.56,0.717647059,22
403,108,82,0.417,0.44825,315,319,310,55653,1561,0.448,310.25,26348,780,0.44925,315.75,870,0.4545,313.5,679,36.83333333,30.22346369,52.17391304,2.558139535,0.22,0.66,0.612200436,22
404,92,7,0.421,0.452,315,321,322,51762,1805,0.4455,311.25,26926,987,0.45275,328,1015,0.4565,315,984,43.78333333,27.03723691,47.2826087,3.517877739,0.23,0.52,0.70754717,24
405,105,128,0.421,0.43225,315,320,319,57020,1841,0.427,303,23952,810,0.435,311.25,1020,0.435,310,662,49.81666667,35.85014409,48.40425532,2.707692308,0.23,0.74,0.781818182,21
406,105,121,0.417,0.4415,315,318,310,45124,1564,0.44425,307.5,23245,875,0.44375,310,723,0.444,302,1172,38.16666667,33.07943417,59.375,3.372093023,0.28,0.67,0.793023256,23
407,108,22,0.417,0.44275,315,320,317,52020,1662,0.4425,323.25,23149,746,0.44825,324.75,896,0.4545,317,1134,40.51666667,27.82415136,53.15789474,3.167185877,0.27,0.77,0.856179775,24
408,100,97,0.421,0.44725,315,321,311,44786,1253,0.4485,313.25,24177,733,0.4475,319.75,836,0.4505,330,1340,49.43333333,41.15720524,74,2.671755725,0.35,0.55,0.707762557,23
409,102,20,0.417,0.4215,315,315,300,45928,1592,0.421,297.25,21702,772,0.41825,290.25,738,0.426,294,1046,39.5,33.7334934,67.87878788,3.023516237,0.39,0.6,0.788235294,23
410,101,36,0.417,0.444,315,315,327,65346,1866,0.4415,321.75,29273,875,0.43925,323.25,738,0.4445,336,1477,33.33333333,24.87016734,65.6626506,3.513996426,0.21,0.78,0.47716895,22
411,98,52,0.417,0.45075,315,320,325,54608,1720,0.45125,324.5,24788,808,0.4505,322,898,0.4575,333.5,1505,42.16666667,44.58705357,59.01639344,3.193960511,0.17,0.48,0.545454545,20
412,75,75,0.417,0.44425,315,317,320,65266,1801,0.447,317.25,23744,704,0.44475,326.25,931,0.4505,331.5,1712,57.5,24.09972299,39.3258427,2.941176471,0.35,1.03,0.554524362,21
413,98,15,0.417,0.423,315,318,302,42326,1208,0.42325,301.5,21196,707,0.42475,309.25,914,0.4325,311,1099,59.3,28.24925816,42.94478528,2.766798419,0.38,0.97,0.746445498,23
414,108,102,0.417,0.44975,315,320,317,56264,1956,0.44075,302.5,26332,861,0.441,307,892,0.449,306,946,30.63333333,25.37900056,42.54143646,3.828002098,0.51,0.68,0.581818182,26
415,100,30,0.417,0.44325,315,322,319,50814,1699,0.448,330,27730,1029,0.4435,315.5,726,0.447,319,665,57.76666667,14.3812709,42.85714286,4.052573932,0.49,0.84,0.610047847,25
416,108,108,0.417,0.435,315,319,305,47920,1549,0.439,323.5,24017,800,0.43725,315.25,688,0.434,317,812,56.88333333,30.42492918,51.91256831,3.563084112,0.4,0.82,0.69751693,20
417,107,31,0.417,0.448,315,319,308,47165,1543,0.4445,319.75,25496,996,0.4445,314.5,826,0.4465,318,1158,34.95,42.13451918,65.2173913,3.653250774,0.33,0.75,0.612612613,20
418,105,42,0.417,0.44975,315,320,308,51056,1488,0.45075,319.5,24434,821,0.44775,312.25,894,0.4485,306.5,1141,49.35,31.40360459,53.92670157,2.852441031,0.31,0.89,0.689342404,21
419,109,69,0.417,0.4405,315,317,300,48724,1430,0.44175,307,23132,700,0.44075,296.25,831,0.449,288,2232,53.9,28.66894198,56.36363636,2.324195471,0.39,0.68,0.671171171,24
420,98,81,0.419,0.43625,315,317,315,45574,1533,0.4335,308.25,21895,830,0.43225,318.25,665,0.4345,334.5,1218,57.16666667,38.66362079,61.2565445,2.630106323,0.62,0.7,0.57918552,21
421,98,56,0.419,0.42425,315,316,300,48773,1694,0.4215,305,24612,1015,0.425,309,877,0.4295,315,1533,76.5,22.51184834,42.85714286,2.992220227,0.23,0.65,0.644705882,22
422,94,97,0.425,0.4275,315,316,331,48242,1470,0.4315,302.25,23358,971,0.4295,304,901,0.4385,303.5,1498,59.66666667,19.58121109,40.90909091,3.483870968,0.27,0.8,0.504524887,25
423,100,18,0.417,0.434,315,319,309,47503,1507,0.43325,306.5,22618,718,0.43225,312.75,666,0.4365,324,1211,59.33333333,25.74031891,54.18994413,2.983293556,0.43,0.64,0.630841121,25
424,96,62,0.419,0.442,315,318,316,60508,1682,0.44175,309.5,25882,737,0.44075,313.5,920,0.444,302.5,1040,56.33333333,22.52873563,51.76470588,2.53164557,0.35,0.76,0.637583893,20
425,92,23,0.417,0.444,315,317,322,54062,1535,0.43775,318,25464,884,0.438,308.25,803,0.444,247.5,1281,73.33333333,26.11111111,44.86486486,3.624078624,0.41,0.79,0.589073634,22
426,102,65,0.419,0.4235,315,319,309,45059,1619,0.4265,300,25013,1001,0.42225,305,858,0.419,313.5,1362,62.5,31.45400593,52.69461078,3.276622558,0.39,0.8,0.694638695,23
427,87,122,0.423,0.438,315,320,317,52164,1802,0.43075,299.25,24210,920,0.43575,309.25,886,0.4425,315,1256,62.16666667,31.99534613,39.20454545,2.678062678,0.38,0.6,0.746575342,23
428,95,44,0.419,0.418,315,317,299,47937,1794,0.41925,304.25,23277,921,0.4145,299.75,758,0.418,304,1001,59.33333333,28.55450237,37.28813559,2.5,0.18,0.78,0.767058824,20
429,88,103,0.425,0.445,314,319,314,51457,1526,0.4425,300,20014,893,0.445,307.25,738,0.449,305,1228,63.66666667,28.07881773,52.15053763,3.324099723,0.28,0.66,0.729216152,20
430,94,33,0.421,0.44025,315,321,312,53017,1575,0.44225,311.25,24596,887,0.44675,316.75,956,0.4395,298,1234,55.95,32.44853738,48.64864865,2.920560748,0.5,0.74,0.768518519,22
431,107,91,0.417,0.44625,315,321,323,59351,1941,0.44375,323.5,26540,789,0.44575,314,912,0.453,322,1379,48.03333333,29.55421024,47.82608696,3.718535469,0.38,0.84,0.801843318,23
432,108,23,0.417,0.436,315,319,306,44749,1351,0.43675,310,24338,789,0.43675,306,751,0.447,309.5,1225,53.08333333,24.30011198,51.12359551,3.436018957,0.49,0.84,0.567307692,22
433,109,74,0.417,0.45075,315,321,322,59578,1818,0.44675,316.5,27409,934,0.45475,321.75,1116,0.459,334,1624,47.4,27.97586396,54.05405405,3.27689787,0.39,0.71,0.818807339,21
434,104,64,0.419,0.4415,315,318,320,61167,1992,0.44175,325.25,26540,1034,0.44075,320.75,1080,0.444,321.5,1176,52.5,29.57264957,50.83798883,2.712060012,0.35,0.74,0.665943601,19
435,102,100,0.425,0.43925,315,317,298,53016,1780,0.438,308,24000,1004,0.43925,302.25,948,0.449,305,1242,51.83333333,28.26815642,62.06896552,3.303684879,0.31,0.8,0.544217687,22
436,98,28,0.419,0.42675,315,317,301,52551,1636,0.4275,294.5,21187,641,0.428,313,987,0.436,303,1410,79.5,27.7499709,45,5.460662526,0.3,0.85,0.676814988,24
437,95,65,0.419,0.4505,315,318,323,57839,1990,0.45125,328,27521,1172,0.44775,318.5,1017,0.4545,331,1512,50,25.9529148,49.13294798,0.982800983,0.19,0.52,0.603982301,21
438,105,36,0.421,0.4405,315,314,312,57325,1545,0.444,301.5,23583,718,0.443,314.75,880,0.451,311,1250,39.83333333,32.30593607,60.60606061,3.210175651,0.35,0.57,0.788990826,20
439,104,87,0.425,0.44025,315,318,302,46554,1530,0.4435,303.75,23984,896,0.44,301.5,872,0.4495,1862.5,1060,49.5,34.8581355,57.77777778,3.042959427,0.35,0.8,0.69751693,24
440,75,56,0.428,0.45475,315,322,328,59752,1834,0.45775,316.5,24820,810,0.458,328.5,898,0.4585,319,766,44.05,23.70804475,38.02083333,4.255319149,0.35,0.72,0.630289532,23
441,98,111,0.421,0.44725,315,320,313,52148,1550,0.442,298,21991,686,0.44675,314.25,938,0.4525,307.5,788,57.2,31.35639758,50,2.858809802,0.34,0.66,0.749435666,23
442,75,12,0.429,0.431,314,317,313,52936,1743,0.428,306.75,24033,929,0.43375,309.25,864,0.4285,303.5,830,68.83333333,36.44595359,53.64583333,2.422680412,0.35,0.65,0.670644391,20
443,108,112,0.417,0.4375,314,317,304,43034,1272,0.4345,307.75,22409,791,0.43725,311.75,716,0.4385,309.5,1068,52.83333333,29.79942693,61.5819209,2.915951973,0.4,0.71,0.813364055,20
444,80,14,0.421,0.42575,314,318,305,46586,1675,0.423,307.5,20962,714,0.4265,300,794,0.425,310,1197,70.26666667,22.58630778,38.37837838,3.057553957,0.39,0.72,0.649411765,21
445,96,9,0.421,0.43825,317,321,320,52792,1839,0.43975,321.5,24386,875,0.44025,322.75,929,0.437,324,1533,59.33333333,26.36054422,50.80213904,2.362204724,0.28,0.59,0.791762014,20
446,101,33,0.417,0.4235,315,317,304,47905,1650,0.42325,302.25,22940,749,0.425,309,934,0.4305,314.5,2009,73.16666667,26.07398568,35.91160221,2.386495925,0.22,0.62,0.687943262,20
447,106,34,0.421,0.449,315,317,323,52262,1741,0.44525,312.5,25930,886,0.4515,314.75,774,0.456,319.5,1320,53.53333333,25.91380251,43.33333333,4.756575266,0.35,0.91,0.635321101,23
448,106,84,0.421,0.442,315,317,310,51313,1542,0.436,308,24489,1024,0.44275,315.5,1068,0.4525,303.5,1631,55.65,25.72074618,44.18604651,4.606060606,0.38,0.78,0.686936937,22
449,106,26,0.417,0.44225,314,318,317,56087,1486,0.4435,320.5,24804,826,0.44425,317,1022,0.454,324,1466,57.28333333,33.55592654,42.32804233,3.181336161,0.34,0.58,0.695749441,23
450,109,120,0.417,0.44425,314,320,310,52204,1671,0.44175,310.25,24000,868,0.4435,315,1006,0.4355,307.5,1418,50.98333333,35.64189189,56.66666667,2.576489533,0.36,0.69,0.876355748,22
451,102,9,0.417,0.437,314,318,310,49400,1654,0.44375,316.75,25464,947,0.43875,316.5,992,0.4385,311,1365,63.16666667,40.96989967,58.15217391,2.312138728,0.42,0.81,0.707093822,22
452,104,14,0.425,0.43525,314,318,317,46554,1608,0.4315,313.25,24917,929,0.438,315.25,819,0.438,315,784,51.33333333,23.98843931,41.37931034,3.658536585,0.42,0.45,0.69212963,24
453,102,65,0.417,0.44025,314,318,306,47310,1750,0.44575,312.5,27103,1116,0.4455,314,1057,0.458,316.5,1530,57.66666667,26.23922414,53.2967033,3.391684902,0.36,0.71,0.599045346,26
454,106,34,0.421,0.443,314,323,298,53596,1754,0.44525,311,23566,962,0.4405,301.25,868,0.4465,298,1274,57.83333333,32.65421619,65.51724138,3.143960287,0.31,0.65,0.713302752,24
455,108,73,0.417,0.453,315,320,322,57426,2135,0.45125,312.5,26417,1024,0.457,321,1026,0.457,318,1684,59.66666667,31.36830719,69.94219653,2.81447444,0.32,0.63,0.767653759,23
456,92,46,0.433,0.4435,315,316,318,53933,1830,0.44325,309.5,31250,1183,0.443,321,1136,0.4415,304,2264,62.16666667,20.34559643,44,3.00245098,0.37,0.68,0.514606742,22
457,108,77,0.421,0.446,315,316,317,49030,1930,0.446,316.75,27553,1085,0.452,321.25,970,0.4485,310,990,56.83333333,31.59609121,53.80434783,4.355400697,0.43,0.65,0.653579677,22
458,92,51,0.421,0.432,315,318,310,49448,1932,0.4345,314,24933,1036,0.4385,318.25,985,0.436,296,1050,61,21.51968941,41.84782609,3.473389356,0.23,0.6,0.55971897,24
459,102,86,0.421,0.4455,315,318,309,48998,1680,0.44825,320.5,27344,1148,0.4465,311,803,0.4475,312,1407,52,25.68704431,55.15151515,2.826217679,0.32,0.5,0.725446429,24
460,109,46,0.413,0.451,315,326,322,54769,1853,0.45175,301,24965,816,0.452,325.5,934,0.4595,304,1124,35.83333333,32.85714286,63.44086022,3.728813559,0.39,0.9,0.831509847,25
461,106,141,0.413,0.4425,315,319,315,54059,1852,0.44025,313.5,25978,1017,0.4435,310.75,1057,0.443,299.5,1064,62,25.20413718,44.38502674,3.770491803,0.4,0.8,0.568445476,23
462,102,32,0.417,0.42925,314,318,306,47889,1675,0.435,312.5,21911,968,0.43175,303.5,898,0.4345,309.5,1204,65.16666667,27.81232335,46.875,2.777777778,0.39,0.85,0.727688787,23
463,104,122,0.417,0.444,314,318,311,55235,1754,0.44775,311.5,25014,878,0.43875,312,826,0.442,300,1064,62.5,24.94382022,43.09392265,NULL,0.43,0.8,0.86199095,22
464,104,34,0.417,0.4525,315,318,318,51699,1698,0.45275,310.25,24015,931,0.452,314.25,873,0.455,308,1344,52.83333333,38.5331144,58.33333333,2.465753425,0.33,0.86,0.689189189,20
465,103,146,0.417,0.432,314,318,303,42809,1465,0.4275,307,23116,906,0.4305,306.75,766,0.43,303.5,1477,58.16666667,33.73842593,57.05882353,2.786377709,0.45,1.21,0.721153846,20
466,109,97,0.417,0.437,314,320,299,45526,1544,0.43875,301.25,20882,796,0.43775,306.25,872,0.44,302,1278,49.66666667,33.88666285,62.65060241,3.055721989,0.3,0.77,0.698412698,20
467,103,53,0.421,0.43375,315,320,322,55396,1995,0.43825,328.25,23004,926,0.43175,318.25,982,0.444,305,1144,62.5,21.56976744,48.14814815,3.039158387,0.28,0.76,0.632054176,19
468,98,81,0.421,0.43225,315,319,312,46298,1902,0.42625,304.75,20930,948,0.429,314.5,900,0.4325,306.5,1533,67,24.11594203,51.38121547,2.812687014,0.37,0.7,0.748251748,22
469,83,29,0.425,0.4355,315,315,306,50477,1908,0.43475,304,21638,936,0.432,310.5,1027,0.436,297,1365,68.66666667,30.00580383,60.12269939,2.166476625,0.39,0.64,0.666666667,22
470,106,92,0.417,0.44525,315,321,305,46988,1589,0.4445,307.5,21059,989,0.44125,316,970,0.438,309.5,1256,51.66666667,40.91671325,65.36312849,3.065355697,0.4,0.81,0.840182648,22
471,101,67,0.417,0.42975,315,316,291,41169,1295,0.433,299.25,23534,931,0.43425,288.5,770,0.4345,290.5,1172,50.66666667,30.49199085,62.2754491,2.120141343,0.43,0.63,0.538641686,23
472,105,46,0.421,0.433,315,320,302,47251,1577,0.432,298.75,22329,1029,0.4345,307.5,906,0.443,312.5,1337,69.33333333,29.06032483,50.56179775,2.796352584,0.29,0.66,0.494252874,22
473,99,73,0.421,0.44,315,320,320,50557,1844,0.436,314,24724,1097,0.4425,321,1036,0.441,302.5,1148,60.16666667,24.8600224,45.21276596,2.736842105,0.2,0.69,0.534988713,22
474,88,25,0.421,0.438,315,319,307,48130,1787,0.43725,313.75,28196,1172,0.437,312,919,0.436,311,1456,59,23.3995585,43.42857143,3.327495622,0.44,0.79,0.535307517,25
475,102,119,0.417,0.42625,315,319,309,47953,1857,0.42625,300.5,21878,1026,0.425,307,824,0.425,292,1148,47.66666667,36.34782609,51.36612022,3.176341731,0.3,0.48,0.724465558,22
476,94,24,0.425,0.445,314,318,316,53515,1692,0.45225,314.75,29434,1143,0.45325,319.25,957,0.452,313.5,1393,60,29.88950276,56.04395604,3.468208092,0.32,0.82,0.605568445,22
477,102,20,0.421,0.446,314,323,328,56972,1832,0.437,314.5,24032,858,0.444,327.75,770,0.4425,324.5,774,28.56666667,45.84050488,63.00578035,2.181208054,0.48,0.68,0.70917226,21
478,108,72,0.417,0.4555,314,320,318,56328,1886,0.45525,315,21686,772,0.4565,318.25,880,0.461,323.5,1239,30.23333333,45.51835853,61.46341463,3.100775194,0.43,0.76,0.734782609,23
479,106,20,0.421,0.449,314,320,312,46683,1776,0.4415,313.25,19194,866,0.45,314,733,0.4445,311,1071,45.16666667,39.24914676,66.12903226,2.973568282,0.4,0.87,0.567928731,20
480,109,71,0.417,0.45925,314,320,317,42714,1472,0.4575,318.5,21627,875,0.45075,314,679,0.4575,310,1043,26.33333333,28.14042787,54.85714286,2.88184438,0.33,0.65,0.769230769,21
481,105,87,0.417,0.43375,314,319,312,45176,1585,0.43525,306.5,21975,882,0.43275,296.75,588,0.4405,306.5,1120,34.65,31.16438356,50.82872928,2.227171492,0.42,0.68,0.813953488,21
482,104,25,0.421,0.45275,315,320,309,53354,1696,0.458,310,25110,915,0.451,303,922,0.455,313,1288,34.5,23.59234234,49.13294798,2.824551874,0.32,0.69,0.622362869,20
483,96,31,0.421,0.45,315,320,321,62887,2053,0.45175,335,27650,1099,0.44925,311,1054,0.4545,309.5,1225,76.16666667,25.16129032,47.80487805,3.111814346,0.34,1.12,0.786995516,21
484,100,87,0.421,0.441,315,321,302,48724,1596,0.4485,299.25,25190,1004,0.43825,295.25,737,0.4415,283,1046,57.66666667,24.68856172,66.45962733,3.636363636,0.25,0.63,0.585972851,23
485,103,24,0.417,0.42275,315,317,303,41780,1466,0.4295,306.25,22809,1069,0.425,303.25,882,0.424,296.5,980,62.66666667,41.41904184,64.1509434,2.421924793,0.39,0.87,0.910138249,21
486,85,93,0.421,0.43025,314,322,306,43789,1549,0.42425,296.5,21316,1031,0.4235,307.5,803,0.4315,304.5,872,57,42.3880597,58.75706215,2.142857143,0.26,0.64,0.792626728,23
487,98,118,0.417,0.43075,314,318,320,52550,1362,0.42875,313,23888,864,0.4305,311.75,807,0.4355,313.5,1550,52.48333333,28.86480319,43.25842697,3.126843658,0.35,0.87,0.618705036,20
488,88,35,0.421,0.43525,314,321,316,47872,1642,0.44,317.25,20384,782,0.43675,325.25,750,0.4395,327.5,1281,67.31666667,20.85924251,38.62433862,3.139269406,0.29,0.7,0.607888631,20
489,106,78,0.421,0.4385,314,320,314,47889,1642,0.45,315.5,23936,878,0.43975,313,933,0.4485,303,914,61.45,32.95774648,51.39664804,3.163841808,0.39,0.78,0.709302326,23
490,100,83,0.417,0.425,314,320,316,48808,1617,0.426,317.25,22361,828,0.42725,312.5,947,0.424,301.5,906,63.56666667,26.27070246,44.08602151,2.160318363,0.38,0.49,0.630170316,20
491,100,122,0.417,0.43775,314,318,311,45510,1444,0.44625,318.5,21846,770,0.44425,316.25,900,0.443,319,1270,53.71666667,25.93210907,50.25906736,2.211874272,0.26,0.73,0.719178082,21
492,98,4,0.417,0.424,314,318,305,47598,1342,0.42825,292.75,20946,707,0.431,308.25,868,0.4325,292,1438,54.36666667,24.23188406,54.9132948,2.522421525,0.49,0.77,0.751184834,24
493,98,35,0.417,0.4315,314,320,320,51248,1820,0.432,316.5,22602,802,0.434,316.25,1015,0.4415,317,1894,49.46666667,32.11678832,56.4516129,2.282377919,0.4,0.73,0.793764988,23
494,102,18,0.417,0.4425,310,320,316,49207,1620,0.43975,313,22088,849,0.4415,320.5,994,0.4405,314,1256,62.83333333,28.60335196,52.22222222,2.370689655,0.32,0.64,0.588235294,20
495,83,29,0.425,0.44475,316,318,323,55058,1636,0.44375,310.5,27634,770,0.4405,313.75,814,0.447,313,794,67.16666667,14.3575419,36.81318681,3.941176471,0.44,0.72,0.67816092,25
496,97,38,0.423,0.443,315,316,310,50007,1820,0.4355,306.75,25808,1078,0.43925,314.5,942,0.4285,296.5,1124,64.4,30.09491904,49.44444444,3.463203463,0.43,0.82,0.464285714,23
497,105,79,0.421,0.4325,314,319,321,56216,1839,0.433,310.25,23454,756,0.43175,317,875,0.4365,319.5,878,63.45,25.26193248,37.83783784,1.53937241,0.45,0.83,0.626450116,23
498,105,43,0.417,0.44625,314,318,321,52920,1897,0.4445,316,26396,1150,0.44625,316.5,1057,0.45,325.5,928,57.5,21.47138965,53,3.867403315,0.54,0.78,0.630841121,23
499,100,25,0.417,0.45675,314,318,312,49834,1766,0.45125,306.5,23599,915,0.4535,303.75,961,0.4565,315.5,1414,59.66666667,33.08470964,53.40314136,3.52303523,0.48,0.84,0.69837587,22
500,90,98,0.425,0.4455,314,321,315,49593,1614,0.4395,315.75,19914,914,0.44725,319.75,882,0.446,1808,1292,60.83333333,35.69372481,60.11560694,2.266124346,0.48,0.5,0.493421053,20
501,94,34,0.421,0.44175,314,321,310,52245,1886,0.4395,319.25,26106,1052,0.4445,324.25,1088,0.444,317,1662,57.16666667,18.87755102,35.51912568,3.724928367,0.55,0.81,0.712328767,22
502,94,52,0.421,0.4505,314,319,323,56039,1962,0.451,316.75,25158,1057,0.45125,323,884,0.4555,329,1726,61.16666667,20.54495913,39.57219251,4.043126685,0.45,0.68,0.590909091,22
503,109,135,0.417,0.443,314,321,312,46699,1594,0.439,313.25,24644,784,0.44,319.25,700,0.4365,326,990,39.65,53.1587934,89.14285714,3.757225434,0.48,0.92,0.891891892,23
504,92,24,0.421,0.4395,315,318,308,47438,1846,0.441,305,22345,931,0.446,317.75,957,0.4465,304.5,1036,61.16666667,20.88036117,45.40229885,3.273137698,0.19,1.04,0.598173516,20
505,96,64,0.421,0.441,315,317,302,45027,1610,0.43875,306,19548,850,0.44325,311.5,928,0.4475,311.5,1214,66.83333333,23.3163554,48.5380117,3.052064632,0.25,0.83,0.675174014,20
506,100,81,0.421,0.43025,315,323,302,46136,1626,0.4265,305.5,20866,854,0.425,306.75,873,0.4295,315.5,1330,63.66666667,33.50846468,44.38202247,3.106682298,0.43,0.68,0.719817768,19
507,96,21,0.421,0.433,315,323,311,45092,1582,0.43225,310,19178,833,0.433,306.75,749,0.4395,307,966,49.33333333,27.3255814,49.70760234,2.614379085,0.36,0.65,0.903669725,18
508,106,82,0.417,0.4345,315,318,318,50862,1934,0.4455,321.25,26187,1092,0.44,311.5,1078,0.442,296.5,1088,77.16666667,21.22425629,39.13043478,2.840909091,0.38,0.93,0.793721973,20
509,105,8,0.417,0.4395,314,318,302,51200,1746,0.43925,306.75,23132,805,0.442,305,796,0.4445,301,1032,51.61666667,21.64477441,44,2.719546742,0.29,0.66,0.822988506,22
510,105,8,0.417,0.43675,314,318,308,51602,1426,0.4365,302.75,21477,634,0.43725,296.5,830,0.4415,289,826,52.95,24.17519909,50.5952381,3.174603175,0.26,0.73,0.812641084,22
511,105,8,0.417,0.4305,314,318,305,49071,1606,0.43325,303.75,22827,850,0.43,305.5,754,0.44,304,910,NULL,23.84189463,46.19565217,3.339296363,0.4,0.52,0.828235294,22
512,105,38,0.417,0.435,314,320,312,47776,1463,0.433,304.75,23148,796,0.43475,309,1026,0.442,304,1026,54,22.84408909,47.70114943,3.038674033,0.29,0.66,0.655889145,20
513,105,38,0.417,0.446,314,317,318,50605,1503,0.44975,321,22602,686,0.4485,318.75,945,0.449,302.5,900,49.35,23.74378796,52.04678363,3.045977011,0.33,0.63,0.619047619,20
514,105,38,0.417,0.444,314,317,316,54158,1766,0.4505,321,25448,910,0.445,320.5,990,0.4515,321.5,980,60.85,27.25770925,53.26086957,2.891844997,0.25,0.55,0.71954023,20
515,106,59,0.417,0.435,315,319,309,47390,1762,0.43475,308.25,21220,864,0.43325,304.25,817,0.435,298.5,1236,51.83333333,36.15886189,58.62068966,2.293862368,0.36,0.7,0.742081448,20
516,104,96,0.417,0.42775,315,319,304,44561,1542,0.429,299,19081,835,0.42675,302.75,889,0.4285,305,1435,54.16666667,30.22170362,57.22222222,2.094240838,0.28,0.75,0.717647059,20
517,101,38,0.421,0.4535,315,318,317,56167,1787,0.4495,318.5,23149,864,0.453,317.75,805,0.4555,317,1064,43.5,27.97586396,52.43243243,2.77324633,0.4,0.68,0.885964912,20
518,98,116,0.421,0.432,315,317,303,42359,1463,0.435,315,25672,976,0.43575,308.5,794,0.4395,330.5,1390,67.5,29.86651835,53.43915344,2.714932127,0.37,0.86,0.599088838,22
519,100,18,0.421,0.43675,315,320,305,42841,1416,0.43975,310.25,21846,970,0.43525,302,672,0.433,313,1096,50.83333333,39.58927553,56.80473373,2.798400914,0.31,0.72,0.931034483,22
520,102,45,0.425,0.43425,315,322,318,52856,1771,0.43325,324,27923,1118,0.4345,316.5,942,0.4405,306.5,1256,53.33333333,34.77508651,53.33333333,3.556609366,0.31,0.58,0.594405594,23
521,102,94,0.425,0.444,315,318,297,50107,1788,0.43825,314,27553,955,0.43925,302.5,856,0.448,300.5,1124,57.33333333,25.01411632,50.57471264,3.544450901,0.36,0.7,0.725663717,23
522,103,71,0.421,0.43575,314,318,315,52277,1566,0.437,308.75,23984,760,0.43975,322,1017,0.446,300.5,1295,64.98333333,26.93181818,40.8839779,2.482929857,0.41,0.52,0.637413395,21
523,103,119,0.425,0.4545,314,324,315,50589,1614,0.452,319.75,26814,917,0.456,324,964,0.4625,323.5,1396,55.03333333,35.21667581,51.32275132,2.795573675,0.39,0.6,0.689277899,21
524,100,37,0.417,0.4435,314,324,311,50621,1864,0.4505,318.75,25946,1158,0.44775,309.5,961,0.45,309,1082,69.5,25.02780868,50,3.314917127,0.4,0.83,0.628959276,22
525,96,36,0.421,0.425,314,318,299,47229,1558,0.4295,295.75,19644,833,0.4255,305.25,959,0.433,314,1631,56.2,28.78787879,37.5,2.787068004,0.35,0.74,0.793981481,22
526,106,44,0.417,0.458,314,320,322,53242,1815,0.4525,323.75,27264,976,0.45675,322,992,0.4505,303.5,1043,41.76666667,31.93420306,58.72093023,3.428571429,0.35,1.89,0.796536797,24
527,106,94,0.417,0.4475,314,321,313,51474,1706,0.44175,319.75,23261,858,0.44425,308.75,877,0.451,321.5,1446,48.31666667,36.87214612,64.73988439,3.244166192,0.42,0.77,0.608695652,23
528,106,104,0.417,0.4435,315,322,316,46780,1638,0.44,305.25,21123,816,0.43475,314.75,886,0.4525,325,1648,57,40.51509577,66.48648649,2.906976744,0.4,0.5,0.7695962,20
529,95,24,0.421,0.4275,315,316,302,46281,1603,0.43225,306.5,23310,873,0.42925,304.25,889,0.429,299.5,1085,60.83333333,23.6645606,60.97560976,3.272498427,0.26,0.48,0.584295612,23
530,103,89,0.417,0.44175,315,318,312,45140,1886,0.43925,305,22329,976,0.43525,314,985,0.443,306.5,1376,55.83333333,34.93424814,56.47058824,3.227699531,0.28,0.69,0.702078522,24
531,103,130,0.417,0.4265,315,322,297,40012,1318,0.43,294,20994,914,0.4335,306.5,833,0.4365,293.5,1428,51.51666667,32.53747918,54.14364641,3.468208092,0.33,0.68,0.644859813,23
532,103,19,0.417,0.4225,315,317,300,45429,1561,0.43125,303.25,20624,934,0.42625,305,1004,0.432,296.5,1337,47.83333333,31.7571512,45.50898204,2.979274611,0.44,0.6,0.645833333,20
533,103,30,0.417,0.44375,315,320,314,45879,1734,0.4395,312.75,20464,1012,0.44125,306.25,938,0.4485,324,1074,50.78333333,57.79816514,63.38797814,2.45398773,0.44,0.52,0.769574944,23
534,101,97,0.417,0.437,315,321,314,44063,1713,0.43475,312,21590,928,0.43625,309,821,0.436,302,788,70,47.34463277,55,1.612903226,0.29,0.42,0.631336406,22
535,106,66,0.417,0.433,314,320,307,44625,1255,0.43625,313.25,25029,849,0.4305,309.5,858,0.428,302,872,45.81666667,46.27277747,69.23076923,2.442827443,0.2,0.56,0.746411483,21
536,106,81,0.413,0.42525,314,317,311,46538,1325,0.4195,310.25,24515,970,0.42725,307.75,740,0.4355,310,777,57.6,41.21863799,65.14285714,3.047404063,0.26,0.76,0.684085511,22
537,103,37,0.421,0.443,312,313,312,48701,1628,0.44225,320,24692,850,0.444,315.25,822,0.4465,310,917,58.98333333,31.39140271,60.57142857,2.691867125,0.51,0.82,0.941834452,21
538,80,22,0.425,0.43975,315,323,321,50959,1654,0.4335,316.25,24901,1045,0.43825,322.5,1092,0.434,309.5,1158,65.5,23.83654938,45.74468085,2.521008403,0.38,0.6,0.754022989,22
539,90,66,0.421,0.42775,312,312,309,42954,1505,0.42075,306.5,22361,900,0.42925,313.25,882,0.424,314.5,1134,78,32.48993675,60.84656085,2.412868633,0.32,0.55,0.754761905,22
540,96,34,0.417,0.42875,315,324,321,52872,1678,0.42825,317.75,20480,812,0.427,321.5,859,0.4265,309,1246,50.66666667,31.30733945,60.33519553,1.991150442,0.25,0.62,0.734741784,20
541,103,96,0.417,0.4295,315,318,304,49994,1668,0.43425,305.25,22425,882,0.43225,308.5,985,0.434,304.5,1522,62.66666667,25.26564345,53.65853659,2.704257768,0.31,0.86,0.601769912,22
542,105,108,0.417,0.42425,314,313,316,47583,1741,0.4235,313.75,22457,852,0.424,304.75,780,0.424,322.5,1656,47.66666667,40.28021016,61.57894737,3.418339664,0.33,0.57,0.839243499,25
543,106,44,0.413,0.42775,314,316,311,49930,1715,0.426,315,23856,954,0.4295,302.5,936,0.4345,311.5,1295,62.5,28.81257276,40.8839779,2.838557067,0.17,0.57,0.569506726,22
544,107,127,0.413,0.4455,314,312,316,53885,1892,0.4485,304.25,25930,931,0.44175,312.25,882,0.4545,301,976,52.66666667,32.39823982,53.51351351,3.201396973,0.31,0.42,0.747747748,22
545,102,45,0.417,0.43125,312,313,311,48934,1349,0.43375,311,22409,793,0.43325,312,788,0.4375,308.5,1162,60.83333333,40.39238315,57.86516854,3.204047218,0.1,0.47,0.631205674,25
546,103,80,0.421,0.433,314,319,307,46731,1536,0.438,305.75,21027,800,0.4345,307.75,780,0.44,312,1498,49.9,39.62795941,56.59340659,2.78223649,0.38,0.75,0.795823666,21
547,109,98,0.417,0.45175,312,315,319,53017,1766,0.45225,323.75,25720,747,0.4535,313.25,922,0.459,314,1484,41.01666667,39.15431082,47.44897959,2.536640361,0.49,0.86,0.695259594,22
548,109,138,0.417,0.4575,312,317,320,51216,1740,0.45325,323,24354,800,0.45575,328.75,798,0.4515,348,1533,38.98333333,47.14285714,70.32967033,1.873278237,0.42,0.84,0.641255605,21
549,97,103,0.421,0.43075,312,312,318,61440,2070,0.43275,307,24482,954,0.4365,308.25,901,0.4355,305.5,1088,60.5,24.91620112,42.85714286,4.656577416,0.25,0.48,0.589164786,21
550,85,32,0.433,0.4375,312,312,308,54094,1871,0.43925,303.25,21589,858,0.439,311,780,0.439,308,1362,58.83333333,18.20744081,30.21978022,3.719008264,0.14,0.42,0.651376147,20
551,105,180,0.417,0.42775,312,313,301,45172,1484,0.4295,309.5,20368,936,0.4315,311.25,819,0.4325,305,1180,51.83333333,34.98273878,58.79120879,2.5769956,0.25,0.59,0.793981481,22
552,105,215,0.417,0.4215,312,312,350,43918,1556,0.4235,302.75,19676,872,0.42275,302,537,0.4225,299,1180,56.5,31.1023622,66.06060606,2.496798976,0.37,0.55,0.867298578,21
553,102,29,0.417,0.44625,312,313,298,47872,1456,0.587333333,411.6666667,24494,758,0.447,307.25,742,0.4625,308.5,1253,59,26.02631875,50.88757396,3.300733496,0.29,0.52,0.65,23
554,106,130,0.417,0.434,312,314,313,47503,1549,0.43475,313.5,21477,718,0.43425,305.5,772,0.43,283.5,920,51.16666667,24.81375358,54.11764706,2.965864578,0.25,0.67,0.876168224,20
555,108,30,0.417,0.456,312,317,322,57646,1771,0.452,315.25,24997,826,0.454,321.25,956,0.46,326,1446,40.48333333,38.6951631,61.79775281,2.228571429,0.31,0.48,0.830107527,20
556,108,96,0.417,0.4325,312,316,311,52100,1764,0.432,310.5,21380,766,0.44025,319.75,1012,0.4385,310.5,1544,52.18333333,34.93699885,48.33333333,2.191464821,0.23,0.72,0.801843318,20
557,106,78,0.417,0.44075,312,312,302,42696,1461,0.442,306.75,20480,968,0.4415,310.25,892,0.4405,319.5,1244,43.66666667,35.13209668,62.94117647,2.249134948,0.3,0.49,0.684684685,20
558,109,34,0.413,0.42925,312,316,311,48338,1362,0.42975,316.75,20753,679,0.43075,316.5,936,0.428,308.5,1589,43.91666667,31.20365088,55.93220339,2.744425386,0.28,0.25,0.752403846,21
559,109,82,0.413,0.441,312,318,304,49190,1540,0.44,316,21927,649,0.44275,305.75,730,0.456,333.5,1806,41.58333333,32.13665316,60.81871345,2.533172497,0.31,0.57,0.736238532,22
560,105,35,0.417,0.42825,312,312,295,42873,1438,0.4345,312,22506,901,0.42675,307,838,0.432,309.5,1466,42.66666667,36.81225184,54.4973545,2.368265246,0.39,0.55,0.73364486,20
561,70,56,0.433,0.435,312,312,294,47214,1676,0.43075,302,25303,1200,0.43375,293.75,877,0.437,357.5,1631,68.16666667,14.36814772,33.33333333,2.66357846,0.2,0.42,0.586363636,21
562,104,138,0.417,0.43225,312,317,316,52052,1657,0.429,301.75,20239,793,0.43425,300.75,838,0.4385,317,1340,70,36.05248146,60,2.026666667,0.23,0.43,0.662707838,23
563,104,101,0.415,0.43275,312,312,316,49239,1843,0.424,317,24226,896,0.42625,309.25,840,0.426,299,1204,52.16666667,34.31430253,45.34883721,2.880184332,0.25,0.8,0.671264368,25
564,104,27,0.415,0.43,312,316,310,50428,1740,0.4345,313.5,24467,1036,0.436,310.75,926,0.439,308.5,1022,47.66666667,37.48571429,54.34782609,3.112391931,0.27,0.49,0.689814815,25
565,106,137,0.413,0.441,312,318,316,44931,1586,0.43875,306.75,19853,830,0.443,319.75,861,0.438,307,1288,49.33333333,49.29017604,78.57142857,2.624531334,0.39,0.57,0.767123288,25
566,90,86,0.433,0.45775,312,321,315,47728,1461,0.45675,323.25,23261,740,0.456,312.5,726,0.4535,310,1141,47.35,35.54959786,59.89304813,2.218614719,0.5,0.84,0.710467706,21
567,105,129,0.421,0.4465,312,316,318,52534,1852,0.44325,309.25,20223,756,0.44175,314,845,0.443,312.5,1242,45.06666667,44.65909091,67.0212766,2.373417722,0.26,0.88,0.760964912,23
568,107,73,0.417,0.4395,312,317,315,51522,1866,0.43125,308.25,18840,698,0.43625,316,870,0.439,335.5,1522,50.71666667,34.19838524,64.59627329,2.96969697,0.31,0.92,0.410377358,25
569,106,47,0.417,0.4295,312,312,317,52068,1760,0.42775,320.75,27778,1031,0.425,310.25,924,0.4355,318.5,1158,46.33333333,32.21590909,56.75675676,3.105263158,0.38,0.62,0.772300469,27
570,108,87,0.421,0.4405,312,314,311,48483,1533,0.4405,309.25,27200,1074,0.44275,311,1003,0.4545,308,1666,50,39.96728462,67.55319149,2.959240648,0.37,0.54,0.770419426,25
571,106,41,0.417,0.44725,312,312,308,53226,1787,0.4475,306.75,24467,1015,0.44875,313.5,810,0.4505,320.5,1382,56.5,34.55555556,51.79487179,2.891844997,0.38,0.66,0.507865169,23
572,106,156,0.417,0.42175,312,312,288,42037,1345,0.42025,288.5,19226,728,0.4225,290.5,740,0.4285,299.5,1134,56.66666667,29.24807578,55.88235294,2.90237467,0.37,0.63,0.760095012,26
573,98,128,0.421,0.41775,312,313,296,44320,1521,0.408,284,17168,728,0.4133,296.75,830,0.417,292,962,65.33333333,26.13095238,46.9273743,2.489866821,0.25,0.36,0.520383693,25
574,108,48,0.413,0.43425,312,312,301,47856,1439,0.43475,304.25,22859,864,0.44075,313.25,933,0.445,299,752,52.66666667,33.35208099,57.06214689,3.287981859,0.19,0.43,0.713625866,32
575,106,164,0.417,0.43175,312,312,299,46780,1564,0.43325,306.25,22248,971,0.43775,304.75,889,0.437,299,1158,62.83333333,29.84988453,60.47904192,2.43902439,0.22,0.86,0.738636364,25
576,104,24,0.417,0.43,312,312,298,52599,1778,0.43175,306.25,23904,870,0.433,304,905,0.436,316,1414,63.56666667,30.89430894,54.94505495,2.593818985,0.21,1.05,0.872727273,27
577,108,92,0.417,0.43375,312,312,308,53901,1759,0.42775,302.25,21075,774,0.43325,308,889,0.4365,297,1085,55.56666667,40.76834862,63.18681319,2.592165899,0.19,0.82,0.781990521,23
578,108,17,0.417,0.45225,312,316,323,55267,1897,0.4505,312.75,24612,744,0.4565,317.25,868,0.4585,329.5,1442,40.1,28.96825397,50.84745763,3.171856978,0.4,0.77,0.645089286,21
579,106,94,0.413,0.45325,312,322,311,47198,1521,0.45125,319.25,24547,987,0.45075,309,765,0.4555,308,1152,53.33333333,36.42384106,56.54450262,3.010033445,0.22,0.52,0.697986577,20
580,93,18,0.421,0.4255,312,313,308,44963,1701,0.425,306.5,19532,804,0.426,307.5,1020,0.429,312,1330,62.16666667,32.73672055,56.98924731,2.382302893,0.23,0.4,0.662763466,25
581,104,95,0.415,0.418,312,312,305,44658,1547,0.421,304.75,21509,868,0.42375,300.75,833,0.431,309.5,1970,68.83333333,31.74984967,54.23728814,3.141993958,0.36,0.48,0.689903846,25
582,106,25,0.417,0.43925,312,312,317,54432,1811,0.445,322.25,28587,948,0.441,310,990,0.437,306,1298,67.16666667,25.78125,54.02298851,3.692115144,0.33,0.62,0.712962963,21
583,104,47,0.417,0.4485,312,315,325,54142,1934,0.44875,326.25,27055,1169,0.45325,324,962,0.4555,312.5,1382,53.16666667,37.43315508,55.44554455,3.99573788,0.43,0.65,0.719817768,22
584,108,42,0.417,0.4425,312,315,309,47149,1620,0.44825,328,26332,1104,0.44975,317,903,0.446,323,1253,40.66666667,39.34977578,72.52747253,3.376906318,0.23,0.4,0.77293578,23
585,106,38,0.417,0.4525,312,316,316,55572,1746,0.44725,308.5,22104,872,0.45025,319.25,901,0.457,322,1060,48,28.66449511,53.80434783,3.553299492,0.24,0.25,0.70246085,24
586,95,106,0.421,0.44225,312,319,308,48628,1624,0.4415,313.75,22168,936,0.4405,311.25,831,0.4425,302,1082,45.83333333,30.91537133,55.08982036,2.595051298,0.31,0.62,0.659142212,24
587,109,83,0.409,0.44575,312,319,310,47117,1493,0.45575,323.75,22554,905,0.451,313.75,742,0.4485,321.5,1407,37.66666667,38.27092511,68.61702128,2.542841349,0.2,0.52,0.794642857,20
588,108,40,0.417,0.4505,312,313,325,50590,1738,0.463,323.75,24612,990,0.4535,330.75,980,0.454,310.5,1110,42.16666667,32.67273701,60.77348066,2.448775612,0.4,0.96,0.652968037,21
589,108,98,0.417,0.44,312,313,310,58965,1899,0.44425,307.5,20657,896,0.44075,315,900,0.4385,311,970,45.16666667,34.5890411,68.42105263,2.608695652,0.31,0.63,0.671232877,20
590,108,37,0.417,0.43475,312,312,316,51972,1785,0.42375,313.75,22811,882,0.4255,311.25,998,0.4265,307,1036,47.66666667,25.35294118,10.75697211,3.107344633,0.21,0.68,0.751162791,23
591,106,81,0.417,0.44325,312,312,308,48210,1564,0.43825,304.5,21541,856,0.447,306.25,863,0.45,309.5,1204,54.16666667,31.80515759,68.18181818,2.994011976,0.4,0.41,0.630044843,23
592,98,113,0.421,0.435,312,316,306,51788,1421,0.435325,312,28196,959,0.431,316.5,766,0.445,329,1488,51.66666667,29.67479675,56.32183908,3.317535545,0.31,0.68,0.645833333,26
593,109,90,0.409,0.44775,312,315,318,51554,1804,0.4435,313.25,19436,780,0.448,322.5,1169,0.444,322.5,1575,55,30.73420603,62.94117647,2.229299363,0.31,0.56,0.756818182,24
594,106,128,0.413,0.43,312,315,324,48178,1642,0.437,314,21252,817,0.43475,325.75,896,0.4305,316.5,1026,56.33333333,47.47126437,71.72774869,2.561183836,0.29,0.82,0.757719715,20
595,72,28,0.433,0.44175,312,315,314,49770,1577,0.43525,308,21573,788,0.43975,310.25,956,0.438,305.5,1054,69.16666667,23.52610893,42.85714286,1.905311778,0.41,0.58,0.657407407,20
596,109,45,0.417,0.45375,312,317,317,54801,1746,0.456,311.5,22859,821,0.45875,318.75,894,0.466,311,1292,46.66666667,32.31347289,56.59340659,2.850877193,0.35,1.04,0.586363636,20
597,108,140,0.409,0.443,312,316,310,48596,1521,0.438,306,17796,693,0.4454,309.5,905,0.4505,305,1246,36,37.9640045,66.10169492,2.652200121,0.27,0.89,0.774774775,20
598,105,61,0.417,0.44275,312,312,320,51779,1687,0.44225,310,23213,849,0.43775,312.25,852,0.4425,310.5,1312,40,31.84892897,63.0952381,3.229527105,0.34,0.85,0.727472527,20
599,106,43,0.417,0.44925,312,315,320,48226,1920,0.442,302.75,19821,850,0.4545,314.5,961,0.4535,314,1407,47.5,27.84448256,55.62130178,3.310430981,0.37,0.95,0.838074398,27
600,108,107,0.413,0.43925,312,313,311,51297,1846,0.44475,318.75,25125,970,0.442,318,934,0.449,307,1568,58.33333333,26.55016911,56.21621622,3.496503497,0.26,0.82,0.836689038,23
601,109,141,0.417,0.43358,312,319,320,49046,1906,0.43375,314.75,22104,970,0.43475,313.25,905,0.442,318,1494,52.83333333,29.68568102,57.64705882,2.972651605,0.29,0.46,0.743764172,22
602,108,106,0.417,0.436,312,314,312,47294,1619,0.44075,313,23406,971,0.442,310,830,0.447,311.5,1180,41.48333333,39.32960894,62.16216216,3.06122449,0.29,0.57,0.581018519,22
603,108,32,0.417,0.45,312,313,311,49834,1456,0.443,313,23470,896,0.4455,306.5,896,0.439,303,1046,42.33333333,22.41758242,45.65217391,2.25921522,0.27,0.58,0.507042254,22
604,108,101,0.413,0.4375,312,313,307,43088,1497,0.433,306,19098,919,0.4385,304.5,761,0.4455,314.5,984,56.33333333,33.39050886,61.32596685,4.318181818,0.21,0.62,0.784269663,21
605,102,31,0.415,0.463,312,317,323,58836,2034,0.45675,313.75,24885,1004,0.463,316.5,896,0.4715,317.5,1295,37.83333333,31.44618834,61.40350877,3.87409201,0.28,0.5,0.617521368,25
606,108,58,0.413,0.455,312,316,315,43902,1586,0.4455,317.25,21011,912,0.4465,319.75,800,0.457,317,1281,47.16666667,33.29639889,59.01639344,3.165298945,0.42,0.76,0.768018018,22
607,105,33,0.417,0.437,312,314,320,49721,1678,0.42875,305,19468,761,0.436,315.75,1001,0.4435,313.5,1533,47.66666667,32.58491652,57.06214689,2.826855124,0.23,0.72,0.724137931,25
608,103,39,0.417,0.4345,312,313,295,44111,1720,0.433,304,20239,844,0.44,300.75,808,0.451,312.5,1785,61.66666667,38.69688385,71.83908046,2.915451895,0.24,0.69,0.771167048,23
609,106,95,0.417,0.4515,312,316,318,54334,1918,0.44775,316.5,21428,877,0.4465,328,1087,0.4485,311,1656,50.16666667,38.71706758,74.70588235,2.241594022,0.29,0.84,0.736842105,20
610,80,59,0.425,0.43825,312,312,310,44336,1418,0.43025,304.5,22136,794,0.42875,322.75,880,0.434,318.5,1435,50.16666667,38.54282536,57.51295337,1.938187533,0.21,0.43,0.741935484,21
611,106,26,0.413,0.42875,312,316,296,43998,1582,0.4305,305,21541,802,0.43075,299.25,642,0.437,303,1176,45.33333333,31.60046729,49.0797546,3.823529412,0.32,0.45,0.692307692,22
612,108,12,0.413,0.4445,312,315,312,47953,1549,0.4465,325,28309,978,0.45645,319.5,900,0.455,317.5,1508,56.16666667,40.43047941,56.98324022,3.105590062,0.31,0.63,0.606334842,21
613,106,55,0.417,0.45125,312,313,323,48387,1923,0.45475,326.5,20376,966,0.45325,328.5,852,0.4635,330.5,1183,47.16666667,36.29873696,58.73015873,3.504928806,0.18,0.53,0.644396552,20
614,98,96,0.417,0.4365,311,313,317,55621,2174,0.436,314.25,26878,1040,0.4375,325.5,1057,0.448,326.5,1642,64.83333333,20.83798883,52.43243243,3.479177649,0.24,0.63,0.604651163,20
615,100,14,0.417,0.439,312,316,322,47891,1657,0.44,302.75,21622,1003,0.44,318.75,1064,0.442,320,1606,41.66666667,37.01007839,63.63636364,3.732162459,0.32,0.44,0.750572082,20
616,102,32,0.413,0.43925,312,313,317,50782,1458,0.4485,311,22602,696,0.4375,315.5,1027,0.4445,310.5,1155,61,32.93378995,65.29411765,2.967898243,0.3,0.75,0.727688787,21
617,106,95,0.417,0.43675,312,316,328,52631,1981,0.432,313.25,25399,1080,0.42975,316.75,901,0.4375,310,1600,56.33333333,29.64244521,56.90607735,4.337202199,0.37,0.68,0.585648148,20
618,80,48,0.433,0.44725,312,320,334,54383,1783,0.44975,323,30093,998,0.4505,332.5,1134,0.445,330,2002,69.13333333,18.61495845,34.5,6.568516421,0.15,0.3,0.583333333,22
619,104,63,0.425,0.44,312,314,321,48757,1550,0.4335,316,22634,1024,0.4385,323,924,0.4375,313,1516,57.5,33.10810811,57.83783784,2.618384401,0.29,0.72,0.881006865,20
620,108,119,0.417,0.42875,312,313,317,48564,1880,0.423,305.75,21059,877,0.41875,303.25,894,0.432,299,1155,53.83333333,30.1183432,58.43373494,3.29807094,0.36,0.6,0.838337182,23
621,106,26,0.425,0.44375,312,313,316,48001,1568,0.4405,310,23322,945,0.43975,307.25,950,0.444,306,1382,46.16666667,33.78995434,83.95061728,2.977232925,0.37,0.79,0.656750572,23
622,120,33,0.419,0.40975,306,306,302,46956,1790,0.4125,304.75,25174,1076,0.41025,306.25,824,0.426,313,1200,61.83333333,25.627554,54.49438202,4.171779141,0.34,0.56,0.725925926,11
623,90,57,0.425,0.43875,312,314,321,51924,1684,0.44525,315,18519,870,0.438,303.5,845,0.444,303,1558,56.16666667,39.41441441,54.45026178,2.259887006,0.21,0.56,0.662131519,20
624,95,104,0.425,0.42825,312,312,309,46780,1633,0.426,302.5,19612,842,0.428,310.25,910,0.4335,315.5,1362,54.83333333,29.16666667,61.17647059,2.315562736,0.48,0.48,0.738317757,20
625,106,79,0.417,0.4435,312,315,313,46506,1568,0.441,306.5,21702,926,0.43775,318,922,0.433,307,1365,58.18333333,35.38979248,66.28571429,3.357817419,0.29,0.61,0.702517162,23
626,102,22,0.417,0.44175,315,317,320,56328,2116,0.44325,320,27103,1101,0.443,321.5,1076,0.439,304.5,1222,64.56666667,32.97692741,69.78021978,3.896103896,0.41,0.65,0.690045249,25
627,98,48,0.417,0.42375,312,315,306,42150,1470,0.42575,313.5,19499,901,0.42475,308.5,897,0.4335,323.5,1813,60.16666667,26.96365768,1387.428571,3.179364127,0.35,0.64,0.779342723,20
628,102,166,0.417,0.43425,312,313,314,45590,1446,0.42875,304.5,18117,696,0.4335,309.75,751,0.4365,309,1060,45.83333333,34.15898618,59.1160221,2.20214568,0.28,0.8,0.728971963,20
629,102,11,0.421,0.4290525,312,315,307,52310,1687,0.43625,300.5,22731,796,0.43075,304.25,826,0.43,316.5,1250,39,35.98442714,63.33333333,3.382789318,0.23,0.56,0.557177616,22
630,98,21,0.417,0.4295,312,316,314,48644,1722,0.571333333,417.6666667,22420,833,0.43075,313.5,1015,0.4285,313,1572,63.66666667,38.08156232,50.53763441,1.714285714,0.33,0.57,0.779859485,20
631,100,41,0.417,0.4555,312,314,315,48580,1419,0.455,303.5,22296,772,0.4575,308.75,786,0.4535,293.5,886,51.5,33.53624792,62.5,1.97330238,0.41,0.79,0.655701754,20
632,100,87,0.417,0.4355,312,316,305,43548,1423,0.437,299.75,19483,807,0.439,307.5,882,0.434,299.5,1568,49,30.04587156,61.84971098,2.502910361,0.31,0.62,0.553287982,23
633,94,97,0.425,0.4215,312,312,297,43580,1516,0.424,298.5,20384,940,0.42425,307.5,887,0.428,299.5,1264,57,27.65196663,54.03726708,2.582582583,0.34,0.62,0.649411765,21
634,108,125,0.425,0.445,312,314,312,48371,1568,0.44425,305,21750,891,0.44375,313.5,887,0.4425,312,1040,47.83333333,26.51428571,54.11764706,3.085714286,0.44,0.68,0.838137472,20
635,110,128,0.425,0.44625,312,314,317,47664,1594,0.4505,315.5,22811,884,0.4395,322.25,905,0.4555,322.5,1064,40.33333333,26.23220153,62.29508197,2.625298329,0.44,0.83,0.789587852,21
636,96,75,0.421,0.43525,312,311,314,45494,1620,0.43475,311.25,20512,966,0.43875,306.75,943,0.438,305.5,1631,54.16666667,35.93450028,69.02173913,2.464985994,0.32,0.5,0.826789838,21
637,92,34,0.421,0.438,312,316,311,52100,1724,0.43825,306,23438,770,0.43775,311.75,688,0.4415,314,1841,56.5,26.19324796,56.21301775,3.669190448,0.31,0.8,0.592255125,20
638,95,85,0.421,0.44625,312,314,334,59334,2170,0.4455,316.25,25094,912,0.447,330.25,994,0.443,322,1470,66.16666667,23.63936229,52.54237288,2.956225128,0.32,0.5,0.606334842,20
639,104,106,0.417,0.4425,312,314,316,48258,1799,0.444,326,22795,989,0.44475,316.25,919,0.444,314,1421,53.33333333,38.73925501,62.30366492,2.514619883,0.38,0.66,0.965292842,20
640,104,92,0.421,0.43025,312,313,310,49126,1526,0.43025,311.75,24418,1003,0.4305,303.25,931,0.4295,300,1197,56.33333333,26.87981054,51.80722892,3.473945409,0.18,0.61,0.686363636,20
641,106,40,0.413,0.4465,312,315,309,47053,1668,0.44725,316.75,19050,761,0.45225,313.75,884,0.454,321,1558,33.16666667,32.25446429,63.12849162,3.429504627,0.41,0.5,0.827740492,22
642,105,97,0.413,0.43975,312,314,298,45638,1517,0.44225,309.5,21380,854,0.4425,313.25,810,0.4555,315,1190,35.66666667,24.8603352,49.46236559,4.332344214,0.37,0.77,0.919354839,20
643,102,36,0.421,0.4205,312,313,310,47374,1769,0.42125,299,19516,863,0.4215,306.5,873,0.4305,315,1554,37.83333333,27.27272727,55.75757576,3.013530135,0.31,0.74,0.847575058,21
644,105,27,0.421,0.437,312,311,311,46522,1678,0.4355,300,18214,842,0.44325,316.5,749,0.441,317,1158,48.5,33.66164542,62.20930233,2.537231109,0.33,0.6,0.647727273,20
645,98,23,0.421,0.432,312,313,302,43146,1382,0.42925,297.75,18551,747,0.434,310.5,901,0.432,295.5,1060,47.66666667,24.85448196,57.05882353,2.274052478,0.27,0.85,0.792147806,21
646,100,16,0.417,0.42925,312,314,308,46274,1519,0.43475,321.75,27682,1018,0.42875,310.5,850,0.4305,318,1180,69.5,20.92074592,53.33333333,3.341584158,0.36,0.76,0.642523364,19
647,100,66,0.417,0.423,312,312,298,44208,1608,0.42525,304.75,23690,980,0.42275,296.5,751,0.422,286.5,1316,68.16666667,27.34693878,53.59116022,2.89017341,0.38,0.6,0.557177616,22
648,102,19,0.417,0.42525,312,314,308,47245,1535,0.4185,311.25,24611,984,0.419,304.5,814,0.419,301.5,998,51.66666667,35.36299766,60.98901099,2.524630542,0.31,0.71,0.623287671,22
649,98,32,0.425,0.46625,312,312,315,50139,1561,0.467,314.25,23904,910,0.46525,316.5,838,0.467,304,1152,35.83333333,47.32662785,60.52631579,1.797752809,0.48,0.65,0.667396061,25
650,98,121,0.421,0.432,312,312,314,51747,1549,0.43525,312.75,26510,872,0.433,315.75,964,0.443,317.5,1113,56.25,32.49266862,49.7005988,2.857142857,0.5,0.22,0.824601367,21
651,98,25,0.421,0.424,313,315,306,42278,1433,0.424,307.25,19901,854,0.426,307.5,709,0.431,304,1046,61.68333333,37.33955659,68.13186813,2.923976608,0.27,0.69,0.700471698,22
652,88,17,0.429,0.44425,311,318,314,50548,1496,0.4435,311.75,24853,864,0.4465,315.25,772,0.4475,313,1330,47.5,26.15384615,54.54545455,3.281334051,0.46,0.91,0.74715262,20
653,90,95,0.421,0.42675,311,311,296,42970,1354,0.4245,294.25,19676,770,0.427,301,691,0.4275,287.5,1040,52.5,31.88073394,56.81818182,2.099580084,0.49,0.8,0.555288462,19
1 Batch Speed BatchQty Para1Tgt Para1 Para2Tgt Para2 Para3 Para4 Para5 Para6 Para7 Para8 Para9 Para10 Para11 Para12 Para13 Para14 Para15 Para16 Para17 Para18 Para19 Para20 Para21 Para22 Para23
2 1 84 26 0.429 0.43025 317 324 314 49512 1759 0.42775 308.75 21557 810 0.4275 309 840 0.425 315.5 1564 75 25.52325581 55.42857143 4.074505239 0.26 0.62 0.588235294 23
3 2 100 26 0.421 0.433 317 319 400 47101 1746 0.43375 306.75 20512 824 0.4305 309 756 0.431 305.5 784 64.5 31.6 59.34065934 2.097505669 0.34 0.77 0.839907193 22
4 3 102 34 0.417 0.4285 317 323 316 60023 1482 0.428 311.75 24933 765 0.4325 319.75 863 0.4375 330.5 1166 76.3 27.47068677 44.27083333 2.888503755 0.33 0.78 0.681710214 24
5 4 96 21 0.421 0.43775 316 322 332 55428 1857 0.43925 322.75 24997 933 0.4375 321.5 780 0.4395 319.5 1362 71.58333333 26.38966873 55.55555556 2.392344498 0.35 0.63 0.65437788 22
6 5 94 23 0.421 0.41725 317 321 313 46442 1844 0.4185 312.5 20850 686 0.42175 305.75 791 0.4245 323.5 1334 60.15 28.84500299 47.31182796 2.951191827 0.23 0.66 0.722090261 22
7 6 98 97 0.425 0.44075 317 320 312 45539 1584 0.43875 309.25 20866 1400 0.445 311.25 684 0.445 314.5 868 55.16666667 36.03603604 68.92655367 2.37700387 0.31 0.78 0.702031603 20
8 7 98 43 0.421 0.42275 317 320 314 51492 1689 0.42625 311.75 20352 864 0.427 317.75 912 0.43 319.5 886 63.5 25.54285714 50.81081081 2.36653825 0.32 0.55 0.769931663 20
9 8 94 25 0.425 0.43175 317 321 310 47661 1782 0.428 301 21991 858 0.4325 307.75 812 0.435 299 984 61.33333333 47.98619102 62.90322581 1.81200453 0.44 0.52 0.687943262 20
10 9 102 65 0.427 0.44225 317 321 316 70638 1572 0.44 304.25 20352 252 0.446 319.5 901 0.441 319.5 1082 64.83333333 33.22014714 56.98924731 1.672433679 0.34 0.6 0.664444444 20
11 10 94 15 0.421 0.42875 317 321 304 45944 1377 0.4335 339.75 21059 255 0.4295 308 677 0.425 289 945 59.5 29.93555946 45.25139665 1.952662722 0.28 0.59 0.712230216 20
12 11 98 40 0.421 0.43925 317 325 330 56955 1848 0.43675 330.25 26300 968 0.4415 336.25 856 0.435 315.5 945 56.56666667 37.69363167 54.05405405 3.058438012 0.25 0.76 0.600431965 20
13 12 104 35 0.417 0.4245 317 320 312 37616 1689 0.431 314 20496 473 0.431 314 854 0.434 318.5 1127 52.16666667 32.51318102 56.7251462 1.87820148 0.29 0.77 0.811320755 20
14 13 95 46 0.421 0.43175 317 320 310 47953 1528 0.4325 321.25 23470 840 0.43125 318 763 0.429 305.5 1362 66.98333333 29.3202765 53.47593583 1.962983735 0.27 0.58 0.637813212 21
15 14 65 83 0.427 0.4295 317 320 324 51891 1913 0.43025 331.75 24162 1034 0.4305 326.5 947 0.4335 316.5 1554 87 23.18757192 43.40659341 2.306425041 0.25 0.73 0.583138173 20
16 15 98 23 0.425 0.43025 3178 323 304 42608 1648 0.43125 306 21638 784 0.431 305.5 978 0.4295 298.5 1194 64 29.19075145 56.66666667 2.628571429 0.5 0.75 0.787185355 20
17 16 94 40 0.425 0.44275 317 321 312 60625 1470 0.44425 316 21107 796 0.445 320.75 870 0.443 320 1533 71.66666667 36.2400906 60.42780749 2.155172414 0.31 0.86 0.767184035 22
18 17 80 36 0.427 0.4275 317 321 296 42359 1398 0.41975 295.5 16563 746 0.42525 303.75 814 0.419 306.5 1200 81.5 25.40869565 53.21637427 2.75175644 0.36 0.73 0.58411215 20
19 18 102 58 0.421 0.43925 311 320 310 46554 1452 0.43875 307.25 22554 1245 0.43875 310 768 0.439 304 772 55.73333333 37.79036827 61.08108108 2.559821925 0.36 0.91 0.600896861 20
20 19 102 29 0.421 0.44575 315 319 318 49564 1377 0.4445 315 22634 728 0.446 321.25 680 0.4415 314.5 861 59.68333333 42.80022766 74.28571429 0.576036866 0.32 0.85 0.915367483 19
21 20 104 68 0.421 0.4425 317 322 305 47824 1433 0.4405 318.5 21123 870 0.4395 317 770 0.4375 304 1120 53.5 45.70637119 71.18644068 1.840490798 0.36 0.71 0.856512141 19
22 21 94 119 0.421 0.43 313 319 303 48516 1573 0.4315 305.5 23422 842 0.43175 308 872 0.428 298.5 1232 75.95 36.45348837 61.32596685 1.881246326 0.42 0.92 0.656612529 20
23 22 92 56 0.425 0.42675 317 320 308 75703 1349 0.42825 306 20288 654 0.4255 309.5 690 0.427 307 1400 69.83333333 38.59020311 53.84615385 1.366742597 0.4 0.71 0.735981308 20
24 23 75 40 0.433 0.439 314 321 318 53064 1732 0.43775 314 24708 1003 0.4375 316 768 0.4365 317.5 1536 92.66666667 26.65897288 53.72340426 1.022604952 0.39 0.76 0.6367713 22
25 24 98 32 0.421 0.4215 317 324 312 51152 1578 0.42375 304 20818 740 0.421 303.25 704 0.427 307 1480 53.96666667 29.01734104 48.8372093 2.949681897 0.43 0.62 0.866995074 19
26 25 98 50 0.421 0.42675 317 318 311 45172 1507 0.428 314.5 21091 821 0.42675 310.5 845 0.4325 325 1516 81 24.85448196 43.85026738 2.362204724 0.38 0.74 0.651658768 20
27 26 100 60 0.421 0.4275 317 320 308 49898 1628 0.425 297.5 20512 620 0.42325 302.5 616 0.4215 297.5 1575 57.33333333 32.42320819 66.11111111 1.922020868 0.31 0.77 0.634844869 19
28 27 98 40 0.421 0.43825 317 321 315 43420 1440 0.439 315.25 24596 200 0.4395 306.25 733 0.442 303 1550 65.16666667 24.29313329 41.30434783 2.223489168 0.37 0.54 0.638826185 18
29 28 102 57 0.421 0.4575 317 326 318 49625 1482 0.46125 318.5 23615 729 0.46025 316.5 660 0.4475 316 1026 45 36.76222597 56.98324022 1.038661281 0.27 0.58 0.417607223 22
30 29 102 35 0.417 0.427 317 323 315 48163 1512 0.4315 314.25 21975 700 0.42775 314.25 856 0.4385 319 1190 63.2 34.61084906 54.3956044 2.795208214 0.21 0.89 0.793911007 19
31 30 98 52 0.421 0.431 317 322 309 46619 1578 0.43 310 20560 870 0.4305 308.5 886 0.4325 311 1278 68.83333333 35.57199772 56.75675676 1.428571429 0.37 0.76 0.678321678 18
32 31 96 47 0.4213 0.43125 317 323 310 48532 1559 0.428 305.75 17956 595 0.42975 303.5 802 0.43 303.5 910 65.7 39.87268519 58.98876404 1.474758934 0.24 0.62 0.687793427 18
33 32 96 55 0.425 0.443 317 321 320 53965 1979 0.44075 316.25 23390 943 0.44 314 828 0.4405 310.5 1074 82.5 28.96983495 51.06382979 2.285714286 0.17 0.6 0.799097065 20
34 33 100 27 0.421 0.42975 317 323 319 49753 1755 0.42775 318.5 21959 929 0.4305 321.75 864 0.429 312.5 724 76.16666667 29.70930233 50.28901734 2.12514758 0.21 0.72 0.622119816 19
35 34 90 34 0.425 0.4305 318 320 302 48741 1610 0.42825 305.5 22345 831 0.43025 298.25 758 0.436 307 1298 76.66666667 29.08366534 48.92473118 1.386577926 0.3 0.61 0.788863109 20
36 35 104 100 0.421 0.44325 317 317 326 54110 1878 0.443 310.25 24869 936 0.44125 318 877 0.434 301 1102 70.16666667 33.90804598 60.81871345 2.151823072 0.1 0.6 0.634259259 21
37 36 90 37 0.421 0.45425 317 324 320 66539 1580 0.44775 329.25 24885 952 0.452 322.5 819 0.452 314.5 959 76.33333333 25.44444444 53.26086957 1.366742597 0.3 0.75 0.72967033 21
38 37 80 37 0.433 0.4405 317 320 318 49898 1792 0.4375 304 22988 961 0.439 315.25 1153 0.4425 316.5 1148 77 26.88652879 51.95530726 3.23699422 0.24 0.48 0.763157895 22
39 38 105 46 0.417 0.4345 317 322 306 44963 1223 0.43675 315.75 23358 742 0.437 305 768 0.443 303 1614 60 40.35693725 56.81818182 2.53776435 0.18 0.54 0.746067416 23
40 39 90 27 0.421 0.4385 317 327 317 47454 1738 0.428 311.5 19098 794 0.4305 313.75 803 0.433 307.5 1488 73.83333333 32.71245634 59.65909091 2.247191011 0.31 0.45 0.648837209 22
41 40 95 81 0.421 0.449 317 324 311 45574 1550 0.45325 326.75 23647 901 0.451 319.75 822 0.4475 320.5 1337 65.16666667 29.56326988 56.90607735 1.341531582 0.19 0.88 0.755707763 18
42 41 98 100 0.421 0.4485 317 326 303 47744 1498 0.449 311.5 21959 852 0.449 307.5 772 0.451 313.5 1208 52.5 32.48195447 56.49717514 2.868391451 0.37 0.74 0.747826087 19
43 42 104 60 0.419 0.4345 317 325 308 73536 1356 0.4335 307 19033 749 0.43075 310.75 758 0.4255 301.5 808 46.33333333 35.02331002 53.98773006 1.957186544 0.26 0.6 0.631929047 19
44 43 98 98 0.421 0.42775 317 320 308 47069 1442 0.43375 304.75 22618 962 0.42925 301 726 0.4325 306 1183 58.33333333 29.34232715 47.20812183 1.960784314 0.34 0.57 0.665882353 19
45 44 96 37 0.421 0.4385 317 322 308 48274 1530 0.4425 312.75 19837 662 0.43775 307.25 492 0.4375 305.5 1057 38.2 40.4935502 56.18556701 2.23838836 0.19 0.66 0.75 18
46 45 92 27 0.425 0.424 317 320 303 45622 1547 0.42425 298.5 17860 733 0.4245 313 919 0.428 296.5 1250 60.83333333 26.10695802 53.63128492 1.887840089 0.28 0.68 0.69047619 20
47 46 90 17 0.421 0.4345 317 322 314 49046 1416 0.43575 311.5 22763 707 0.43525 318 884 0.436 306.5 1302 67.56666667 23.93887946 42.32804233 2.727768685 0.35 0.7 0.638694639 20
48 47 75 27 0.433 0.451 317 324 324 55492 1601 0.449 320.5 26412 900 0.4515 330.75 892 0.4475 317 1284 51.5 27.73681225 54.59459459 2.067464635 0.3 0.61 0.651612903 20
49 48 101 78 0.421 0.43725 317 320 309 47582 1381 0.434 310.25 20576 898 0.43175 309.75 826 0.433 300 1036 53 33.40961098 60.79545455 2.504472272 0.21 0.68 0.835990888 19
50 49 80 30 0.421 0.43125 318 320 308 48387 1750 0.43525 312.5 22586 915 0.433 309.25 817 0.427 298.5 836 62.5 30.20172911 44.50549451 1.6 0.27 0.67 0.593967517 20
51 50 93 49 0.425 0.432 317 321 333 50200 1824 0.43275 339.75 21123 892 0.43125 323 1031 0.4335 310.5 875 55.16666667 32.25998807 55.0295858 1.343784994 0.34 0.67 0.759345794 20
52 51 102 44 0.421 0.4415 317 320 315 50477 1437 0.44325 308.25 20560 611 0.4425 317.5 578 0.4465 314 882 41.31666667 36.02484472 77.90697674 2.279202279 0.39 0.92 0.787671233 20
53 52 102 132 0.421 0.43725 317 322 313 46715 1255 0.4375 319 21606 621 0.43475 311.5 738 0.439 309.5 1127 55.18333333 31.49295775 48.40425532 1.048565121 0.37 0.7 0.692488263 19
54 53 92 55 0.421 0.427 317 320 306 48242 1894 0.428 315.25 20657 898 0.42575 308 910 0.4345 308.5 924 78.5 26.5793967 49.72375691 1.086956522 0.27 0.64 0.593220339 20
55 54 98 50 0.425 0.44275 317 320 316 53676 1517 0.438 311.75 17442 616 0.4435 310.25 768 0.4405 321 903 53.78333333 35.30415009 67.64705882 1.013333333 0.29 0.98 0.805429864 18
56 55 95 45 0.423 0.42875 317 321 306 44882 1528 0.43175 305 19802 850 0.43175 307.25 735 0.435 306.5 896 62.5 34.63079565 60.46511628 2.249134948 0.4 0.87 0.711627907 20
57 56 100 35 0.421 0.44 317 320 316 50493 1614 0.441 310 21862 817 0.4425 317.25 1004 0.447 311 1050 47.33333333 29.54285714 57.55813953 2.939375383 0.27 0.69 0.683146067 20
58 57 62 131 0.433 0.43725 317 319 312 55654 1617 0.4345 299.5 19419 770 0.434 312.5 854 0.438 300.5 959 70.5 26.98768197 48.04469274 1.920903955 0.35 0.45 0.655737705 22
59 58 90 30 0.421 0.43825 317 326 317 51200 1764 0.43925 306 22168 852 0.43775 309.75 779 0.444 312.5 1054 54 28.57142857 47.61904762 2.18579235 0.44 0.7 0.673423423 20
60 59 90 90 0.425 0.43925 317 322 320 54512 1797 0.44 314.25 23486 831 0.44075 322 957 0.4415 328.5 854 72.33333333 26.39734366 45.91836735 1.092896175 0.32 0.7 0.638248848 30
61 60 102 83 0.421 0.44525 317 321 306 44352 1393 0.44425 303 20384 656 0.448 305.75 702 0.45 314.5 840 49.88333333 35.34726143 75.88235294 1.455180442 0.39 0.69 0.754424779 19
62 61 93 64 0.421 0.42975 317 319 320 49705 1648 0.433 316.75 22136 864 0.428 316.75 959 0.4345 314.5 1141 57 29.43925234 51.74418605 2.383863081 0.37 0.7 0.613793103 21
63 62 94 81 0.421 0.43425 317 320 299 44480 1540 0.4365 298.25 19950 716 0.4335 297.5 779 0.4365 295 1326 63.5 31.66089965 64.02439024 1.690670006 0.32 0.83 0.595402299 20
64 63 80 22 0.429 0.44275 317 326 312 50718 1718 0.44175 318.25 25672 1029 0.44125 311.5 894 0.4365 304.5 1088 61.5 29.731243 59.30232558 1.826974745 0.45 0.91 0.635103926 23
65 64 85 45 0.421 0.451 3.7 319 326 48435 1587 0.44575 323.5 24772 691 0.45025 319.25 742 0.447 316 808 41.83333333 34.83398987 62.10526316 1.252041372 0.35 0.82 0.647186147 19
66 65 84 32 0.425 0.44125 317 324 324 53596 1904 0.44275 307 22441 840 0.4365 317 854 0.444 312.5 844 54.83333333 37.93103448 66.4893617 1.83639399 0.44 0.55 0.566513761 20
67 66 100 25 0.421 0.44975 318 323 308 48387 1362 0.44675 321.25 23084 721 0.4475 310.5 623 0.4505 312.5 581 37.43333333 48.1105471 91.62011173 2.633118783 0.4 0.7 0.714611872 20
68 67 85 36 0.429 0.438 317 320 312 46301 1323 0.4305 301.25 23502 793 0.43125 301.25 600 0.431 317.5 1218 51.66666667 30.23255814 45.25139665 3.994927077 0.43 0.44 0.592592593 21
69 68 86 30 0.425 0.44775 317 324 314 45890 1393 0.44525 312.25 22827 872 0.445 322.5 698 0.4455 312.5 595 49.33333333 43.92794887 69.61325967 1.662844037 0.46 0.83 0.824295011 22
70 69 97 37 0.417 0.43175 317 319 310 44850 1400 0.433325 312.75 25512 831 0.43025 310.5 761 0.4305 300 777 37.33333333 33.86524823 61.36363636 2.210884354 0.36 0.7 0.731207289 20
71 70 80 27 0.425 0.42225 317 320 307 42873 1220 0.42225 311.75 22023 679 0.42175 300.75 662 0.4215 303 1106 59.4 29.86935867 48.87640449 2.038369305 0.32 0.95 0.628841608 19
72 71 85 16 0.425 0.434 317 320 306 43388 1202 0.4385 314.75 25158 808 0.4365 315.25 632 0.439 320.5 917 49.83333333 39.7964952 74.55621302 2.140672783 0.37 0.88 0.971830986 23
73 72 94 99 0.421 0.43175 317 320 308 42391 1402 0.43075 301 19371 667 0.43275 303 595 0.4275 289.5 690 30 33.03886926 64.94252874 0.183823529 0.19 0.62 0.653579677 20
74 73 100 30 0.417 0.43775 317 321 302 47760 1503 0.43675 306 20818 730 0.43825 305.5 789 0.4395 314.5 945 36.16666667 33.44827586 65 1.838440111 0.26 0.51 0.879120879 18
75 74 100 42 0.425 0.43075 317 319 316 54399 1759 0.42725 305.25 21895 821 0.42925 316 896 0.437 324 777 36.83333333 24.39313203 53.93939394 2.320047591 0.35 0.22 0.534883721 18
76 75 98 32 0.418 0.4335 317 318 312 51360 1642 0.431 303 22474 821 0.43175 304.75 929 0.436 304.5 945 45.16666667 28.22120867 56.52173913 3.243540407 0.17 0.68 0.625882353 19
77 76 100 59 0.421 0.445 317 321 322 60484 1839 0.44325 314.5 22409 1029 0.44275 317.75 961 0.436 304.5 998 50.83333333 35.03981797 54.28571429 2.052597819 0.23 0.51 0.624719101 19
78 77 92 35 0.425 0.44375 317 324 320 55800 1610 0.44525 315 23936 654 0.4465 319 856 0.445 314 639 34.16666667 32.69983231 64.94252874 2.899408284 0.17 0.51 0.484162896 20
79 78 98 50 0.421 0.44875 317 320 325 53611 1479 0.4465 316.75 22152 609 0.4485 315.75 593 0.4495 307 784 38.05 43.83714445 64.21052632 2.378255946 0.3 0.56 0.671111111 20
80 79 98 56 0.421 0.45475 317 320 323 53756 1648 0.455 316 23486 768 0.45175 324.75 894 0.457 323.5 1295 49.16666667 33.15305571 62.01117318 1.825013419 0.16 0.43 0.666666667 18
81 80 102 129 0.417 0.449 317 322 324 53756 1440 0.45225 321.5 24226 786 0.451 311.5 562 0.4515 317 525 22.36666667 51.43165856 85.32608696 1.950659782 0.22 0.6 0.81797235 19
82 81 101 71 0.417 0.4375 317 319 304 48226 1629 0.4405 316 23310 854 0.44025 308.75 887 0.438 312.5 984 49.16666667 32.20823799 58.82352941 1.886792453 0.38 0.56 0.773033708 19
83 82 85 29 0.425 0.4385 317 319 314 49689 1535 0.44025 313.25 20496 777 0.43925 310.25 817 0.443 316.5 1190 65.16666667 25.55492316 60.22099448 2.272727273 0.38 0.62 0.801801802 20
84 83 102 102 0.418 0.437 317 322 308 42262 1307 0.441 307.25 24612 1025 0.4445 315.5 905 0.445 306.5 844 45.33333333 45.79855314 84.81675393 2.019650655 0.46 0.67 0.707207207 23
85 84 103 25 0.417 0.43675 317 320 317 44706 1351 0.4345 300.75 20802 695 0.44075 298.75 728 0.44 310.5 903 42.85 39.04542841 73.14285714 2.123672705 0.32 0.64 0.847161572 23
86 85 102 112 0.417 0.4375 317 321 302 43146 1526 0.442 308.75 20400 714 0.43825 297 712 0.44 292.5 822 49.33333333 32.37934905 56.04395604 2.366863905 0.23 0.46 0.657210402 20
87 86 100 42 0.417 0.442 317 321 324 53048 1519 0.4415 306.75 20239 662 0.436 312.75 642 0.443 313.5 784 37.45 33.6492891 58.92857143 1.720183486 0.31 0.8 0.681917211 20
88 87 98 43 0.421 0.43175 318 323 308 48740 1542 0.42925 311.25 21959 840 0.43225 313.5 940 0.431 298 1001 62.16666667 25.94093804 45.40540541 2.18579235 0.26 0.64 0.630136986 20
89 88 100 32 0.417 0.43925 317 323 314 48290 1430 0.4455 307.5 20480 656 0.44025 313.75 835 0.4515 324 1071 39.28333333 29.62750716 58.28571429 2.181400689 0.36 0.88 0.636155606 20
90 89 98 52 0.417 0.437 317 321 322 49110 1631 0.43175 309.5 21300 723 0.435 306 802 0.4335 312.5 826 47.83333333 31.31991051 56.61375661 1.142857143 0.34 0.79 0.881642512 20
91 90 88 71 0.421 0.4225 317 319 296 46233 1507 0.42125 300 18069 791 0.421 298 812 0.4265 299.5 1152 58.83333333 29.85865724 55.80110497 1.878453039 0.36 0.76 0.715294118 19
92 91 104 31 0.417 0.455 317 321 318 48580 1533 0.4525 312 23310 819 0.45325 313.25 738 0.4525 324.5 934 37.33333333 36.26373626 58.79120879 1.117318436 0.31 0.67 0.642857143 20
93 92 90 23 0.421 0.458 318 320 316 52052 1545 0.46025 315.5 25753 805 0.4595 320.5 763 0.462 318 652 37.16666667 43.72972973 90.39548023 2.985074627 0.36 0.68 0.815384615 23
94 93 95 67 0.417 0.4345 317 321 312 54126 1684 0.43025 299.5 22650 774 0.434 310 831 0.437 305 976 43.75 38.07890223 49.43820225 1.208981002 0.42 0.66 0.662037037 20
95 94 96 29 0.421 0.4425 317 320 316 52824 1671 0.4425 320.75 24933 940 0.442 323.75 920 0.445 323 1026 54.5 28.14982974 55.74712644 2.994011976 0.35 0.6 0.724373576 20
96 95 98 142 0.421 0.435 317 320 307 46120 1334 0.4365 310 19966 751 0.44 309.5 732 0.439 311.5 609 44.33333333 27.67402377 46.84210526 2.688172043 0.38 0.57 0.728110599 20
97 96 98 14 0.421 0.43975 317 322 312 50959 1482 0.43825 319.25 22184 679 0.43625 304 824 0.4405 311.5 777 44.85 38.04100228 64.40677966 3.306264501 0.47 0.57 0.661399549 20
98 97 80 10 0.429 0.4455 317 320 326 58096 1852 0.45 315.5 21590 656 0.4455 324 1001 0.4485 328.5 980 42 27.07209686 59.47368421 2.673796791 0.22 0.65 0.66962306 20
99 98 65 19 0.433 0.44775 317 321 318 50059 1454 0.449 321 21638 653 0.4465 308.25 719 0.444 310 938 54.45 22.68673356 52.97619048 2.485875706 0.34 0.64 0.539325843 21
100 99 104 29 0.425 0.44575 317 319 312 54046 1264 0.4425 315.75 24129 704 0.44575 317.75 744 0.449 327.5 1141 44 40.77555817 68.04733728 3.695408735 0.29 0.58 0.62962963 19
101 100 92 16 0.421 0.439 317 321 318 49898 1552 0.44325 315.5 22216 751 0.44075 317.25 924 0.4445 310.5 1078 51 28.90365449 61.05263158 2.173913043 0.32 0.84 0.753393665 20
102 101 75 26 0.429 0.44975 317 326 328 57244 1853 0.44925 323.25 26508 985 0.44675 323.5 929 0.446 320.5 1344 64.5 19.20903955 48.55491329 1.694915254 0.35 0.7 0.615044248 20
103 102 103 122 0.421 0.43325 317 318 303 45429 1407 0.42875 296 21300 866 0.442 300 639 0.4445 306 1022 47.33333333 35.86659377 79.76190476 2.839879154 0.28 0.62 0.587006961 21
104 103 80 97 0.429 0.443 317 321 312 47808 1703 0.4405 301.25 25882 1062 0.43875 315.25 789 0.4385 306.5 718 45.5 30.58823529 58.06451613 2.824858757 0.35 0.61 0.531322506 20
105 104 96 127 0.421 0.4445 317 320 313 48146 1656 0.45375 318.75 27216 1003 0.45075 312.5 779 0.45 302 766 40.33333333 35.32967033 65.43209877 1.807228916 0.32 0.62 0.981776765 22
106 105 90 30 0.421 0.4385 317 321 314 52518 1699 0.435 308.25 23004 788 0.4375 317.25 805 0.4335 305.5 861 47.35 39.18690006 56.61375661 2.310803004 0.47 0.65 0.648401826 21
107 106 94 30 0.421 0.4435 317 321 325 55267 1710 0.446 318 24354 998 0.445 314.75 756 0.451 322.5 819 45.66666667 24.87644152 56.52173913 2.310231023 0.37 0.56 0.875862069 20
108 107 98 72 0.421 0.44 317 323 307 47262 1298 0.44 311 21557 639 0.438 308.25 695 0.4405 304 522 39.56666667 26.04049494 58.75706215 2.151755379 0.45 0.67 0.803652968 20
109 108 88 32 0.421 0.42675 317 319 312 50396 1760 0.42625 312.75 23068 803 0.4245 310 903 0.422 304.5 1068 45 25.36873156 48.23529412 2.525832377 0.26 0.72 0.533333333 20
110 109 85 29 0.425 0.43425 317 315 310 49673 1614 0.43425 298.5 23036 845 0.43325 297.25 784 0.4335 291 1113 53.16666667 22.49544627 42.39130435 2.367941712 0.33 0.75 0.635730858 21
111 110 100 54 0.42419 0.439 317 322 316 47374 1652 0.43975 306.5 21702 847 0.4405 321.75 836 0.4635 319 892 36.66666667 35.63799888 58.69565217 1.663090129 0.43 0.56 0.653594771 21
112 111 94 77 0.417 0.43975 317 319 312 49223 1570 0.4385 315.5 19346 590 0.4385 313.75 818 0.443 311 966 49.83333333 33.86524823 59.28143713 2.361751152 0.18 0.71 0.690949227 20
113 112 92 18 0.421 0.44475 317 321 318 54480 1479 0.44025 310.25 20496 570 0.4435 308.75 716 0.4475 312 1162 38.4 27.32331664 48.33333333 3.076923077 0.22 0.56 0.805936073 21
114 113 88 46 0.421 0.437 317 321 312 45609 1465 0.4385 312 22586 819 0.43825 309 768 0.44 301 630 50.83333333 29.30153322 54.94505495 2.375565611 0.59 0.19 0.759637188 20
115 114 90 93 0.425 0.439 317 320 318 54560 1437 0.436 302.5 21236 625 0.4365 318.25 728 0.438 304.5 536 40.65 17.6536943 47.42857143 0.161290323 0.2 0.56 0.774941995 20
116 115 90 33 0.421 0.435 317 324 304 51280 1704 0.4335 303.25 21686 709 0.436 309.5 844 0.439 305 917 47.33333333 20.51282051 43.45238095 1.379310345 0.23 0.55 0.802352941 20
117 116 75 18 0.429 0.4445 317 322 311 52808 1727 0.44575 317.25 23374 681 0.445 311.5 968 0.4465 310 1194 55.65 20.01124227 40.95744681 1.902173913 0.13 0.53 0.665148064 20
118 117 82 82 0.427 0.436475 317 319 318 47583 1404 0.43875 314.25 22232 719 0.43825 315.5 604 0.4365 320 826 55.83333333 26.50115473 50.27624309 1.775147929 0.13 0.6 0.601830664 22
119 118 80 18 0.429 0.441 317 319 315 48918 1647 0.44025 311.5 24017 814 0.44325 318.75 919 0.4385 305.5 1306 58 25.7918552 54.64480874 1.725163593 0.27 0.6 0.665148064 21
120 119 70 25 0.429 0.4435 317 319 316 53113 1390 0.44475 305.25 20994 606 0.4425 309 653 0.441 315 1124 61.83333333 30.37330317 48.10810811 1.836969001 0.26 0.57 0.67114094 21
121 120 90 36 0.421 0.443 317 322 316 49062 1577 0.433576 305.75 20593 765 0.44125 306.25 737 0.439 304 1001 50 42.33870968 63.58381503 1.697045883 0.29 0.76 0.85077951 20
122 121 100 36 0.417 0.44925 317 322 320 51136 1547 0.444 309.5 23615 791 0.44575 317.5 698 0.882 616 630 37 29.79084228 65.69767442 3.03030303 0.35 0.63 0.749435666 20
123 122 103 86 0.417 0.4395 317 321 317 49110 1414 0.434 311.75 20994 649 0.434 319.25 597 0.867 586 483 39.51666667 43.06818182 65.90909091 2.477876106 0.35 0.59 0.654205607 20
124 123 104 34 0.421 0.436 317 324 316 53483 1521 0.44025 312.75 21638 579 0.438 312.5 607 0.44 306 700 35.6 27.13091922 54.14364641 0.634584876 0.25 0.43 0.775656325 20
125 124 98 26 0.417 0.43475 317 318 317 50557 1545 0.43625 312.5 24081 912 0.437 307.5 709 0.433 307.5 948 44.66666667 29.21348315 55.61497326 1.324854266 0.29 0.58 0.808219178 20
126 125 101 26 0.417 0.4305 317 320 312 46410 1608 0.438 305 23840 942 0.4325 303.75 796 0.438 298 802 40.83333333 29.9028016 59.21787709 2.5625 0.24 0.89 0.736238532 23
127 126 102 81 0.421 0.4395 317 320 315 50204 1701 0.4395 311.5 22088 836 0.44175 317.75 842 0.441 315 878 46.83333333 35.83945732 63.04347826 2.527472527 0.17 0.72 0.64037123 20
128 127 102 41 0.417 0.43775 317 323 312 44754 1362 0.43775 317.75 23325 940 0.4365 321.5 777 0.4415 312.5 700 39 33.97291196 61.29032258 2.177463255 0.31 0.77 0.814220183 20
129 128 106 104 0.421 0.438 317 321 304 46233 1398 0.43675 313.25 21493 793 0.429 304.75 719 0.437 302 976 36.83333333 32.81875357 66.66666667 1.802325581 0.28 0.75 0.77383592 20
130 129 104 19 0.417 0.43975 317 321 312 44095 1379 0.43925 301.25 18808 663 0.43875 301.25 740 0.444 300.5 480 36 32.84313725 56.61375661 2.389803505 0.29 0.72 0.897196262 18
131 130 92 1 0.419 0.42375 317 319 305 45799 1500 0.41775 307.5 18808 684 0.42225 299 782 0.423 299.5 987 63.83333333 29.78723404 65.19337017 2.154195011 0.32 0.83 0.658653846 18
132 131 96 42 0.419 0.45375 317 321 328 55317 1510 0.4575 323.25 23454 650 0.45475 322.25 831 0.4535 320 1071 51.83333333 38.92876864 52.12765957 1.479915433 0.37 0.92 0.543290043 18
133 132 100 45 0.417 0.433 317 322 312 46426 1349 0.43225 302.25 19162 625 0.4325 308 660 0.4335 314 648 31.9 47.95127353 59.45945946 1.808634772 0.3 0.88 0.833723653 18
134 133 104 23 0.417 0.441 317 321 326 53917 1829 0.44375 315 21991 719 0.43825 304 751 0.4435 305.5 822 49.5 40.7530454 65.95744681 0.818777293 0.39 0.67 0.712962963 18
135 134 100 12 0.417 0.43125 317 320 310 53097 1410 0.42375 307.25 20592 614 0.428 306.5 592 0.433 305 882 36.43333333 39.22241281 66.47727273 1.567944251 0.27 0.59 0.710648148 18
136 135 95 4 0.421 0.4365 317 324 316 48532 1484 0.43625 312 23181 744 0.433 306.25 640 0.4325 301.5 707 50.16666667 39.36170213 61.95652174 1.573033708 0.34 0.5 0.82983683 18
137 136 80 34 0.417 0.41475 317 320 307 46024 1489 0.41075 308.25 17346 536 0.41425 303 749 0.4175 301 696 77.51666667 23.65721183 46.77419355 1.806588735 0.22 0.53 0.658767773 20
138 137 90 26 0.421 0.4315 317 320 302 44513 1486 0.42975 307.25 22714 796 0.43075 307 779 0.431 311 900 50.5 26.65505226 60 2.51903925 0.23 0.5 0.745283019 20
139 138 100 112 0.421 0.43575 317 321 314 49942 1664 0.4355 312.5 23647 924 0.43625 311 791 0.432 298.5 830 51.83333333 32.56855064 60.21505376 2.047592695 0.3 0.67 0.755760369 19
140 139 98 118 0.419 0.42475 317 319 312 50284 1545 0.42325 311.75 20641 714 0.42525 307 712 0.4285 310.5 746 54.16666667 29.50437318 62.20930233 2.131336406 0.43 0.54 0.624708625 18
141 140 100 19 0.421 0.436 317 324 300 44384 1339 0.44325 308 21943 803 0.43825 300.75 712 0.446 310 798 41.66666667 42.65815438 28.40236686 1.576182137 0.37 0.56 0.811494253 19
142 141 97 31 0.417 0.43875 317 319 315 51763 1437 0.433 309 20528 598 0.44 309.5 800 0.441 311 938 51 30.01715266 64.44444444 2.356321839 0.29 0.72 0.597727273 20
143 142 102 27 0.419 0.45425 317 323 320 52711 1393 0.4495 321.5 23744 662 0.4535 315.75 732 0.46 311.5 570 31.11666667 43.56545961 69.18604651 1.835405565 0.39 0.54 0.721238938 19
144 143 98 23 0.421 0.44675 317 323 316 53370 1802 0.44275 314.75 22730 858 0.4425 316 849 0.444 322.5 1354 54.16666667 30.72118115 51.26903553 2.497398543 0.29 0.48 0.64380531 18
145 144 102 95 0.417 0.4325 317 322 306 48275 1578 0.4285 307.75 20496 642 0.42975 308 850 0.4275 300 1015 58.26666667 31.10102157 59.5505618 1.861702128 0.4 0.65 0.687203791 19
146 145 102 21 0.417 0.4415 317 322 315 45429 1407 0.43675 311.75 19805 662 0.438 311.25 733 0.4435 299 798 53.5 38.11936937 45.40540541 1.565120179 0.35 0.68 0.703196347 20
147 146 92 53 0.429 0.439 317 322 309 49705 1554 0.44075 305.25 21766 710 0.44125 305 796 0.443 299 1081 45.5 29.43502825 58.23529412 1.776960784 0.36 0.7 0.636986301 20
148 147 101 84 0.419 0.44175 317 318 315 47703 1680 0.4465 305.75 21204 824 0.4385 313 735 0.442 318.5 808 54.83333333 30.95505618 48.82352941 2.926525529 0.24 0.65 0.591836735 20
149 148 100 23 0.417 0.42375 317 321 300 40944 1363 0.425 300.75 18840 688 0.4235 299.25 705 0.4185 292.5 749 36 35.85858586 63.48314607 2.209302326 0.26 0.73 0.909722222 20
150 149 92 35 0.421 0.43 317 321 311 44738 1328 0.42975 301.5 21686 684 0.43 308.75 760 0.436 306.5 1071 53.28333333 32.33256351 50.81081081 2.570233114 0.31 0.67 0.76744186 20
151 150 95 150 0.421 0.44825 317 323 320 48741 1550 0.43825 308.5 21991 704 0.4435 312.5 633 0.445 325 816 44.33333333 28.83295195 63.31360947 2.005730659 0.33 0.52 0.610599078 20
152 151 100 141 0.421 0.4385 317 322 312 46940 1466 0.441 312 21798 728 0.4375 309 746 0.438 307 570 36.16666667 30.90705487 55.4973822 1.621621622 0.41 0.75 0.931034483 20
153 152 90 22 0.425 0.4455 317 321 312 55176 1713 0.44225 313.25 21187 766 0.44525 311.75 854 0.4425 308.5 952 46.33333333 27.50434279 54.11764706 2.362669817 0.27 0.76 0.717391304 19
154 153 88 70 0.421 0.433 317 321 301 39594 1129 0.42925 306 20303 749 0.43225 303 718 0.436 309.5 896 52.33333333 35.3314121 61.62162162 0.911039657 0.32 0.72 0.702576112 18
155 154 92 35 0.421 0.437329 317 320 313 49416 1335 0.4345 311.25 22666 714 0.43425 313.25 744 0.436 309.5 732 40.21666667 37.16452742 58.24175824 1.893287435 0.32 0.8 0.717539863 19
156 155 88 14 0.425 0.44275 317 320 315 48258 1421 0.43975 318.75 28984 872 0.4425 319.25 760 0.4465 313.5 707 49.23333333 31.90883191 50.88757396 2.092760181 0.2 0.51 0.681093394 20
157 156 92 13 0.421 0.43475 317 319 308 45984 1218 0.436 319.25 22409 532 0.43725 303 499 0.4315 312.5 718 41 39.04542841 76.60818713 2.074927954 0.28 0.56 0.745920746 18
158 157 92 121 0.425 0.42925 317 320 306 50300 1404 0.43575 304.75 21702 712 0.43075 304 654 0.441 287 513 37.5 33.16239316 68.86227545 1.993957704 0.25 0.66 0.945080092 21
159 158 100 124 0.417 0.44225 317 320 323 54930 1704 0.44475 316.5 23036 842 0.44925 318.75 634 0.442 318 527 25.66666667 29.17831191 59.44444444 2.253032929 0.3 0.6 0.918367347 18
160 159 98 92 0.417 0.44175 317 322 315 46024 1554 0.439 313.5 22220 742 0.44525 319.75 704 0.447 310 679 36.85 47.45075319 70.45454545 1.942926533 0.38 0.52 0.668903803 19
161 160 98 74 0.421 0.426 321 320 309 47599 1309 0.4255 299.75 20255 681 0.43175 301.5 598 0.4235 298 672 53.46666667 38.0952381 88.34355828 2.038439138 0.3 0.89 0.832183908 19
162 161 94 110 0.421 0.43 317 321 310 45976 1158 0.4285 297.5 22554 760 0.43575 305.5 677 0.428 290 518 38.01666667 22.78835386 47.02702703 4.134078212 0.36 0.53 0.629186603 20
163 162 85 77 0.421 0.42775 317 321 307 44095 1390 0.428 310.5 20657 646 0.4275 309.5 747 0.4275 310 914 59.43333333 47.9006505 76.43678161 0.976450316 0.24 0.58 0.693023256 20
164 163 100 45 0.417 0.4435 317 324 314 47085 1358 0.4465 327.75 24788 912 0.44675 322 900 0.4475 335 819 54.33333333 34.48464912 55.02392344 2.00927357 0.3 1.07 0.719457014 20
165 164 96 15 0.417 0.43375 317 320 310 47438 1729 0.429 305.25 20368 807 0.43575 300.5 662 0.4355 314.5 774 55 29.9522673 70.58823529 2.558139535 0.41 0.84 0.940229885 21
166 165 100 20 0.417 0.43125 317 320 304 43002 1507 0.4325 307.75 21396 892 0.433 309 700 0.444 327 644 40.16666667 27.68691589 48.82352941 2.915951973 0.42 0.75 0.630071599 20
167 166 80 14 0.425 0.425 317 319 293 44223 1110 0.42525 294.75 19162 502 0.42625 301 665 0.4255 309.5 1252 53.33333333 33.67816092 61.45251397 1.712707182 0.25 0.65 0.745762712 20
168 167 90 137 0.425 0.44325 317 322 314 52776 1498 0.4425 298 22698 668 0.4425 314.75 592 0.4515 312.5 504 35.23333333 38.66513234 67.93478261 2.614758861 0.4 0.76 0.733634312 20
169 168 90 98 0.421 0.43775 317 318 320 50911 1552 0.438 308.75 27264 858 0.4365 316.25 639 0.4385 302 504 35.21666667 34.39093484 55.02645503 2.293064877 0.35 0.62 0.81498829 24
170 169 88 96 0.421 0.4375 317 321 316 56360 1465 0.43525 309.75 20962 616 0.439 312.75 887 0.4415 309.5 724 41.28333333 29.79683973 57.60869565 2.190580504 0.2 0.71 0.75 18
171 170 88 96 0.421 0.43275 317 320 319 56328 1500 0.434 310.75 22425 686 0.431 312.5 730 0.4335 321.5 872 41.4 27.40440324 51.61290323 2.159468439 0.27 0.64 0.712264151 18
172 171 92 73 0.421 0.4265 317 320 311 45300 1816 0.4225 309.75 20384 789 0.426 307.5 754 0.424 314 945 66.16666667 26.60388464 54.11764706 1.471453796 0.35 0.72 0.778823529 19
173 172 100 113 0.425 0.44275 317 325 313 45976 1265 0.448 313.25 22522 761 0.4425 315.75 525 0.44 316.5 665 38.16666667 40.90909091 71.26436782 1.68444694 0.25 0.75 0.902222222 18
174 173 101 48 0.421 0.43925 317 321 320 49712 1640 0.4335 318 23695 718 0.4375 307.25 693 0.435 296.5 763 39.36666667 30.01138952 65.14285714 2.479338843 0.23 0.72 0.826879271 18
175 174 103 74 0.421 0.44675 317 319 315 47969 1742 0.44675 315.5 24354 863 0.44325 316 864 0.4425 312 931 40.66666667 36.53738055 58.24175824 4.021289178 0.33 0.57 0.683257919 20
176 175 92 12 0.425 0.4455 317 323 323 52984 1824 0.4455 314 24194 910 0.4495 312.5 800 0.4485 302 846 41.65 36.54178674 55.30726257 2.34375 0.36 0.6 0.68220339 20
177 176 100 47 0.417 0.44275 317 321 322 57936 1944 0.43975 315.75 21991 807 0.441 318.5 744 0.4395 317.5 784 40.16666667 30.07432819 58.42696629 2.535832415 0.28 0.57 0.727477477 20
178 177 88 59 0.425 0.43025 317 320 305 46265 1580 0.432 306.5 20271 642 0.4315 303.75 821 0.4325 309 1211 58.66666667 32.03214696 50.81967213 2.015411974 0.3 0.6 0.848623853 19
179 178 104 66 0.417 0.43775 317 323 315 49305 1680 0.4375 322 21895 744 0.43975 311 724 0.434 305 780 42.83333333 37.00234192 59.52380952 1.44092219 0.24 0.9 0.85778781 18
180 179 102 33 0.421 0.4355 317 319 320 54270 1647 0.43475 317.25 23342 618 0.44215 319.5 676 0.441 332.5 836 53.5 32.25083987 59.21787709 2.111111111 0.26 0.82 0.613839286 17
181 180 100 23 0.417 0.43075 317 319 313 49512 1646 0.4355 318.25 24354 676 0.431 311.5 861 0.4275 300 1092 45 38.52889667 59.3220339 2.485549133 0.25 0.86 0.661214953 18
182 181 104 81 0.417 0.44075 317 319 308 49608 1500 0.4315 297.75 19680 712 0.43775 305.25 665 0.4405 295.5 570 29.83333333 35.39358601 65.49707602 2.29226361 0.31 0.66 0.722222222 20
183 182 103 153 0.417 0.43025 317 321 302 45831 1433 0.4285 299 20818 730 0.42775 304 691 0.428 298 714 42.66666667 36.67439166 70.83333333 2.202380952 0.27 0.65 0.917620137 20
184 183 98 30 0.421 0.43375 317 319 308 48435 1638 0.43075 304.25 23752 639 0.43225 304.25 672 0.4385 313.5 1113 41 40.13040901 51.14942529 2.173913043 0.39 0.63 0.648275862 21
185 184 102 16 0.417 0.432 317 323 312 51152 1505 0.43 308 22296 744 0.42775 304 728 0.43 302 518 36.23333333 32.12589074 71.42857143 2.58780037 0.21 0.87 0.816091954 20
186 185 102 21 0.417 0.44175 327 322 318 51827 1456 0.44 309 25286 861 0.44425 322.25 550 0.447 322.5 486 37.98333333 35.06044905 56.52173913 2.121390689 0.31 0.91 0.764044944 20
187 186 102 153 0.417 0.4365 317 323 320 52647 1818 0.43225 315 22377 794 0.4375 314.75 768 0.442 319 651 46 29.63604853 58.52272727 2.024539877 0.29 0.73 0.754022989 19
188 187 102 24 0.417 0.437 317 322 317 48886 1533 0.44 310.75 24688 872 0.44025 315 666 0.45 312.5 479 44.83333333 33.29564726 54.4973545 2.248454188 0.35 0.72 0.95045045 19
189 188 105 150 0.417 0.44425 317 322 316 50782 1535 0.437 310.75 21091 724 0.44425 318 649 0.4415 323.5 514 31.33333333 42.09039548 71.42857143 1.594802126 0.24 0.84 NULL 20
190 189 101 32 0.421 0.44225 317 319 304 50911 1323 0.4395 306.25 21525 537 0.441 308.25 690 0.4445 306.5 805 36 19.87435751 39.20454545 2.005730659 0.35 0.68 0.657407407 20
191 190 102 63 0.417 0.441 317 321 308 50252 1542 0.4405 308.5 23502 796 0.44225 306 623 0.4475 316.5 581 32.83333333 34.93571828 62.23404255 2.370689655 0.36 0.81 0.700460829 21
192 191 104 17 0.419 0.42725 317 319 307 48757 1387 0.425 315.5 22940 606 0.42875 308.25 656 0.4295 312 640 37.83333333 39.19860627 50.27027027 2.5 0.17 0.82 0.645539906 18
193 192 105 94 0.421 0.43125 317 320 317 49480 1610 0.4365 309.5 21364 733 0.431 314.5 602 0.437 308 534 31.28333333 42.85714286 60.54054054 2.347161572 0.35 0.67 0.889952153 20
194 193 102 40 0.421 0.43425 317 323 325 52422 1629 0.43425 309.75 19676 565 0.43325 326 775 0.439 318 784 34.36666667 42.41573034 68.7150838 2.586206897 0.2 0.68 0.678082192 20
195 194 102 98 0.417 0.42775 317 321 306 45204 1367 0.42875 303.25 19226 653 0.4255 300.5 663 0.427 310 623 37.33333333 29.31844888 59.52380952 1.649746193 0.26 0.68 0.788235294 20
196 195 100 61 0.421 0.43325 317 322 318 50766 1558 0.431 310 21782 793 0.434 308.25 788 0.4365 302.5 1054 56.33333333 27.7998863 53.63128492 2.575587906 0.21 0.67 0.698823529 19
197 196 100 111 0.417 0.43575 317 322 311 48596 1500 0.436 301 19130 744 0.43875 299 756 0.442 307.5 1200 46.33333333 41.10465116 59.23913043 1.851851852 0.22 0.6 0.659090909 18
198 197 102 10 0.421 0.43525 317 320 329 56344 1890 0.43525 324 25479 914 0.43625 327.5 793 0.434 310.5 802 58.66666667 28.61789514 50 3.128621089 0.41 0.81 0.725118483 20
199 198 96 20 0.421 0.43725 317 319 323 54496 1550 0.4425 320.25 27682 831 0.4395 320.25 789 0.44465 317.5 882 44 30.05714286 52.84090909 3.428571429 0.25 0.66 0.570114943 22
200 199 100 142 0.421 0.4355 317 323 312 38244 1127 0.43875 317.5 22345 858 0.436 316.5 768 0.438 310 973 51.66666667 29.44162437 54.83870968 1.065989848 0.44 0.55 0.747706422 20
201 200 100 87 0.421 0.431 317 321 304 46217 1325 0.4315 294 18840 690 0.43075 307.25 780 0.4385 310 1186 49.83333333 33.14285714 61.875 1.483171706 0.35 0.92 0.777777778 19
202 201 100 44 0.421 0.435 318 321 314 56280 1759 0.434 320 23647 814 0.43575 303.5 705 0.439 324 1348 51.61666667 33.18129989 50.84745763 2.68378063 0.32 0.82 0.623501199 20
203 202 102 16 0.417 0.44675 317 322 320 51618 1302 0.43925 327.75 21621 602 0.443 313.75 537 0.442 324 476 28.15 47.21906924 58.52272727 1.860202931 0.43 0.78 0.755196305 21
204 203 95 2 0.417 0.42825 317 323 310 46876 1561 0.425 317.75 22345 798 0.43025 317.75 576 0.43 318.5 766 47.61666667 30.57996485 52.74725275 0.8 0.31 0.6 0.623556582 21
205 204 98 6 0.421 0.442 317 323 318 50380 1194 0.44325 318.75 23663 709 0.4395 315 705 0.4465 315 1057 57 32.43553009 42.39130435 0.275330396 0.27 0.41 0.769574944 21
206 205 70 1 0.433 0.43725 317 319 309 47937 1447 0.43825 306.25 26099 950 0.437 309.25 694 0.4345 327 651 54.26666667 32.58362168 44.44444444 2.540937324 0.3 0.7 0.493181818 21
207 206 104 32 0.415 0.439 317 321 314 51088 1659 0.4365 318.5 23567 793 0.4415 325 800 0.4445 317.5 998 49.61666667 37.74985722 48.38709677 3.07424594 0.3 0.5 0.703539823 21
208 207 95 42 0.421 0.43925 317 324 314 50557 1794 0.439 311.5 25029 906 0.434 319 821 0.435 311.5 1102 73.33333333 25.17281106 48.31460674 2.708933718 0.31 0.64 0.798657718 21
209 208 84 35 0.425 0.4255 317 320 305 46924 1407 0.42925 306 21268 663 0.4235 305.75 822 0.427 311.5 906 66.15 26.60388464 47.25274725 2.464985994 0.34 0.63 0.637647059 20
210 209 100 64 0.417 0.43525 317 423 316 46313 1384 0.4345 322.5 20528 891 0.4345 308.25 704 0.432 315 990 48.66666667 37.06253586 62.85714286 2.301369863 0.24 0.62 0.523041475 18
211 210 102 27 0.419 0.4335 317 319 317 54372 1686 0.43225 303.5 23164 672 0.43275 324 684 0.4335 310 987 58.16666667 31.875 57.37704918 3.337236534 0.32 0.89 0.823943662 22
212 211 99 18 0.421 0.44275 317 323 318 60508 1626 0.4395 315.75 23358 693 0.444 317.75 763 0.45 342 914 38.7 35.11576626 53.73134328 3.396809058 0.37 0.73 0.782909931 20
213 212 100 32 0.421 0.432 317 324 314 49978 1608 0.43375 312 22246 828 0.4365 315.25 1012 0.442 321.5 1015 63.33333333 27.23138147 51.47928994 2.716763006 0.4 0.74 0.661137441 20
214 213 100 46 0.417 0.43175 317 323 318 45044 1508 0.427 314 20576 719 0.4305 318.75 728 0.428 302.5 970 51.11666667 40.11560694 52.30769231 2.132312739 0.43 0.79 0.68321513 20
215 214 98 27 0.421 0.433 317 322 311 48837 1656 0.4355 319 21171 761 0.436 316 822 0.4375 317 1208 57 37.06015891 57.78894472 2.638664513 0.3 0.78 0.998842593 22
216 215 104 79 0.417 0.4355 317 320 310 47165 1540 0.438 314 22634 892 0.4365 309.25 746 0.444 325.5 1250 50.33333333 38.71693866 61.17021277 2.785838654 0.29 0.69 0.840546697 20
217 216 102 30 0.419 0.452 317 319 326 57630 1617 0.44675 328.25 28293 828 0.448 318.25 782 0.447 1800 931 51.33333333 42.56410256 46.44808743 0.171722954 0.22 0.5 0.737931034 21
218 217 102 50 0.421 0.44 317 319 344 61303 1864 0.438 314.25 25176 721 0.4445 328 840 0.4335 319 1130 59.83333333 24.66063348 48.63387978 3.723404255 0.24 0.79 0.660592255 20
219 218 102 64 0.421 0.4445 317 323 321 52952 1516 0.44725 327.75 22666 777 0.4435 316.75 791 0.444 319 994 41.66666667 34.92957746 52.17391304 2.866593164 0.15 0.62 0.745495495 20
220 219 100 37 0.421 0.4355 317 323 316 48966 1566 0.4305 315 18406 721 0.4325 316.75 754 0.43 313.5 984 61.83333333 27.49262537 54.03726708 2.327005511 0.23 0.65 0.84494382 20
221 220 105 30 0.417 0.43475 317 324 325 52727 1729 0.43575 323 23744 824 0.4325 311.75 737 0.436 310.5 861 45.01666667 35.68985177 51.12359551 3.18627451 0.27 1.51 0.853080569 20
222 221 103 47 0.417 0.4295 317 322 312 43548 1402 0.42675 308 19323 707 0.42925 305.75 714 0.436 319 1186 59.33333333 35.71844095 63.06818182 2.19017094 0.31 0.63 0.769784173 20
223 222 104 16 0.417 0.42875 317 321 301 45349 1577 0.429 307.75 20962 662 0.43425 321 735 0.437 312 896 44.7 34.20899008 33.33333333 2.827466821 0.35 0.78 0.773148148 21
224 223 104 92 0.421 0.4445 317 319 326 53129 1575 0.45025 324 26010 677 0.44725 324.5 676 0.4425 319 840 34 22.39641657 52.12121212 1.149425287 0.46 0.82 0.657471264 20
225 224 108 29 0.417 0.43225 317 319 324 54274 1564 0.43375 317.5 21396 628 0.4355 324.5 808 0.4405 328.5 1218 53.33333333 30.00573723 45.40540541 3.294797688 0.37 0.62 0.662068966 20
226 225 98 43 0.425 0.447 317 322 304 48339 1288 0.4475 312.25 20673 763 0.4465 310 670 0.4545 326 1253 35 34.54947485 54.54545455 1.767955801 0.45 0.88 0.733924612 19
227 226 104 38 0.417 0.43425 317 324 323 52100 1768 0.42825 307.75 20207 822 0.435 322 1040 0.433 313 1166 66.16666667 38.08724832 55.55555556 2.517162471 0.29 0.85 0.776978417 20
228 227 103 57 0.417 0.43025 317 321 315 49239 1950 0.4285 315.25 22474 901 0.4295 314.5 779 0.44 323.5 1054 41.55 32.21320973 49.45652174 2.549246813 0.38 0.62 0.694252874 21
229 228 109 41 0.416 0.438 317 320 306 47438 1530 0.43575 304.25 20440 782 0.44125 309 840 0.4395 307 1326 49.33333333 43.93939394 67.0212766 2.863559798 0.38 0.86 0.868965517 20
230 229 108 26 0.417 0.43375 317 323 306 48274 1398 0.43 308.25 23084 716 0.434 307.5 628 0.437 309 662 38.11666667 39.39220183 56.98324022 2.920560748 0.27 0.74 0.739030023 21
231 230 108 39 0.417 0.4445 317 321 320 48660 1608 0.445 321.5 21396 712 0.4425 320.25 668 0.437 317 654 37.45 28.66741321 58.38150289 3.00982801 0.28 0.55 0.862790698 20
232 231 102 35 0.421 0.433 317 319 320 50750 1587 0.43525 320.5 26573 788 0.43325 313.5 770 0.4365 320 1354 69.83333333 23.31969608 46.11111111 3.442340792 0.32 0.56 0.693548387 20
233 232 108 31 0.417 0.436 317 322 314 48602 1692 0.43025 310 21622 808 0.43575 311.5 826 0.4385 309 816 33.33333333 44.70655926 57.62711864 3.352601156 0.31 0.67 0.924137931 22
234 233 108 87 0.417 0.44825 317 323 313 49673 1377 0.44375 320.5 20512 623 0.4495 314.25 821 0.45 310 802 43.1 37.40661686 60.86956522 2.761550717 0.42 0.97 0.943262411 20
235 234 98 50 0.421 0.4305 317 323 312 46201 1432 0.42875 303.75 19387 618 0.4285 308.25 606 0.433 325.5 1092 52.18333333 23.9906378 40.33149171 2.390670554 0.39 0.86 0.796296296 20
236 235 106 19 0.417 0.43475 317 319 318 51272 1320 0.43525 307.25 20690 632 0.44275 317.25 723 0.4395 320 906 47.66666667 40.67121729 66.86046512 3.183962264 0.38 0.87 0.692307692 20
237 236 101 117 0.421 0.438 317 319 318 49110 1526 0.436 311.5 21589 864 0.43875 317.5 878 0.438 311.5 1032 54.16666667 37.03703704 54.65116279 2.790697674 0.36 0.79 0.712643678 19
238 237 100 50 0.417 0.427 317 319 316 53419 1572 0.42325 307.5 22666 684 0.42525 307 582 0.427 310.5 868 64.78333333 27.84810127 44.91017964 3.273809524 0.4 0.66 0.612903226 19
239 238 105 56 0.421 0.42125 317 321 305 42439 1312 0.42175 303.5 18326 648 0.41575 291.5 724 0.418 302.5 732 47.83333333 36.20791494 61.45251397 2.837290098 0.31 0.69 0.788732394 18
240 239 102 47 0.421 0.42575 317 321 310 41732 1506 0.425 305.75 19628 791 0.566333333 409.3333333 716 0.4305 303 850 53.5 40.47619048 62.3655914 2.705882353 0.41 0.66 0.813364055 20
241 240 102 16 0.417 0.43025 317 323 308 42310 1330 0.42925 315.5 21686 758 0.4285 306.5 800 0.4285 301.5 819 58.83333333 40.0234055 54.18994413 2.900232019 0.39 0.71 0.845454545 20
242 241 107 71 0.417 0.4495 317 320 318 49384 1692 0.449 327.5 25962 842 0.45075 316.5 761 0.453 326.5 994 48.5 28.7394958 49.7382199 3.174603175 0.4 0.74 0.827956989 20
243 242 104 40 0.417 0.45525 317 328 324 51875 1813 0.45725 320.5 24177 861 0.46 324 898 0.463 316.5 1088 53.83333333 34.01950163 60.82474227 3.249475891 0.42 0.94 0.633832976 20
244 243 107 15 0.413 0.43025 317 324 313 46008 1526 0.42275 297.5 20657 775 0.43325 308.75 754 0.4325 307.5 1238 55.2 30.50749712 56.81818182 3.550295858 0.31 0.36 0.874709977 20
245 244 106 30 0.417 0.44675 317 319 323 55839 1703 0.44325 318.5 23245 674 0.44975 325.75 679 0.4555 331.5 1144 49.33333333 33.60210538 63.07692308 4.371584699 0.38 0.71 0.623287671 22
246 245 105 92 0.421 0.4365 317 325 317 46097 1522 0.4305 306 20866 905 0.42675 309 752 0.423 304.5 882 47.66666667 33.19977104 47.84946237 2.591283863 0.35 0.74 0.705882353 21
247 246 80 21 0.433 0.435 317 319 310 46056 1330 0.43225 313.75 22490 672 0.43575 305.5 690 0.44 310 1246 54.66666667 28.26086957 53.55191257 2.688486265 0.25 0.83 0.630841121 19
248 247 106 52 0.421 0.418 317 320 312 48853 1573 0.4215 303.5 20464 686 0.42 308.5 802 0.427 317 1306 55 30.75571178 54.18994413 3.275862069 0.33 0.61 0.7470726 22
249 248 108 37 0.409 0.4265745 317 324 316 52342 1736 0.42825 313.5 21059 793 0.4295 322.25 1020 0.428 319 1026 74 30.58280439 59.89010989 3.333333333 0.35 0.74 0.683333333 20
250 249 106 43 0.413 0.44225 317 322 320 47840 1616 0.4445 309.75 22522 950 0.43925 312.5 774 0.446 319.5 1008 50.16666667 40.75144509 43.24324324 2.923076923 0.46 0.76 0.731707317 20
251 250 109 70 0.409 0.4345 317 321 306 47760 1498 0.43875 314.5 19451 698 0.434 308.75 735 0.4405 312.5 770 45.83333333 35.18621456 61.05263158 3.191489362 0.23 0.73 0.953917051 18
252 251 108 51 0.413 0.439 317 322 307 48821 1596 0.435 309.25 19805 763 0.4415 311 718 0.4485 326 606 52.16666667 43.82955174 67.20430108 3.852596315 0.35 0.85 0.941724942 19
253 252 104 39 0.409 0.4325 317 321 314 43998 1424 0.43325 314.5 18712 782 0.43275 310.25 705 0.441 318 644 58.66666667 42.84064665 68.64864865 2.415966387 0.23 0.73 0.967592593 20
254 253 100 46 0.425 0.42475 317 321 311 47985 1577 0.419 308.25 18744 738 0.42925 313.75 826 0.4265 301.5 1116 59.66666667 30.7735426 49.72972973 2.824267782 0.39 0.96 0.70521542 19
255 254 95 15 0.421 0.44675 317 319 309 46088 1176 0.448 302.75 22602 665 0.44675 308.75 648 0.446 299 1127 66.5 32.13483146 54.54545455 2.419808666 0.4 0.9 0.587973274 21
256 255 103 108 0.425 0.4185 317 320 312 46040 1628 0.4225 309.75 17908 814 0.422 302.25 819 0.42 286.5 1155 61.16666667 33.03834808 50.85714286 2.34939759 0.38 1.01 0.624676242 18
257 256 106 35 0.413 0.4345 317 320 315 47937 1384 0.43925 306 21992 761 0.437 312.5 847 0.4455 178.5 749 54.16666667 32.94930876 58.01104972 2.958579882 0.46 0.9 0.922897196 18
258 257 104 45 0.417 0.43675 317 320 310 47503 1400 0.43625 308.25 19644 644 0.43575 310.75 789 0.441 314.5 952 50.08333333 28.30613393 52.68817204 2.888503755 0.38 0.79 0.944567627 19
259 258 104 16 0.413 0.44525 317 320 314 44995 1502 0.44525 318.25 21460 866 0.44175 315 816 0.4475 320 980 58.16666667 38.18696884 50.50505051 2.717391304 0.42 0.93 0.769230769 20
260 259 102 39 0.421 0.44175 317 324 310 46410 1484 0.44425 310.75 19194 714 0.4375 317.75 847 0.4405 326 906 37.83333333 33.03964758 56.31578947 2.905982906 0.33 0.8 0.751662971 19
261 260 106 24 0.417 0.43675 317 319 305 49609 1656 0.43875 314.25 23326 665 0.433 304.25 779 0.4345 302.5 1071 46 27.9478458 52.84090909 3.05997552 0.32 0.79 0.618721461 20
262 261 104 31 0.419 0.44225 317 325 313 48773 1580 0.594 426.6666667 21948 866 0.4435 313.5 849 0.4405 307.5 889 52.33333333 41.57923799 62.37113402 2.936549554 0.35 0.64 0.730088496 19
263 262 103 47 0.417 0.43275 317 319 316 48902 1563 0.4265 314.75 22490 873 0.4325 321 868 0.4355 310 1144 57 34.20902342 65 3.406466513 0.26 0.61 0.650574713 20
264 263 106 37 0.417 0.441 317 322 306 46972 1575 0.4345 305.75 22634 842 0.43625 307 828 0.436 311.5 637 46.83333333 35.31122746 60.97560976 3.105590062 0.34 0.64 0.862302483 20
265 264 102 37 0.413 0.4245 317 322 307 48419 1514 0.422 297.75 20158 726 0.42725 309.75 875 0.4255 321 1036 54.16666667 33.60137852 55.11363636 2.89017341 0.2 0.75 0.82038835 20
266 265 106 64 0.417 0.4485 318 324 324 54239 1876 0.4475 322.75 25656 1031 0.4525 328.75 828 0.4575 326.5 1043 65.5 31.82308522 54.27135678 3.157894737 0.2 0.63 0.956018519 20
267 266 107 29 0.417 0.433 317 324 302 47551 1654 0.43375 302 20158 835 0.42975 295 779 0.4315 308 1239 57 42.25988701 56.31578947 1.685393258 0.21 0.67 0.72985782 19
268 267 103 90 0.421 0.4435 317 319 308 50187 1414 0.443 312.75 21749 658 0.44375 309.5 728 0.443 305.5 886 59.33333333 29.92081448 21.10552764 3.067484663 0.31 0.63 0.609865471 20
269 268 100 42 0.421 0.4585 317 320 312 47069 1404 0.456 309.5 21043 747 0.4555 304.25 698 0.457 307.5 984 31 39.06926407 67.77777778 3.409090909 0.32 0.78 0.986754967 21
270 269 108 32 0.419 0.454 317 319 306 48387 1410 0.45075 319.25 27062 859 0.4495 314.25 681 0.4575 1774 1400 34.66666667 33.98656215 51.35135135 3.431101273 0.35 0.66 0.611353712 20
271 270 102 27 0.417 0.437 317 320 310 50300 1687 0.43575 317 24852 1040 0.4325 315.75 798 0.43 304.5 819 62.16666667 29.42857143 40.11299435 2.98136646 0.31 0.75 0.748267898 20
272 271 108 40 0.413 0.428 317 323 302 49271 1293 0.42475 304.5 21412 784 0.42425 301.75 686 0.436 312 910 52.18333333 33.80447585 49.06832298 2.841918295 0.36 0.65 0.758949881 20
273 272 109 23 0.413 0.43125 317 322 316 48242 1479 0.432075 306.5 22522 704 0.43525 318.75 760 0.434 315.5 794 57.03333333 34.0546697 55.97826087 2.603613177 0.28 0.63 0.723809524 20
274 273 109 79 0.413 0.45 317 321 327 56248 1549 0.446 326 25480 774 0.441 319 863 0.4395 309 1004 48.68333333 31.90770962 62.42774566 2.923331495 0.24 0.69 0.749425287 20
275 274 104 92 0.417 0.4395 317 317 315 47607 1496 0.436 301.5 23792 660 0.444 317.25 814 0.4445 312 1060 58.16666667 24.06892718 49.45054945 2.023608769 0.38 0.76 0.670533643 20
276 275 104 111 0.421 0.42475 3.7 321 316 46088 1586 0.42325 295 19049 868 0.42375 305.75 672 0.428 310 760 63 33.55184744 50 2.869518138 0.23 0.88 0.545673077 19
277 276 103 26 0.417 0.452 317 319 316 48907 1578 0.4455 313.75 23004 726 0.45125 326 866 0.451 310.5 931 61.5 38.35242771 60.33519553 3.152173913 0.31 0.88 0.61790393 20
278 277 105 136 0.417 0.4343335 317 319 316 50702 1488 0.431 313.5 23470 752 0.4385 327 840 0.441 303 861 65.83333333 26.22196665 45.76271186 2.824858757 0.18 0.67 0.662870159 20
279 278 104 30 0.417 0.4485 317 324 309 50091 1536 0.4495 321.5 24531 929 0.44825 317.25 943 0.4555 310 752 62.66666667 27.42474916 56.21621622 3.136629452 0.46 0.74 0.958997722 20
280 279 106 128 0.413 0.42725 317 324 308 45831 1631 0.429 309.75 20271 763 0.42875 301 912 0.4275 310 819 56.16666667 31.84421535 57.37704918 2.521008403 0.34 0.74 0.858513189 20
281 280 102 96 0.417 0.432 317 321 309 52744 1592 0.4335 309.75 20158 612 0.43825 304.25 724 0.445 319.5 1127 51.55 31.10465116 50.57471264 3.419811321 0.37 0.66 0.871853547 20
282 281 102 149 0.413 0.43775 317 321 310 48821 1640 0.43875 309 21396 803 0.43675 312 684 0.4405 304 990 50.26666667 38.50354997 54.78723404 3.517877739 0.32 0.94 0.995305164 23
283 282 104 60 0.413 0.44075 317 320 310 49882 1712 0.4375 302.5 22650 861 0.44375 316.5 840 0.4505 311 956 69.83333333 25.04145937 53.67231638 2.824858757 0.34 0.73 0.744186047 20
284 283 103 20 0.417 0.43025 317 324 316 52302 1549 0.43075 319.25 22795 802 0.4315 309.5 732 0.436 304 1652 69.11666667 33.48623853 57.22222222 3.058280439 0.61 0.59 0.836065574 23
285 284 108 103 0.417 0.44 317 320 306 43975 1435 0.43625 310.75 20754 668 0.4395 306.75 814 0.443 314 1354 54.98333333 33.29519451 50.86705202 2.728285078 0.41 0.98 0.81264637 20
286 285 105 23 0.413 0.432 317 319 304 46394 1774 0.43025 306.75 21155 882 0.4295 298.5 817 0.4295 311.5 959 62.83333333 30.4246655 55.23255814 3.548574753 0.3 0.93 0.744186047 20
287 286 108 125 0.413 0.43925 317 319 304 46635 1120 0.43975 308 21766 817 0.44125 303.75 598 0.437 304 1088 59.66666667 31.99320498 53.47593583 2.75175644 0.25 0.71 0.670588235 20
288 287 107 35 0.417 0.43825 317 319 300 51790 1528 0.4315 305.25 25801 1004 0.43525 306.25 866 0.437 305.5 978 66.16666667 28.30080367 45.05494505 3.866128102 0.24 0.76 0.581589958 20
289 288 106 110 0.417 0.41525 317 319 295 54994 1815 0.4165 303.5 20753 751 0.41825 305 751 0.422 311.5 1082 70 25.33883324 46.59090909 3.244837758 0.32 0.67 0.717761557 19
290 289 105 100 0.421 0.42275 317 322 302 47567 1617 0.42375 311.25 20882 940 0.42375 299 719 0.419 286 812 59.5 28.04129794 50.84745763 2.978723404 0.31 0.79 0.70990566 20
291 290 90 133 0.421 0.4425 317 319 318 52132 1694 0.4475 302.5 24274 756 0.445 316.75 1020 0.443 306.5 724 64.5 31.76996092 42.47311828 2.547065338 0.3 0.57 0.74049217 20
292 291 105 21 0.415 0.425 317 321 308 50959 1832 0.42425 306.25 24081 1186 0.42075 300.5 973 0.426 306 938 72.5 28.74423963 48.91304348 3.093922652 0.29 0.61 0.822323462 22
293 292 98 72 0.417 0.43125 317 322 313 49078 1768 0.4335 312.25 25302 1055 0.43575 309.5 845 0.445 322 1082 71.5 27.73841962 55.67567568 3.989361702 0.4 0.61 0.623093682 20
294 293 101 28 0.421 0.439 317 319 312 45092 1498 0.439 314.75 20528 686 0.43875 309 635 0.437 305.5 808 54.5 35.06721216 63.27683616 1.776504298 0.18 0.46 0.768888889 22
295 294 102 17 0.421 0.4435 317 323 313 52551 1687 0.4435 305.75 20464 772 0.4425 314 721 0.4495 308.5 802 61.71666667 28.5304248 56.41025641 2.997601918 0.28 0.78 0.903153153 23
296 295 108 71 0.413 0.4475 317 323 306 49239 1564 0.4475 304 19676 721 0.451 306 768 0.4545 313 1088 58.16666667 37.49309774 65.0273224 2.18579235 0.34 0.73 0.662921348 18
297 296 101 28 0.417 0.436 317 320 318 53836 1785 0.43525 318.5 23679 775 0.43225 313.25 796 0.4355 322 1208 57.31666667 26.86397268 47.72727273 3.394255875 0.26 0.68 0.832167832 18
298 297 107 45 0.417 0.4325 317 323 312 45478 1502 0.44075 318.25 23920 950 0.43675 303.25 718 0.4375 307.5 1197 59.66666667 26.98504028 50.56179775 2.7479092 0.3 0.74 0.827586207 20
299 298 104 113 0.417 0.44925 317 327 313 45895 1654 0.44325 315.5 25415 935 0.4555 315 709 0.456 329 1340 58.16666667 35.20494104 63.97849462 2.699530516 0.3 0.6 0.796338673 25
300 299 105 38 0.421 0.42725 318 325 301 48066 1696 0.42475 304.75 20422 763 0.4235 302 756 0.432 307 1281 60.33333333 33.29473075 51.95530726 3.282399547 0.22 0.55 0.915331808 20
301 300 105 130 0.417 0.45175 317 318 318 51859 1638 0.4455 311.5 23936 709 0.4495 322.75 766 0.453 312.5 1264 56 33.22072072 60.79545455 2.795208214 0.22 0.75 0.629711752 22
302 301 90 104 0.417 0.4295 317 317 322 52406 1549 0.4285 319.75 22104 722 0.4375 339.5 718 0.42 333 1372 48.33333333 20.58993638 40.55555556 2.728285078 0.38 0.94 0.655502392 22
303 302 96 17 0.417 0.43475 317 317 326 51522 1547 0.429 317.5 22988 678 0.4355 320.75 817 0.451 337.5 1141 75.66666667 26.18368511 47.72727273 2.66591038 0.24 0.74 0.675862069 20
304 303 104 73 0.417 0.4445 317 320 317 47808 1552 0.44575 324.25 29225 962 0.446 318.25 700 0.454 316.5 1400 75 34.83941208 52.87958115 3.664921466 0.31 0.81 0.607843137 20
305 304 95 64 0.421 0.44075 317 325 311 52468 1626 0.438 312.5 19950 637 0.44375 315.25 784 0.446 317.5 1106 57.16666667 32.43395166 45.94594595 3.395784543 0.4 0.9 0.641891892 20
306 305 106 125 0.421 0.43225 317 321 299 48692 1519 0.4335 299.25 19756 642 0.42925 295.75 726 0.43 298.5 718 55.28333333 37.621498 53.33333333 3.142536476 0.34 0.85 0.829383886 21
307 306 98 115 0.421 0.442 317 322 322 52518 1727 0.44525 321 23647 976 0.444 314 976 0.4445 320.5 1092 66.83333333 28.35400225 51.1627907 2.469135802 0.2 0.46 0.67816092 22
308 307 95 43 0.417 0.4375 317 322 312 53499 1519 0.435 305 21010 768 0.43675 309.5 754 0.445 315.5 756 65.38333333 32.58426966 48.40425532 2.249598286 0.3 0.57 0.762352941 20
309 308 88 103 0.429 0.445 317 320 312 54512 1913 0.43725 313 21380 696 0.4425 311.75 877 0.4505 326 1197 68.25 25.97844583 48.82352941 2.305159166 0.27 0.55 0.694382022 20
310 309 104 36 0.417 0.437 317 323 309 44529 1426 0.44075 311.75 21775 884 0.4375 303.5 780 0.4475 315.5 760 70 35.54046406 63.44086022 3.064066852 0.22 0.51 0.807962529 22
311 310 100 96 0.417 0.43675 317 322 320 53852 1976 0.44 318.5 26605 1122 0.438 304.25 877 0.4405 313 864 68.5 25.27901786 38.79781421 4.340175953 0.24 0.68 0.680434783 25
312 311 102 40 0.417 0.44 317 319 311 52438 1648 0.43875 312.75 24161 774 0.44 306.25 766 0.438 307.5 1116 61 32.92682927 50 4.284037559 0.38 0.99 0.704651163 20
313 312 108 24 0.417 0.42825 317 321 308 43902 1477 0.426 305 20432 761 0.4315 311 732 0.4275 312.5 746 38.5 37.66233766 58.88888889 3.546099291 0.36 0.86 0.790754258 20
314 313 106 118 0.417 0.44025 317 323 310 50509 1746 0.44175 308.25 23502 886 0.438 314.75 751 0.445 309.5 878 41.66666667 38.69148336 56.08465608 2.991944764 0.41 0.57 0.737668161 21
315 314 100 54 0.417 0.4305 317 324 314 47937 1556 0.43 308.25 19403 882 0.43125 312.75 796 0.4285 303 1320 57 38.08695652 61.4973262 2.857142857 0.25 0.5 0.877880184 20
316 315 102 122 0.417 0.43475 317 323 314 48708 1703 0.43725 309.5 22490 910 0.4385 309 758 0.4455 312 704 60.83333333 31.38357705 56.38297872 2.777777778 0.31 0.61 0.76056338 20
317 316 98 26 0.417 0.43675 317 321 315 49834 1521 0.43075 313 22200 735 0.4375 310.75 688 0.441 311.5 1078 51.35 30.01132503 45.55555556 2.98102981 0.4 0.58 0.708333333 19
318 317 106 97 0.417 0.441 317 324 324 55251 2039 0.4395 324.25 23015 980 0.449 320.25 987 0.4545 309 1018 60.83333333 28.11135371 56.32183908 3.770197487 0.11 0.53 0.776315789 20
319 318 87 55 0.421 0.4085 317 321 312 46740 1648 0.40775 311.75 17683 802 0.41075 311 835 0.4115 300.5 844 54.5 23.70458606 41.30434783 2.218524681 0.15 0.41 0.680387409 19
320 319 88 152 0.423 0.4345 317 322 320 50654 1508 0.42875 315.75 17812 744 0.43 307.5 732 0.4305 321 847 60.83333333 26.27070246 46.44808743 1.912568306 0.025 0.57 0.756818182 19
321 320 103 25 0.421 0.4265 317 319 294 46780 1507 0.424625 305.25 22136 779 0.42425 306.75 765 0.428 311.5 1295 58.5 24.52830189 48.35164835 3.436018957 0.29 0.59 0.699769053 20
322 321 83 103 0.429 0.44075 317 319 314 48926 1701 0.44425 317.75 25762 660 0.44375 311.5 714 0.453 326.5 1057 57.16666667 24.5883021 36.55913978 3.470588235 0.36 0.65 0.730088496 20
323 322 90 26 0.437 0.578333333 317 318 411 57936 1932 0.4335 313.75 22843 940 0.43025 299 863 0.433 316 1228 69.33333333 24.61273666 49.04458599 2.746893394 0.31 0.58 0.740909091 19
324 323 99 22 0.421 0.44525 317 319 321 47969 1500 0.454 316.75 23920 738 0.4525 310.75 716 0.437 316.5 1400 52.33333333 33.0255296 55.37634409 3.327877796 0.3 0.8 0.839622642 20
325 324 106 77 0.421 0.445 317 317 314 49271 1656 0.43925 304.5 23197 733 0.44625 309.25 859 0.453 311.5 1330 48.16666667 37.62827822 76.78571429 3.052064632 0.23 0.72 0.941309255 20
326 325 100 35 0.423 0.4385 317 320 306 51297 1587 0.44275 301 23197 807 0.445 315.5 887 0.446 317.5 1166 54.83333333 30.98987627 58.42696629 3.65630713 0.49 0.75 0.716553288 19
327 326 108 77 0.429 0.432275 317 319 305 47390 1508 0.42875 426.25 20087 716 0.42725 300.5 749 0.4285 306.5 938 40.66666667 44.77521264 66.25 2.727272727 0.15 0.94 0.633333333 20
328 327 108 19 0.421 0.4355 317 319 305 49516 1475 0.42925 309.5 22908 730 0.42925 303.5 688 0.4335 294.5 1064 61 39.68521641 55.97826087 2.544378698 0.25 0.89 0.674584323 20
329 328 98 129 0.421 0.4355 315 320 320 50606 1750 0.439 313 23518 821 0.43675 315 882 0.437 305.5 917 52.83333333 35.2072686 63.27683616 3.057757644 0.41 0.77 0.977011494 20
330 329 88 28 0.421 0.43225 315 320 309 51988 1764 0.4295 304.25 21750 863 0.434 307.75 723 0.4365 312.5 812 51.95 26.81924883 42.69662921 2.169869808 0.35 0.65 0.687782805 19
331 330 107 104 0.417 0.427 315 320 300 47197 1600 0.42625 298.75 22200 840 0.42575 295.5 688 0.4295 300 1074 47.81666667 36.63024727 55.0802139 2.750275028 0.29 0.7 0.712962963 21
332 331 90 25 0.421 0.4315 315 320 310 51972 1566 0.4325 318.75 22215 822 0.43475 320 950 0.4385 322.5 987 68 25.84841629 50.26455026 3.246376812 0.3 0.79 0.954022989 18
333 332 104 109 0.421 0.4575 315 322 325 58000 1773 0.45475 343.25 30238 1060 0.4535 328.25 880 0.4665 334 1096 52.76666667 31.97316937 55.78947368 3.395585739 0.24 0.68 0.88172043 20
334 333 109 44 0.417 0.41725 315 318 306 42150 1524 0.42075 302.25 20930 775 0.4175 303 541 0.417 316 668 42.16666667 44.24242424 55.74712644 2.631578947 0.33 0.7 0.825775656 19
335 334 108 112 0.417 0.445 315 319 322 60476 1748 0.442 317.5 25263 795 0.44575 314.5 635 0.458 311 679 35.9 29.59912136 51.61290323 4.154809334 0.36 0.78 0.895591647 19
336 335 67 44 0.441 0.453 315 320 317 60202 1953 0.44975 306.25 25190 943 0.45125 310.25 961 0.4565 327.5 1312 49.83333333 22.49718785 44.31818182 2.490096208 0.24 0.71 0.582417582 20
337 336 102 11 0.419 0.429 315 317 308 48982 1598 0.422 310.5 27457 840 0.43025 308.75 761 0.4445 310.5 1064 66.83333333 30.65268065 54.80225989 3.701492537 0.32 0.7 0.634482759 22
338 337 99 103 0.421 0.43825 315 319 310 49962 1535 0.438 309 25238 852 0.4435 317.25 664 0.4415 328.5 1544 69.5 37.78647289 57.80346821 3.795284646 0.29 0.7 0.667447307 22
339 338 95 26 0.425 0.44725 315 319 324 57052 2044 0.444875 325.75 24708 1017 0.44775 324 990 0.4475 327.5 1270 64.33333333 33.29652126 54.89130435 3.218645949 0.44 0.83 0.80778032 20
340 339 104 38 0.417 0.4385 315 321 319 50975 1631 0.43825 320.5 22104 833 0.43775 315 824 0.441 302 1306 58.21666667 33.5864486 55.81395349 2.97691373 0.2 0.61 0.706546275 20
341 340 108 105 0.417 0.45175 315 319 322 56537 1774 0.45325 318.5 26187 793 0.454 327.25 859 0.4615 312.5 844 36.45 38.58607663 53.36787565 3.303471445 0.35 0.71 0.848214286 22
342 341 104 54 0.421 0.43825 315 320 312 50139 1788 0.436 319.75 22457 887 0.437 316.5 908 0.4335 318.5 1036 53.83333333 34.49419569 57.07070707 2.985074627 0.44 0.73 0.860986547 20
343 342 90 50 0.425 0.43175 315 321 312 49898 1605 0.43 306 22474 872 0.4355 310 738 0.4255 299.5 1309 53.9 29.87238979 44 2.505827506 0.05 0.28 0.589201878 20
344 343 108 96 0.417 0.4445 315 323 322 49207 1356 0.443 316.75 21284 793 0.44425 317.75 749 0.4405 318 875 51.78333333 46.36015326 55.02645503 2.49031544 0.332 0.78 0.779775281 20
345 344 100 15 0.421 0.43975 315 321 319 53547 1804 0.4405 317 21943 826 0.4385 312.5 863 0.4415 307 1285 62.33333333 28.39931153 59.25925926 2.367242482 0.3 0.7 0.857471264 20
346 345 104 17 0.417 0.4385 315 321 313 47101 1503 0.4385 312 19498 707 0.43925 313 833 0.4355 309.5 1170 52.7 28.92423366 46.85714286 2.8713418 0.26 0.7 0.776523702 20
347 346 109 88 0.413 0.42 315 320 312 45027 1636 0.41625 313 18776 735 0.41725 310.5 872 0.4255 322.5 1774 63.78333333 31.37026239 58.52272727 2.764423077 0.23 0.69 0.694581281 20
348 347 106 27 0.417 0.436 317 NULL 312 53579 1771 0.4335 309.5 20448 670 0.431 305.25 877 0.4365 310 1421 54.5 33.06497987 49.41176471 3.416149068 0.4 0.72 0.670644391 20
349 348 108 141 0.417 0.443 315 319 320 53692 1762 0.44175 309.5 24451 740 0.44175 308.75 768 0.445 307.5 1502 54.5 27.08449916 56.4516129 3.341013825 0.39 0.61 0.6 21
350 349 88 21 0.423 0.43075 317 322 312 55332 1843 0.4305 317.25 22779 1034 0.4275 312.75 800 0.4455 315.5 1106 74 32.04407208 50 3.185035389 0.32 0.64 0.689252336 20
351 350 96 98 0.421 0.43875 315 321 319 54672 1769 0.44 305.25 22264 990 0.442 324.75 1040 0.4475 304 1106 61.83333333 26.53867871 57.89473684 3.426791277 0.43 0.65 0.70521542 20
352 351 98 22 0.421 0.431 315 321 314 48564 1690 0.4385 308.5 25268 943 0.437 318.75 898 0.447 321.5 1334 57 36.35860542 61.2745098 3.270564916 0.36 0.69 0.774580336 21
353 352 108 50 0.419 0.445 315 321 322 55412 1846 0.4445 328.25 25705 1046 0.44625 325.5 901 0.443 315 1057 64.83333333 27.01181767 47.87878788 3.520691785 0.35 0.54 0.557017544 23
354 353 104 21 0.419 0.4485 315 318 298 48998 1522 0.4535 313.25 28373 959 0.4485 306.5 808 0.458 315.5 844 46.66666667 23.87562465 51.74418605 3.703703704 0.36 0.64 0.785714286 20
355 354 109 126 0.417 0.441 315 320 308 45558 1339 0.43825 314 19692 644 0.4425 305.75 780 0.445 309.5 1302 47.33333333 35.23700742 50.9202454 2.907328892 0.32 0.84 0.751677852 19
356 355 85 13 0.425 0.439 315 318 318 52454 1703 0.43775 307.5 20464 744 0.4435 324.25 774 0.441 311.5 1302 56.65 23.81747357 43.02325581 3.59212051 0.36 0.68 0.820930233 18
357 356 109 42 0.417 0.429 315 320 314 53901 1656 0.43025 315.25 21862 733 0.432 318.25 830 0.4375 314 1194 60.65 21.84971098 48.73417722 2.962962963 0.29 0.82 0.823113208 20
358 357 109 95 0.417 0.4345 315 319 314 49737 1412 0.4355 316.25 21830 742 0.43975 323.5 922 0.437 316 1242 58.86666667 32.4141812 56.83060109 3.185437998 0.29 0.76 0.804651163 20
359 358 109 17 0.417 0.44275 315 318 312 52824 1653 0.445 317.25 22506 684 0.44275 306.75 645 0.4475 320 1158 56.33333333 26.06741573 42.42424242 2.781136638 0.35 0.69 0.617777778 20
360 359 105 59 0.419 0.43525 315 320 310 50268 1656 0.43275 313.25 27424 1139 0.43025 310.25 791 0.446 314 1326 59 26.17255356 49.45652174 3.002309469 0.39 0.67 0.639908257 22
361 360 109 28 0.417 0.436 315 317 315 52302 1682 0.44275 309.75 25576 746 0.4455 307.5 805 0.443 294.5 651 55.66666667 26.54320988 44.76744186 3.064066852 0.44 0.81 0.623831776 20
362 361 105 81 0.419 0.43475 315 321 320 51522 1852 0.437 312.75 28196 957 0.43425 302.75 716 0.437 316.5 948 49.66666667 28.25191289 51.1627907 3.353293413 0.28 0.95 0.70917226 25
363 362 103 30 0.417 0.44425 315 321 315 55312 1643 0.44825 321.25 26846 934 0.45175 315.75 906 0.4595 327.5 896 47.06666667 28.04597701 54.74860335 2.964959569 0.3 0.96 0.741935484 24
364 363 98 126 0.417 0.425 315 320 302 47326 1684 0.42275 306 18503 681 0.424 310.25 822 0.4225 299.5 826 56.26666667 34.06976744 53.71428571 2.55648038 0.29 0.93 0.565320665 21
365 364 104 48 0.417 0.446 315 319 319 48403 1787 0.448 311.75 21573 875 0.44525 318 849 0.4505 317.5 1572 53.5 30.31973539 58.79120879 3.03030303 0.47 0.94 0.709006928 25
366 365 109 112 0.417 0.441 315 321 302 48274 1731 0.43975 302 21525 833 0.44225 308 830 0.446 308.5 1288 38.66666667 31.49915778 65.14285714 2.808988764 0.38 0.7 0.939252336 25
367 366 98 29 0.421 0.44125 315 318 297 48290 1516 0.4405 315 20691 732 0.44675 310.75 800 0.4555 316.5 1278 47.51666667 26.41615255 55.43478261 2.915291529 0.45 0.96 0.663615561 22
368 367 90 98 0.421 0.43925 315 321 310 52357 1687 0.43625 314 22956 730 0.437 311.75 906 0.449 306.5 976 62.8 20.99603848 46.02272727 2.845982143 0.3 1.08 0.570071259 21
369 368 104 17 0.421 0.43525 315 321 311 52031 1659 0.43325 305.75 25882 938 0.441 311.75 819 0.4415 312.5 1547 51.33333333 25.85915493 50.56179775 2.848101266 0.31 0.64 0.653206651 25
370 369 100 109 0.421 0.4375 315 319 320 53290 1703 0.445 311.75 23904 952 0.44 312.5 901 0.4485 314 1428 61.83333333 21.82539683 61.25 2.923976608 0.3 0.92 0.674364896 20
371 370 92 44 0.425 0.44075 315 320 314 58000 2014 0.44825 308 24660 980 0.445 312.75 914 0.447 318.5 1687 63 17.4904943 37.05583756 3.404924044 0.22 0.98 0.570093458 21
372 371 108 116 0.417 0.439 315 320 320 55653 1824 0.44425 320 22522 878 0.4415 317 826 0.447 314.5 1274 54.66666667 27.78088317 56.91489362 2.988378528 0.28 0.73 0.729119639 21
373 372 104 34 0.417 0.4235 315 318 298 44690 1524 0.42425 298.25 21879 957 0.4225 296.75 982 0.4285 300.5 1309 47.5 26.36729994 50.85714286 3.130434783 0.33 0.83 0.622171946 23
374 373 102 114 0.417 0.43775 315 322 308 49223 1701 0.43675 305 25553 905 0.44 310.5 796 0.447 307 1204 45.33333333 26.88290269 57.06521739 3.494467094 0.33 0.81 0.75877193 25
375 374 88 59 0.423 0.434 315 318 303 49078 1638 0.445 312.25 23422 889 0.445 313.75 1026 0.4495 309.5 1526 54 32.56616801 47.97687861 2.719033233 0.34 0.67 0.762124711 20
376 375 102 26 0.419 0.429 315 316 302 49094 1750 0.43425 312.25 21910 914 0.43425 310.5 903 0.4375 293.5 760 49 42.86542923 71.0982659 2.863961814 0.39 0.58 0.495348837 21
377 376 105 75 0.419 0.42675 315 319 306 47165 1680 0.4255 303.25 21380 870 0.42875 304.5 742 0.443 302.5 872 46.83333333 34.31372549 60.11235955 3.592814371 0.37 0.68 0.665178571 21
378 377 104 21 0.417 0.4325 315 323 318 49850 1530 0.42925 307.75 21461 734 0.4335 311 854 0.4475 316 868 43.61666667 34.99152063 50.81081081 3.050847458 0.38 0.66 0.610849057 19
379 378 108 122 0.413 0.43875 315 321 309 53338 1843 0.43775 311 21911 782 0.43425 305 712 0.4395 308 1071 44.31666667 41.41531323 64.04494382 2.444570779 0.3 0.63 0.774336283 22
380 379 106 69 0.417 0.4325 315 322 316 53322 1843 0.4375 317 21911 908 0.4365 315.75 962 0.4365 311 1386 48.16666667 37.44292237 64 2.162162162 0.37 0.71 0.726190476 22
381 380 95 130 0.417 0.429 315 322 312 46956 1594 0.431 297 22458 940 0.4335 308.25 878 0.4325 314 1407 53.66666667 30.65735893 57.22222222 2.352941176 0.38 0.69 0.607981221 20
382 381 94 17 0.421 0.439 315 320 318 56232 2007 0.4425 315 28630 1048 0.445 315.25 978 0.4455 314 1228 54 23.20601852 49.09090909 4.242424242 0.44 0.67 0.587006961 23
383 382 104 126 0.421 0.44975 315 321 314 49448 2030 0.449 313 24467 1090 0.44825 317 1020 0.454 316.5 1228 45.73333333 32.57661748 49.16201117 3.183962264 0.4 0.62 0.735099338 20
384 383 108 28 0.417 0.448 315 321 315 43709 1596 0.449 317.5 24499 985 0.4465 315.25 1069 0.4515 314 1382 55.5 32.25985564 59.45945946 3.081232493 0.37 0.57 0.730337079 20
385 384 109 56 0.417 0.4525 315 320 315 54528 1685 0.45075 312.75 24531 970 0.44975 317.25 970 0.4555 317.5 1712 49.66666667 32.4668435 59.68586387 2.798708288 0.4 0.58 0.870748299 23
386 385 106 42 0.419 0.426 315 318 299 45863 1704 0.42225 300.5 20770 920 0.4235 306.5 875 0.424 293.5 1148 37.16666667 25.56390977 52.60115607 2.643948296 0.34 0.69 0.722477064 21
387 386 107 74 0.419 0.424 315 318 304 46458 1577 0.424 315.25 20770 920 0.42425 302.75 898 0.4195 295.5 1186 54 31.49107657 55.24861878 2.766333137 0.25 0.46 0.752808989 22
388 387 104 30 0.417 0.432 315 319 307 46876 1267 0.42975 313.5 22778 707 0.43325 314 749 0.4385 319 1292 51.16666667 38.32650673 80 2.944640754 0.41 0.67 0.639344262 21
389 388 106 84 0.417 0.439 315 319 310 50589 1379 0.439 318.5 24097 777 0.44325 312.5 751 0.44 304 1281 47.16666667 40.63384267 70.65217391 3.114186851 0.33 0.74 0.619489559 22
390 389 106 26 0.419 0.4175 315 316 296 44610 1368 0.41775 294.75 19789 658 0.4155 297.25 768 0.4185 303.5 987 38.66666667 38.6869871 59.53757225 2.386634845 0.27 0.58 0.714285714 23
391 390 108 120 0.419 0.44675 315 317 300 45751 1440 0.44775 313.5 23342 817 0.44525 314.25 726 0.4495 302.5 864 34.66666667 29.50437318 52.87356322 2.55648038 0.41 0.61 0.693181818 21
392 391 82 25 0.425 0.441 315 317 312 53531 1522 0.439 308.5 29402 980 0.439 312.25 788 0.441 285.5 1309 52 15.17010597 40.76086957 2.696629213 0.32 0.9 0.648401826 22
393 392 82 75 0.425 0.4425 315 319 302 55669 1804 0.44075 304.5 25030 732 0.443 307 807 0.4505 311.5 1054 53.66666667 23.02962549 49.19786096 3.163841808 0.36 0.61 0.58276644 23
394 393 104 23 0.417 0.433 315 321 305 48307 1503 0.43275 310 20271 702 0.43275 311.25 856 0.434 298.5 994 36.15 41.14942529 69.94219653 2.997737557 0.41 0.83 0.826388889 25
395 394 105 26 0.417 0.4455 315 321 320 54785 1992 0.447 328.75 25576 1022 0.4505 323 915 0.4565 314 987 40 25.56723852 58.60215054 2.857142857 0.27 0.58 0.890868597 23
396 395 110 68 0.413 0.433 315 321 304 46634 1549 0.43725 309.25 21412 793 0.43575 310.75 849 0.444 310 1337 43 30.67520373 58.68263473 3.048780488 0.28 0.82 0.896162528 23
397 396 96 77 0.421 0.436 315 320 311 52534 1895 0.43325 310.5 25592 1068 0.437 310 952 0.4295 297.5 1148 55.83333333 24.78729438 54.44444444 2.732240437 0.27 0.831 0.733021077 20
398 397 98 27 0.425 0.44225 315 321 309 54464 1852 0.44375 304.75 24113 964 0.442 308.75 810 0.443 300.5 910 41.5 29.23752057 53.19148936 2.694786175 0.31 0.78 0.781659389 21
399 398 102 84 0.425 0.41925 315 317 298 45670 1568 0.42375 298 19307 794 0.42175 301.25 856 0.428 303 1152 43.83333333 23.28847279 54.54545455 2.756141402 0.27 0.66 0.730593607 19
400 399 108 10 0.417 0.4495 315 317 321 57743 1652 0.45175 322.5 25946 905 0.45025 325.75 746 0.461 321 952 37.33333333 32.62527233 69.83240223 3.510696654 0.18 0.72 0.534934498 20
401 400 106 41 0.419 0.443 315 318 305 52390 1748 0.441 307.75 26106 934 0.43475 302 805 0.4365 307.5 1278 42.83333333 26.21195039 44.57142857 3.773584906 0.33 0.54 0.575555556 22
402 401 108 80 0.417 0.4255 315 319 309 48146 1516 0.42525 303.25 23254 786 0.4245 305.25 768 0.428 320.5 1477 46.83333333 29.67853042 69.23076923 2.670623145 0.15 0.68 0.639269406 20
403 402 107 45 0.417 0.439 315 321 317 53113 1512 0.44175 319.75 26637 922 0.4395 316.75 938 0.4385 310 1110 48.33333333 30.40540541 52.84090909 3.692674211 0.29 0.56 0.717647059 22
404 403 108 82 0.417 0.44825 315 319 310 55653 1561 0.448 310.25 26348 780 0.44925 315.75 870 0.4545 313.5 679 36.83333333 30.22346369 52.17391304 2.558139535 0.22 0.66 0.612200436 22
405 404 92 7 0.421 0.452 315 321 322 51762 1805 0.4455 311.25 26926 987 0.45275 328 1015 0.4565 315 984 43.78333333 27.03723691 47.2826087 3.517877739 0.23 0.52 0.70754717 24
406 405 105 128 0.421 0.43225 315 320 319 57020 1841 0.427 303 23952 810 0.435 311.25 1020 0.435 310 662 49.81666667 35.85014409 48.40425532 2.707692308 0.23 0.74 0.781818182 21
407 406 105 121 0.417 0.4415 315 318 310 45124 1564 0.44425 307.5 23245 875 0.44375 310 723 0.444 302 1172 38.16666667 33.07943417 59.375 3.372093023 0.28 0.67 0.793023256 23
408 407 108 22 0.417 0.44275 315 320 317 52020 1662 0.4425 323.25 23149 746 0.44825 324.75 896 0.4545 317 1134 40.51666667 27.82415136 53.15789474 3.167185877 0.27 0.77 0.856179775 24
409 408 100 97 0.421 0.44725 315 321 311 44786 1253 0.4485 313.25 24177 733 0.4475 319.75 836 0.4505 330 1340 49.43333333 41.15720524 74 2.671755725 0.35 0.55 0.707762557 23
410 409 102 20 0.417 0.4215 315 315 300 45928 1592 0.421 297.25 21702 772 0.41825 290.25 738 0.426 294 1046 39.5 33.7334934 67.87878788 3.023516237 0.39 0.6 0.788235294 23
411 410 101 36 0.417 0.444 315 315 327 65346 1866 0.4415 321.75 29273 875 0.43925 323.25 738 0.4445 336 1477 33.33333333 24.87016734 65.6626506 3.513996426 0.21 0.78 0.47716895 22
412 411 98 52 0.417 0.45075 315 320 325 54608 1720 0.45125 324.5 24788 808 0.4505 322 898 0.4575 333.5 1505 42.16666667 44.58705357 59.01639344 3.193960511 0.17 0.48 0.545454545 20
413 412 75 75 0.417 0.44425 315 317 320 65266 1801 0.447 317.25 23744 704 0.44475 326.25 931 0.4505 331.5 1712 57.5 24.09972299 39.3258427 2.941176471 0.35 1.03 0.554524362 21
414 413 98 15 0.417 0.423 315 318 302 42326 1208 0.42325 301.5 21196 707 0.42475 309.25 914 0.4325 311 1099 59.3 28.24925816 42.94478528 2.766798419 0.38 0.97 0.746445498 23
415 414 108 102 0.417 0.44975 315 320 317 56264 1956 0.44075 302.5 26332 861 0.441 307 892 0.449 306 946 30.63333333 25.37900056 42.54143646 3.828002098 0.51 0.68 0.581818182 26
416 415 100 30 0.417 0.44325 315 322 319 50814 1699 0.448 330 27730 1029 0.4435 315.5 726 0.447 319 665 57.76666667 14.3812709 42.85714286 4.052573932 0.49 0.84 0.610047847 25
417 416 108 108 0.417 0.435 315 319 305 47920 1549 0.439 323.5 24017 800 0.43725 315.25 688 0.434 317 812 56.88333333 30.42492918 51.91256831 3.563084112 0.4 0.82 0.69751693 20
418 417 107 31 0.417 0.448 315 319 308 47165 1543 0.4445 319.75 25496 996 0.4445 314.5 826 0.4465 318 1158 34.95 42.13451918 65.2173913 3.653250774 0.33 0.75 0.612612613 20
419 418 105 42 0.417 0.44975 315 320 308 51056 1488 0.45075 319.5 24434 821 0.44775 312.25 894 0.4485 306.5 1141 49.35 31.40360459 53.92670157 2.852441031 0.31 0.89 0.689342404 21
420 419 109 69 0.417 0.4405 315 317 300 48724 1430 0.44175 307 23132 700 0.44075 296.25 831 0.449 288 2232 53.9 28.66894198 56.36363636 2.324195471 0.39 0.68 0.671171171 24
421 420 98 81 0.419 0.43625 315 317 315 45574 1533 0.4335 308.25 21895 830 0.43225 318.25 665 0.4345 334.5 1218 57.16666667 38.66362079 61.2565445 2.630106323 0.62 0.7 0.57918552 21
422 421 98 56 0.419 0.42425 315 316 300 48773 1694 0.4215 305 24612 1015 0.425 309 877 0.4295 315 1533 76.5 22.51184834 42.85714286 2.992220227 0.23 0.65 0.644705882 22
423 422 94 97 0.425 0.4275 315 316 331 48242 1470 0.4315 302.25 23358 971 0.4295 304 901 0.4385 303.5 1498 59.66666667 19.58121109 40.90909091 3.483870968 0.27 0.8 0.504524887 25
424 423 100 18 0.417 0.434 315 319 309 47503 1507 0.43325 306.5 22618 718 0.43225 312.75 666 0.4365 324 1211 59.33333333 25.74031891 54.18994413 2.983293556 0.43 0.64 0.630841121 25
425 424 96 62 0.419 0.442 315 318 316 60508 1682 0.44175 309.5 25882 737 0.44075 313.5 920 0.444 302.5 1040 56.33333333 22.52873563 51.76470588 2.53164557 0.35 0.76 0.637583893 20
426 425 92 23 0.417 0.444 315 317 322 54062 1535 0.43775 318 25464 884 0.438 308.25 803 0.444 247.5 1281 73.33333333 26.11111111 44.86486486 3.624078624 0.41 0.79 0.589073634 22
427 426 102 65 0.419 0.4235 315 319 309 45059 1619 0.4265 300 25013 1001 0.42225 305 858 0.419 313.5 1362 62.5 31.45400593 52.69461078 3.276622558 0.39 0.8 0.694638695 23
428 427 87 122 0.423 0.438 315 320 317 52164 1802 0.43075 299.25 24210 920 0.43575 309.25 886 0.4425 315 1256 62.16666667 31.99534613 39.20454545 2.678062678 0.38 0.6 0.746575342 23
429 428 95 44 0.419 0.418 315 317 299 47937 1794 0.41925 304.25 23277 921 0.4145 299.75 758 0.418 304 1001 59.33333333 28.55450237 37.28813559 2.5 0.18 0.78 0.767058824 20
430 429 88 103 0.425 0.445 314 319 314 51457 1526 0.4425 300 20014 893 0.445 307.25 738 0.449 305 1228 63.66666667 28.07881773 52.15053763 3.324099723 0.28 0.66 0.729216152 20
431 430 94 33 0.421 0.44025 315 321 312 53017 1575 0.44225 311.25 24596 887 0.44675 316.75 956 0.4395 298 1234 55.95 32.44853738 48.64864865 2.920560748 0.5 0.74 0.768518519 22
432 431 107 91 0.417 0.44625 315 321 323 59351 1941 0.44375 323.5 26540 789 0.44575 314 912 0.453 322 1379 48.03333333 29.55421024 47.82608696 3.718535469 0.38 0.84 0.801843318 23
433 432 108 23 0.417 0.436 315 319 306 44749 1351 0.43675 310 24338 789 0.43675 306 751 0.447 309.5 1225 53.08333333 24.30011198 51.12359551 3.436018957 0.49 0.84 0.567307692 22
434 433 109 74 0.417 0.45075 315 321 322 59578 1818 0.44675 316.5 27409 934 0.45475 321.75 1116 0.459 334 1624 47.4 27.97586396 54.05405405 3.27689787 0.39 0.71 0.818807339 21
435 434 104 64 0.419 0.4415 315 318 320 61167 1992 0.44175 325.25 26540 1034 0.44075 320.75 1080 0.444 321.5 1176 52.5 29.57264957 50.83798883 2.712060012 0.35 0.74 0.665943601 19
436 435 102 100 0.425 0.43925 315 317 298 53016 1780 0.438 308 24000 1004 0.43925 302.25 948 0.449 305 1242 51.83333333 28.26815642 62.06896552 3.303684879 0.31 0.8 0.544217687 22
437 436 98 28 0.419 0.42675 315 317 301 52551 1636 0.4275 294.5 21187 641 0.428 313 987 0.436 303 1410 79.5 27.7499709 45 5.460662526 0.3 0.85 0.676814988 24
438 437 95 65 0.419 0.4505 315 318 323 57839 1990 0.45125 328 27521 1172 0.44775 318.5 1017 0.4545 331 1512 50 25.9529148 49.13294798 0.982800983 0.19 0.52 0.603982301 21
439 438 105 36 0.421 0.4405 315 314 312 57325 1545 0.444 301.5 23583 718 0.443 314.75 880 0.451 311 1250 39.83333333 32.30593607 60.60606061 3.210175651 0.35 0.57 0.788990826 20
440 439 104 87 0.425 0.44025 315 318 302 46554 1530 0.4435 303.75 23984 896 0.44 301.5 872 0.4495 1862.5 1060 49.5 34.8581355 57.77777778 3.042959427 0.35 0.8 0.69751693 24
441 440 75 56 0.428 0.45475 315 322 328 59752 1834 0.45775 316.5 24820 810 0.458 328.5 898 0.4585 319 766 44.05 23.70804475 38.02083333 4.255319149 0.35 0.72 0.630289532 23
442 441 98 111 0.421 0.44725 315 320 313 52148 1550 0.442 298 21991 686 0.44675 314.25 938 0.4525 307.5 788 57.2 31.35639758 50 2.858809802 0.34 0.66 0.749435666 23
443 442 75 12 0.429 0.431 314 317 313 52936 1743 0.428 306.75 24033 929 0.43375 309.25 864 0.4285 303.5 830 68.83333333 36.44595359 53.64583333 2.422680412 0.35 0.65 0.670644391 20
444 443 108 112 0.417 0.4375 314 317 304 43034 1272 0.4345 307.75 22409 791 0.43725 311.75 716 0.4385 309.5 1068 52.83333333 29.79942693 61.5819209 2.915951973 0.4 0.71 0.813364055 20
445 444 80 14 0.421 0.42575 314 318 305 46586 1675 0.423 307.5 20962 714 0.4265 300 794 0.425 310 1197 70.26666667 22.58630778 38.37837838 3.057553957 0.39 0.72 0.649411765 21
446 445 96 9 0.421 0.43825 317 321 320 52792 1839 0.43975 321.5 24386 875 0.44025 322.75 929 0.437 324 1533 59.33333333 26.36054422 50.80213904 2.362204724 0.28 0.59 0.791762014 20
447 446 101 33 0.417 0.4235 315 317 304 47905 1650 0.42325 302.25 22940 749 0.425 309 934 0.4305 314.5 2009 73.16666667 26.07398568 35.91160221 2.386495925 0.22 0.62 0.687943262 20
448 447 106 34 0.421 0.449 315 317 323 52262 1741 0.44525 312.5 25930 886 0.4515 314.75 774 0.456 319.5 1320 53.53333333 25.91380251 43.33333333 4.756575266 0.35 0.91 0.635321101 23
449 448 106 84 0.421 0.442 315 317 310 51313 1542 0.436 308 24489 1024 0.44275 315.5 1068 0.4525 303.5 1631 55.65 25.72074618 44.18604651 4.606060606 0.38 0.78 0.686936937 22
450 449 106 26 0.417 0.44225 314 318 317 56087 1486 0.4435 320.5 24804 826 0.44425 317 1022 0.454 324 1466 57.28333333 33.55592654 42.32804233 3.181336161 0.34 0.58 0.695749441 23
451 450 109 120 0.417 0.44425 314 320 310 52204 1671 0.44175 310.25 24000 868 0.4435 315 1006 0.4355 307.5 1418 50.98333333 35.64189189 56.66666667 2.576489533 0.36 0.69 0.876355748 22
452 451 102 9 0.417 0.437 314 318 310 49400 1654 0.44375 316.75 25464 947 0.43875 316.5 992 0.4385 311 1365 63.16666667 40.96989967 58.15217391 2.312138728 0.42 0.81 0.707093822 22
453 452 104 14 0.425 0.43525 314 318 317 46554 1608 0.4315 313.25 24917 929 0.438 315.25 819 0.438 315 784 51.33333333 23.98843931 41.37931034 3.658536585 0.42 0.45 0.69212963 24
454 453 102 65 0.417 0.44025 314 318 306 47310 1750 0.44575 312.5 27103 1116 0.4455 314 1057 0.458 316.5 1530 57.66666667 26.23922414 53.2967033 3.391684902 0.36 0.71 0.599045346 26
455 454 106 34 0.421 0.443 314 323 298 53596 1754 0.44525 311 23566 962 0.4405 301.25 868 0.4465 298 1274 57.83333333 32.65421619 65.51724138 3.143960287 0.31 0.65 0.713302752 24
456 455 108 73 0.417 0.453 315 320 322 57426 2135 0.45125 312.5 26417 1024 0.457 321 1026 0.457 318 1684 59.66666667 31.36830719 69.94219653 2.81447444 0.32 0.63 0.767653759 23
457 456 92 46 0.433 0.4435 315 316 318 53933 1830 0.44325 309.5 31250 1183 0.443 321 1136 0.4415 304 2264 62.16666667 20.34559643 44 3.00245098 0.37 0.68 0.514606742 22
458 457 108 77 0.421 0.446 315 316 317 49030 1930 0.446 316.75 27553 1085 0.452 321.25 970 0.4485 310 990 56.83333333 31.59609121 53.80434783 4.355400697 0.43 0.65 0.653579677 22
459 458 92 51 0.421 0.432 315 318 310 49448 1932 0.4345 314 24933 1036 0.4385 318.25 985 0.436 296 1050 61 21.51968941 41.84782609 3.473389356 0.23 0.6 0.55971897 24
460 459 102 86 0.421 0.4455 315 318 309 48998 1680 0.44825 320.5 27344 1148 0.4465 311 803 0.4475 312 1407 52 25.68704431 55.15151515 2.826217679 0.32 0.5 0.725446429 24
461 460 109 46 0.413 0.451 315 326 322 54769 1853 0.45175 301 24965 816 0.452 325.5 934 0.4595 304 1124 35.83333333 32.85714286 63.44086022 3.728813559 0.39 0.9 0.831509847 25
462 461 106 141 0.413 0.4425 315 319 315 54059 1852 0.44025 313.5 25978 1017 0.4435 310.75 1057 0.443 299.5 1064 62 25.20413718 44.38502674 3.770491803 0.4 0.8 0.568445476 23
463 462 102 32 0.417 0.42925 314 318 306 47889 1675 0.435 312.5 21911 968 0.43175 303.5 898 0.4345 309.5 1204 65.16666667 27.81232335 46.875 2.777777778 0.39 0.85 0.727688787 23
464 463 104 122 0.417 0.444 314 318 311 55235 1754 0.44775 311.5 25014 878 0.43875 312 826 0.442 300 1064 62.5 24.94382022 43.09392265 NULL 0.43 0.8 0.86199095 22
465 464 104 34 0.417 0.4525 315 318 318 51699 1698 0.45275 310.25 24015 931 0.452 314.25 873 0.455 308 1344 52.83333333 38.5331144 58.33333333 2.465753425 0.33 0.86 0.689189189 20
466 465 103 146 0.417 0.432 314 318 303 42809 1465 0.4275 307 23116 906 0.4305 306.75 766 0.43 303.5 1477 58.16666667 33.73842593 57.05882353 2.786377709 0.45 1.21 0.721153846 20
467 466 109 97 0.417 0.437 314 320 299 45526 1544 0.43875 301.25 20882 796 0.43775 306.25 872 0.44 302 1278 49.66666667 33.88666285 62.65060241 3.055721989 0.3 0.77 0.698412698 20
468 467 103 53 0.421 0.43375 315 320 322 55396 1995 0.43825 328.25 23004 926 0.43175 318.25 982 0.444 305 1144 62.5 21.56976744 48.14814815 3.039158387 0.28 0.76 0.632054176 19
469 468 98 81 0.421 0.43225 315 319 312 46298 1902 0.42625 304.75 20930 948 0.429 314.5 900 0.4325 306.5 1533 67 24.11594203 51.38121547 2.812687014 0.37 0.7 0.748251748 22
470 469 83 29 0.425 0.4355 315 315 306 50477 1908 0.43475 304 21638 936 0.432 310.5 1027 0.436 297 1365 68.66666667 30.00580383 60.12269939 2.166476625 0.39 0.64 0.666666667 22
471 470 106 92 0.417 0.44525 315 321 305 46988 1589 0.4445 307.5 21059 989 0.44125 316 970 0.438 309.5 1256 51.66666667 40.91671325 65.36312849 3.065355697 0.4 0.81 0.840182648 22
472 471 101 67 0.417 0.42975 315 316 291 41169 1295 0.433 299.25 23534 931 0.43425 288.5 770 0.4345 290.5 1172 50.66666667 30.49199085 62.2754491 2.120141343 0.43 0.63 0.538641686 23
473 472 105 46 0.421 0.433 315 320 302 47251 1577 0.432 298.75 22329 1029 0.4345 307.5 906 0.443 312.5 1337 69.33333333 29.06032483 50.56179775 2.796352584 0.29 0.66 0.494252874 22
474 473 99 73 0.421 0.44 315 320 320 50557 1844 0.436 314 24724 1097 0.4425 321 1036 0.441 302.5 1148 60.16666667 24.8600224 45.21276596 2.736842105 0.2 0.69 0.534988713 22
475 474 88 25 0.421 0.438 315 319 307 48130 1787 0.43725 313.75 28196 1172 0.437 312 919 0.436 311 1456 59 23.3995585 43.42857143 3.327495622 0.44 0.79 0.535307517 25
476 475 102 119 0.417 0.42625 315 319 309 47953 1857 0.42625 300.5 21878 1026 0.425 307 824 0.425 292 1148 47.66666667 36.34782609 51.36612022 3.176341731 0.3 0.48 0.724465558 22
477 476 94 24 0.425 0.445 314 318 316 53515 1692 0.45225 314.75 29434 1143 0.45325 319.25 957 0.452 313.5 1393 60 29.88950276 56.04395604 3.468208092 0.32 0.82 0.605568445 22
478 477 102 20 0.421 0.446 314 323 328 56972 1832 0.437 314.5 24032 858 0.444 327.75 770 0.4425 324.5 774 28.56666667 45.84050488 63.00578035 2.181208054 0.48 0.68 0.70917226 21
479 478 108 72 0.417 0.4555 314 320 318 56328 1886 0.45525 315 21686 772 0.4565 318.25 880 0.461 323.5 1239 30.23333333 45.51835853 61.46341463 3.100775194 0.43 0.76 0.734782609 23
480 479 106 20 0.421 0.449 314 320 312 46683 1776 0.4415 313.25 19194 866 0.45 314 733 0.4445 311 1071 45.16666667 39.24914676 66.12903226 2.973568282 0.4 0.87 0.567928731 20
481 480 109 71 0.417 0.45925 314 320 317 42714 1472 0.4575 318.5 21627 875 0.45075 314 679 0.4575 310 1043 26.33333333 28.14042787 54.85714286 2.88184438 0.33 0.65 0.769230769 21
482 481 105 87 0.417 0.43375 314 319 312 45176 1585 0.43525 306.5 21975 882 0.43275 296.75 588 0.4405 306.5 1120 34.65 31.16438356 50.82872928 2.227171492 0.42 0.68 0.813953488 21
483 482 104 25 0.421 0.45275 315 320 309 53354 1696 0.458 310 25110 915 0.451 303 922 0.455 313 1288 34.5 23.59234234 49.13294798 2.824551874 0.32 0.69 0.622362869 20
484 483 96 31 0.421 0.45 315 320 321 62887 2053 0.45175 335 27650 1099 0.44925 311 1054 0.4545 309.5 1225 76.16666667 25.16129032 47.80487805 3.111814346 0.34 1.12 0.786995516 21
485 484 100 87 0.421 0.441 315 321 302 48724 1596 0.4485 299.25 25190 1004 0.43825 295.25 737 0.4415 283 1046 57.66666667 24.68856172 66.45962733 3.636363636 0.25 0.63 0.585972851 23
486 485 103 24 0.417 0.42275 315 317 303 41780 1466 0.4295 306.25 22809 1069 0.425 303.25 882 0.424 296.5 980 62.66666667 41.41904184 64.1509434 2.421924793 0.39 0.87 0.910138249 21
487 486 85 93 0.421 0.43025 314 322 306 43789 1549 0.42425 296.5 21316 1031 0.4235 307.5 803 0.4315 304.5 872 57 42.3880597 58.75706215 2.142857143 0.26 0.64 0.792626728 23
488 487 98 118 0.417 0.43075 314 318 320 52550 1362 0.42875 313 23888 864 0.4305 311.75 807 0.4355 313.5 1550 52.48333333 28.86480319 43.25842697 3.126843658 0.35 0.87 0.618705036 20
489 488 88 35 0.421 0.43525 314 321 316 47872 1642 0.44 317.25 20384 782 0.43675 325.25 750 0.4395 327.5 1281 67.31666667 20.85924251 38.62433862 3.139269406 0.29 0.7 0.607888631 20
490 489 106 78 0.421 0.4385 314 320 314 47889 1642 0.45 315.5 23936 878 0.43975 313 933 0.4485 303 914 61.45 32.95774648 51.39664804 3.163841808 0.39 0.78 0.709302326 23
491 490 100 83 0.417 0.425 314 320 316 48808 1617 0.426 317.25 22361 828 0.42725 312.5 947 0.424 301.5 906 63.56666667 26.27070246 44.08602151 2.160318363 0.38 0.49 0.630170316 20
492 491 100 122 0.417 0.43775 314 318 311 45510 1444 0.44625 318.5 21846 770 0.44425 316.25 900 0.443 319 1270 53.71666667 25.93210907 50.25906736 2.211874272 0.26 0.73 0.719178082 21
493 492 98 4 0.417 0.424 314 318 305 47598 1342 0.42825 292.75 20946 707 0.431 308.25 868 0.4325 292 1438 54.36666667 24.23188406 54.9132948 2.522421525 0.49 0.77 0.751184834 24
494 493 98 35 0.417 0.4315 314 320 320 51248 1820 0.432 316.5 22602 802 0.434 316.25 1015 0.4415 317 1894 49.46666667 32.11678832 56.4516129 2.282377919 0.4 0.73 0.793764988 23
495 494 102 18 0.417 0.4425 310 320 316 49207 1620 0.43975 313 22088 849 0.4415 320.5 994 0.4405 314 1256 62.83333333 28.60335196 52.22222222 2.370689655 0.32 0.64 0.588235294 20
496 495 83 29 0.425 0.44475 316 318 323 55058 1636 0.44375 310.5 27634 770 0.4405 313.75 814 0.447 313 794 67.16666667 14.3575419 36.81318681 3.941176471 0.44 0.72 0.67816092 25
497 496 97 38 0.423 0.443 315 316 310 50007 1820 0.4355 306.75 25808 1078 0.43925 314.5 942 0.4285 296.5 1124 64.4 30.09491904 49.44444444 3.463203463 0.43 0.82 0.464285714 23
498 497 105 79 0.421 0.4325 314 319 321 56216 1839 0.433 310.25 23454 756 0.43175 317 875 0.4365 319.5 878 63.45 25.26193248 37.83783784 1.53937241 0.45 0.83 0.626450116 23
499 498 105 43 0.417 0.44625 314 318 321 52920 1897 0.4445 316 26396 1150 0.44625 316.5 1057 0.45 325.5 928 57.5 21.47138965 53 3.867403315 0.54 0.78 0.630841121 23
500 499 100 25 0.417 0.45675 314 318 312 49834 1766 0.45125 306.5 23599 915 0.4535 303.75 961 0.4565 315.5 1414 59.66666667 33.08470964 53.40314136 3.52303523 0.48 0.84 0.69837587 22
501 500 90 98 0.425 0.4455 314 321 315 49593 1614 0.4395 315.75 19914 914 0.44725 319.75 882 0.446 1808 1292 60.83333333 35.69372481 60.11560694 2.266124346 0.48 0.5 0.493421053 20
502 501 94 34 0.421 0.44175 314 321 310 52245 1886 0.4395 319.25 26106 1052 0.4445 324.25 1088 0.444 317 1662 57.16666667 18.87755102 35.51912568 3.724928367 0.55 0.81 0.712328767 22
503 502 94 52 0.421 0.4505 314 319 323 56039 1962 0.451 316.75 25158 1057 0.45125 323 884 0.4555 329 1726 61.16666667 20.54495913 39.57219251 4.043126685 0.45 0.68 0.590909091 22
504 503 109 135 0.417 0.443 314 321 312 46699 1594 0.439 313.25 24644 784 0.44 319.25 700 0.4365 326 990 39.65 53.1587934 89.14285714 3.757225434 0.48 0.92 0.891891892 23
505 504 92 24 0.421 0.4395 315 318 308 47438 1846 0.441 305 22345 931 0.446 317.75 957 0.4465 304.5 1036 61.16666667 20.88036117 45.40229885 3.273137698 0.19 1.04 0.598173516 20
506 505 96 64 0.421 0.441 315 317 302 45027 1610 0.43875 306 19548 850 0.44325 311.5 928 0.4475 311.5 1214 66.83333333 23.3163554 48.5380117 3.052064632 0.25 0.83 0.675174014 20
507 506 100 81 0.421 0.43025 315 323 302 46136 1626 0.4265 305.5 20866 854 0.425 306.75 873 0.4295 315.5 1330 63.66666667 33.50846468 44.38202247 3.106682298 0.43 0.68 0.719817768 19
508 507 96 21 0.421 0.433 315 323 311 45092 1582 0.43225 310 19178 833 0.433 306.75 749 0.4395 307 966 49.33333333 27.3255814 49.70760234 2.614379085 0.36 0.65 0.903669725 18
509 508 106 82 0.417 0.4345 315 318 318 50862 1934 0.4455 321.25 26187 1092 0.44 311.5 1078 0.442 296.5 1088 77.16666667 21.22425629 39.13043478 2.840909091 0.38 0.93 0.793721973 20
510 509 105 8 0.417 0.4395 314 318 302 51200 1746 0.43925 306.75 23132 805 0.442 305 796 0.4445 301 1032 51.61666667 21.64477441 44 2.719546742 0.29 0.66 0.822988506 22
511 510 105 8 0.417 0.43675 314 318 308 51602 1426 0.4365 302.75 21477 634 0.43725 296.5 830 0.4415 289 826 52.95 24.17519909 50.5952381 3.174603175 0.26 0.73 0.812641084 22
512 511 105 8 0.417 0.4305 314 318 305 49071 1606 0.43325 303.75 22827 850 0.43 305.5 754 0.44 304 910 NULL 23.84189463 46.19565217 3.339296363 0.4 0.52 0.828235294 22
513 512 105 38 0.417 0.435 314 320 312 47776 1463 0.433 304.75 23148 796 0.43475 309 1026 0.442 304 1026 54 22.84408909 47.70114943 3.038674033 0.29 0.66 0.655889145 20
514 513 105 38 0.417 0.446 314 317 318 50605 1503 0.44975 321 22602 686 0.4485 318.75 945 0.449 302.5 900 49.35 23.74378796 52.04678363 3.045977011 0.33 0.63 0.619047619 20
515 514 105 38 0.417 0.444 314 317 316 54158 1766 0.4505 321 25448 910 0.445 320.5 990 0.4515 321.5 980 60.85 27.25770925 53.26086957 2.891844997 0.25 0.55 0.71954023 20
516 515 106 59 0.417 0.435 315 319 309 47390 1762 0.43475 308.25 21220 864 0.43325 304.25 817 0.435 298.5 1236 51.83333333 36.15886189 58.62068966 2.293862368 0.36 0.7 0.742081448 20
517 516 104 96 0.417 0.42775 315 319 304 44561 1542 0.429 299 19081 835 0.42675 302.75 889 0.4285 305 1435 54.16666667 30.22170362 57.22222222 2.094240838 0.28 0.75 0.717647059 20
518 517 101 38 0.421 0.4535 315 318 317 56167 1787 0.4495 318.5 23149 864 0.453 317.75 805 0.4555 317 1064 43.5 27.97586396 52.43243243 2.77324633 0.4 0.68 0.885964912 20
519 518 98 116 0.421 0.432 315 317 303 42359 1463 0.435 315 25672 976 0.43575 308.5 794 0.4395 330.5 1390 67.5 29.86651835 53.43915344 2.714932127 0.37 0.86 0.599088838 22
520 519 100 18 0.421 0.43675 315 320 305 42841 1416 0.43975 310.25 21846 970 0.43525 302 672 0.433 313 1096 50.83333333 39.58927553 56.80473373 2.798400914 0.31 0.72 0.931034483 22
521 520 102 45 0.425 0.43425 315 322 318 52856 1771 0.43325 324 27923 1118 0.4345 316.5 942 0.4405 306.5 1256 53.33333333 34.77508651 53.33333333 3.556609366 0.31 0.58 0.594405594 23
522 521 102 94 0.425 0.444 315 318 297 50107 1788 0.43825 314 27553 955 0.43925 302.5 856 0.448 300.5 1124 57.33333333 25.01411632 50.57471264 3.544450901 0.36 0.7 0.725663717 23
523 522 103 71 0.421 0.43575 314 318 315 52277 1566 0.437 308.75 23984 760 0.43975 322 1017 0.446 300.5 1295 64.98333333 26.93181818 40.8839779 2.482929857 0.41 0.52 0.637413395 21
524 523 103 119 0.425 0.4545 314 324 315 50589 1614 0.452 319.75 26814 917 0.456 324 964 0.4625 323.5 1396 55.03333333 35.21667581 51.32275132 2.795573675 0.39 0.6 0.689277899 21
525 524 100 37 0.417 0.4435 314 324 311 50621 1864 0.4505 318.75 25946 1158 0.44775 309.5 961 0.45 309 1082 69.5 25.02780868 50 3.314917127 0.4 0.83 0.628959276 22
526 525 96 36 0.421 0.425 314 318 299 47229 1558 0.4295 295.75 19644 833 0.4255 305.25 959 0.433 314 1631 56.2 28.78787879 37.5 2.787068004 0.35 0.74 0.793981481 22
527 526 106 44 0.417 0.458 314 320 322 53242 1815 0.4525 323.75 27264 976 0.45675 322 992 0.4505 303.5 1043 41.76666667 31.93420306 58.72093023 3.428571429 0.35 1.89 0.796536797 24
528 527 106 94 0.417 0.4475 314 321 313 51474 1706 0.44175 319.75 23261 858 0.44425 308.75 877 0.451 321.5 1446 48.31666667 36.87214612 64.73988439 3.244166192 0.42 0.77 0.608695652 23
529 528 106 104 0.417 0.4435 315 322 316 46780 1638 0.44 305.25 21123 816 0.43475 314.75 886 0.4525 325 1648 57 40.51509577 66.48648649 2.906976744 0.4 0.5 0.7695962 20
530 529 95 24 0.421 0.4275 315 316 302 46281 1603 0.43225 306.5 23310 873 0.42925 304.25 889 0.429 299.5 1085 60.83333333 23.6645606 60.97560976 3.272498427 0.26 0.48 0.584295612 23
531 530 103 89 0.417 0.44175 315 318 312 45140 1886 0.43925 305 22329 976 0.43525 314 985 0.443 306.5 1376 55.83333333 34.93424814 56.47058824 3.227699531 0.28 0.69 0.702078522 24
532 531 103 130 0.417 0.4265 315 322 297 40012 1318 0.43 294 20994 914 0.4335 306.5 833 0.4365 293.5 1428 51.51666667 32.53747918 54.14364641 3.468208092 0.33 0.68 0.644859813 23
533 532 103 19 0.417 0.4225 315 317 300 45429 1561 0.43125 303.25 20624 934 0.42625 305 1004 0.432 296.5 1337 47.83333333 31.7571512 45.50898204 2.979274611 0.44 0.6 0.645833333 20
534 533 103 30 0.417 0.44375 315 320 314 45879 1734 0.4395 312.75 20464 1012 0.44125 306.25 938 0.4485 324 1074 50.78333333 57.79816514 63.38797814 2.45398773 0.44 0.52 0.769574944 23
535 534 101 97 0.417 0.437 315 321 314 44063 1713 0.43475 312 21590 928 0.43625 309 821 0.436 302 788 70 47.34463277 55 1.612903226 0.29 0.42 0.631336406 22
536 535 106 66 0.417 0.433 314 320 307 44625 1255 0.43625 313.25 25029 849 0.4305 309.5 858 0.428 302 872 45.81666667 46.27277747 69.23076923 2.442827443 0.2 0.56 0.746411483 21
537 536 106 81 0.413 0.42525 314 317 311 46538 1325 0.4195 310.25 24515 970 0.42725 307.75 740 0.4355 310 777 57.6 41.21863799 65.14285714 3.047404063 0.26 0.76 0.684085511 22
538 537 103 37 0.421 0.443 312 313 312 48701 1628 0.44225 320 24692 850 0.444 315.25 822 0.4465 310 917 58.98333333 31.39140271 60.57142857 2.691867125 0.51 0.82 0.941834452 21
539 538 80 22 0.425 0.43975 315 323 321 50959 1654 0.4335 316.25 24901 1045 0.43825 322.5 1092 0.434 309.5 1158 65.5 23.83654938 45.74468085 2.521008403 0.38 0.6 0.754022989 22
540 539 90 66 0.421 0.42775 312 312 309 42954 1505 0.42075 306.5 22361 900 0.42925 313.25 882 0.424 314.5 1134 78 32.48993675 60.84656085 2.412868633 0.32 0.55 0.754761905 22
541 540 96 34 0.417 0.42875 315 324 321 52872 1678 0.42825 317.75 20480 812 0.427 321.5 859 0.4265 309 1246 50.66666667 31.30733945 60.33519553 1.991150442 0.25 0.62 0.734741784 20
542 541 103 96 0.417 0.4295 315 318 304 49994 1668 0.43425 305.25 22425 882 0.43225 308.5 985 0.434 304.5 1522 62.66666667 25.26564345 53.65853659 2.704257768 0.31 0.86 0.601769912 22
543 542 105 108 0.417 0.42425 314 313 316 47583 1741 0.4235 313.75 22457 852 0.424 304.75 780 0.424 322.5 1656 47.66666667 40.28021016 61.57894737 3.418339664 0.33 0.57 0.839243499 25
544 543 106 44 0.413 0.42775 314 316 311 49930 1715 0.426 315 23856 954 0.4295 302.5 936 0.4345 311.5 1295 62.5 28.81257276 40.8839779 2.838557067 0.17 0.57 0.569506726 22
545 544 107 127 0.413 0.4455 314 312 316 53885 1892 0.4485 304.25 25930 931 0.44175 312.25 882 0.4545 301 976 52.66666667 32.39823982 53.51351351 3.201396973 0.31 0.42 0.747747748 22
546 545 102 45 0.417 0.43125 312 313 311 48934 1349 0.43375 311 22409 793 0.43325 312 788 0.4375 308.5 1162 60.83333333 40.39238315 57.86516854 3.204047218 0.1 0.47 0.631205674 25
547 546 103 80 0.421 0.433 314 319 307 46731 1536 0.438 305.75 21027 800 0.4345 307.75 780 0.44 312 1498 49.9 39.62795941 56.59340659 2.78223649 0.38 0.75 0.795823666 21
548 547 109 98 0.417 0.45175 312 315 319 53017 1766 0.45225 323.75 25720 747 0.4535 313.25 922 0.459 314 1484 41.01666667 39.15431082 47.44897959 2.536640361 0.49 0.86 0.695259594 22
549 548 109 138 0.417 0.4575 312 317 320 51216 1740 0.45325 323 24354 800 0.45575 328.75 798 0.4515 348 1533 38.98333333 47.14285714 70.32967033 1.873278237 0.42 0.84 0.641255605 21
550 549 97 103 0.421 0.43075 312 312 318 61440 2070 0.43275 307 24482 954 0.4365 308.25 901 0.4355 305.5 1088 60.5 24.91620112 42.85714286 4.656577416 0.25 0.48 0.589164786 21
551 550 85 32 0.433 0.4375 312 312 308 54094 1871 0.43925 303.25 21589 858 0.439 311 780 0.439 308 1362 58.83333333 18.20744081 30.21978022 3.719008264 0.14 0.42 0.651376147 20
552 551 105 180 0.417 0.42775 312 313 301 45172 1484 0.4295 309.5 20368 936 0.4315 311.25 819 0.4325 305 1180 51.83333333 34.98273878 58.79120879 2.5769956 0.25 0.59 0.793981481 22
553 552 105 215 0.417 0.4215 312 312 350 43918 1556 0.4235 302.75 19676 872 0.42275 302 537 0.4225 299 1180 56.5 31.1023622 66.06060606 2.496798976 0.37 0.55 0.867298578 21
554 553 102 29 0.417 0.44625 312 313 298 47872 1456 0.587333333 411.6666667 24494 758 0.447 307.25 742 0.4625 308.5 1253 59 26.02631875 50.88757396 3.300733496 0.29 0.52 0.65 23
555 554 106 130 0.417 0.434 312 314 313 47503 1549 0.43475 313.5 21477 718 0.43425 305.5 772 0.43 283.5 920 51.16666667 24.81375358 54.11764706 2.965864578 0.25 0.67 0.876168224 20
556 555 108 30 0.417 0.456 312 317 322 57646 1771 0.452 315.25 24997 826 0.454 321.25 956 0.46 326 1446 40.48333333 38.6951631 61.79775281 2.228571429 0.31 0.48 0.830107527 20
557 556 108 96 0.417 0.4325 312 316 311 52100 1764 0.432 310.5 21380 766 0.44025 319.75 1012 0.4385 310.5 1544 52.18333333 34.93699885 48.33333333 2.191464821 0.23 0.72 0.801843318 20
558 557 106 78 0.417 0.44075 312 312 302 42696 1461 0.442 306.75 20480 968 0.4415 310.25 892 0.4405 319.5 1244 43.66666667 35.13209668 62.94117647 2.249134948 0.3 0.49 0.684684685 20
559 558 109 34 0.413 0.42925 312 316 311 48338 1362 0.42975 316.75 20753 679 0.43075 316.5 936 0.428 308.5 1589 43.91666667 31.20365088 55.93220339 2.744425386 0.28 0.25 0.752403846 21
560 559 109 82 0.413 0.441 312 318 304 49190 1540 0.44 316 21927 649 0.44275 305.75 730 0.456 333.5 1806 41.58333333 32.13665316 60.81871345 2.533172497 0.31 0.57 0.736238532 22
561 560 105 35 0.417 0.42825 312 312 295 42873 1438 0.4345 312 22506 901 0.42675 307 838 0.432 309.5 1466 42.66666667 36.81225184 54.4973545 2.368265246 0.39 0.55 0.73364486 20
562 561 70 56 0.433 0.435 312 312 294 47214 1676 0.43075 302 25303 1200 0.43375 293.75 877 0.437 357.5 1631 68.16666667 14.36814772 33.33333333 2.66357846 0.2 0.42 0.586363636 21
563 562 104 138 0.417 0.43225 312 317 316 52052 1657 0.429 301.75 20239 793 0.43425 300.75 838 0.4385 317 1340 70 36.05248146 60 2.026666667 0.23 0.43 0.662707838 23
564 563 104 101 0.415 0.43275 312 312 316 49239 1843 0.424 317 24226 896 0.42625 309.25 840 0.426 299 1204 52.16666667 34.31430253 45.34883721 2.880184332 0.25 0.8 0.671264368 25
565 564 104 27 0.415 0.43 312 316 310 50428 1740 0.4345 313.5 24467 1036 0.436 310.75 926 0.439 308.5 1022 47.66666667 37.48571429 54.34782609 3.112391931 0.27 0.49 0.689814815 25
566 565 106 137 0.413 0.441 312 318 316 44931 1586 0.43875 306.75 19853 830 0.443 319.75 861 0.438 307 1288 49.33333333 49.29017604 78.57142857 2.624531334 0.39 0.57 0.767123288 25
567 566 90 86 0.433 0.45775 312 321 315 47728 1461 0.45675 323.25 23261 740 0.456 312.5 726 0.4535 310 1141 47.35 35.54959786 59.89304813 2.218614719 0.5 0.84 0.710467706 21
568 567 105 129 0.421 0.4465 312 316 318 52534 1852 0.44325 309.25 20223 756 0.44175 314 845 0.443 312.5 1242 45.06666667 44.65909091 67.0212766 2.373417722 0.26 0.88 0.760964912 23
569 568 107 73 0.417 0.4395 312 317 315 51522 1866 0.43125 308.25 18840 698 0.43625 316 870 0.439 335.5 1522 50.71666667 34.19838524 64.59627329 2.96969697 0.31 0.92 0.410377358 25
570 569 106 47 0.417 0.4295 312 312 317 52068 1760 0.42775 320.75 27778 1031 0.425 310.25 924 0.4355 318.5 1158 46.33333333 32.21590909 56.75675676 3.105263158 0.38 0.62 0.772300469 27
571 570 108 87 0.421 0.4405 312 314 311 48483 1533 0.4405 309.25 27200 1074 0.44275 311 1003 0.4545 308 1666 50 39.96728462 67.55319149 2.959240648 0.37 0.54 0.770419426 25
572 571 106 41 0.417 0.44725 312 312 308 53226 1787 0.4475 306.75 24467 1015 0.44875 313.5 810 0.4505 320.5 1382 56.5 34.55555556 51.79487179 2.891844997 0.38 0.66 0.507865169 23
573 572 106 156 0.417 0.42175 312 312 288 42037 1345 0.42025 288.5 19226 728 0.4225 290.5 740 0.4285 299.5 1134 56.66666667 29.24807578 55.88235294 2.90237467 0.37 0.63 0.760095012 26
574 573 98 128 0.421 0.41775 312 313 296 44320 1521 0.408 284 17168 728 0.4133 296.75 830 0.417 292 962 65.33333333 26.13095238 46.9273743 2.489866821 0.25 0.36 0.520383693 25
575 574 108 48 0.413 0.43425 312 312 301 47856 1439 0.43475 304.25 22859 864 0.44075 313.25 933 0.445 299 752 52.66666667 33.35208099 57.06214689 3.287981859 0.19 0.43 0.713625866 32
576 575 106 164 0.417 0.43175 312 312 299 46780 1564 0.43325 306.25 22248 971 0.43775 304.75 889 0.437 299 1158 62.83333333 29.84988453 60.47904192 2.43902439 0.22 0.86 0.738636364 25
577 576 104 24 0.417 0.43 312 312 298 52599 1778 0.43175 306.25 23904 870 0.433 304 905 0.436 316 1414 63.56666667 30.89430894 54.94505495 2.593818985 0.21 1.05 0.872727273 27
578 577 108 92 0.417 0.43375 312 312 308 53901 1759 0.42775 302.25 21075 774 0.43325 308 889 0.4365 297 1085 55.56666667 40.76834862 63.18681319 2.592165899 0.19 0.82 0.781990521 23
579 578 108 17 0.417 0.45225 312 316 323 55267 1897 0.4505 312.75 24612 744 0.4565 317.25 868 0.4585 329.5 1442 40.1 28.96825397 50.84745763 3.171856978 0.4 0.77 0.645089286 21
580 579 106 94 0.413 0.45325 312 322 311 47198 1521 0.45125 319.25 24547 987 0.45075 309 765 0.4555 308 1152 53.33333333 36.42384106 56.54450262 3.010033445 0.22 0.52 0.697986577 20
581 580 93 18 0.421 0.4255 312 313 308 44963 1701 0.425 306.5 19532 804 0.426 307.5 1020 0.429 312 1330 62.16666667 32.73672055 56.98924731 2.382302893 0.23 0.4 0.662763466 25
582 581 104 95 0.415 0.418 312 312 305 44658 1547 0.421 304.75 21509 868 0.42375 300.75 833 0.431 309.5 1970 68.83333333 31.74984967 54.23728814 3.141993958 0.36 0.48 0.689903846 25
583 582 106 25 0.417 0.43925 312 312 317 54432 1811 0.445 322.25 28587 948 0.441 310 990 0.437 306 1298 67.16666667 25.78125 54.02298851 3.692115144 0.33 0.62 0.712962963 21
584 583 104 47 0.417 0.4485 312 315 325 54142 1934 0.44875 326.25 27055 1169 0.45325 324 962 0.4555 312.5 1382 53.16666667 37.43315508 55.44554455 3.99573788 0.43 0.65 0.719817768 22
585 584 108 42 0.417 0.4425 312 315 309 47149 1620 0.44825 328 26332 1104 0.44975 317 903 0.446 323 1253 40.66666667 39.34977578 72.52747253 3.376906318 0.23 0.4 0.77293578 23
586 585 106 38 0.417 0.4525 312 316 316 55572 1746 0.44725 308.5 22104 872 0.45025 319.25 901 0.457 322 1060 48 28.66449511 53.80434783 3.553299492 0.24 0.25 0.70246085 24
587 586 95 106 0.421 0.44225 312 319 308 48628 1624 0.4415 313.75 22168 936 0.4405 311.25 831 0.4425 302 1082 45.83333333 30.91537133 55.08982036 2.595051298 0.31 0.62 0.659142212 24
588 587 109 83 0.409 0.44575 312 319 310 47117 1493 0.45575 323.75 22554 905 0.451 313.75 742 0.4485 321.5 1407 37.66666667 38.27092511 68.61702128 2.542841349 0.2 0.52 0.794642857 20
589 588 108 40 0.417 0.4505 312 313 325 50590 1738 0.463 323.75 24612 990 0.4535 330.75 980 0.454 310.5 1110 42.16666667 32.67273701 60.77348066 2.448775612 0.4 0.96 0.652968037 21
590 589 108 98 0.417 0.44 312 313 310 58965 1899 0.44425 307.5 20657 896 0.44075 315 900 0.4385 311 970 45.16666667 34.5890411 68.42105263 2.608695652 0.31 0.63 0.671232877 20
591 590 108 37 0.417 0.43475 312 312 316 51972 1785 0.42375 313.75 22811 882 0.4255 311.25 998 0.4265 307 1036 47.66666667 25.35294118 10.75697211 3.107344633 0.21 0.68 0.751162791 23
592 591 106 81 0.417 0.44325 312 312 308 48210 1564 0.43825 304.5 21541 856 0.447 306.25 863 0.45 309.5 1204 54.16666667 31.80515759 68.18181818 2.994011976 0.4 0.41 0.630044843 23
593 592 98 113 0.421 0.435 312 316 306 51788 1421 0.435325 312 28196 959 0.431 316.5 766 0.445 329 1488 51.66666667 29.67479675 56.32183908 3.317535545 0.31 0.68 0.645833333 26
594 593 109 90 0.409 0.44775 312 315 318 51554 1804 0.4435 313.25 19436 780 0.448 322.5 1169 0.444 322.5 1575 55 30.73420603 62.94117647 2.229299363 0.31 0.56 0.756818182 24
595 594 106 128 0.413 0.43 312 315 324 48178 1642 0.437 314 21252 817 0.43475 325.75 896 0.4305 316.5 1026 56.33333333 47.47126437 71.72774869 2.561183836 0.29 0.82 0.757719715 20
596 595 72 28 0.433 0.44175 312 315 314 49770 1577 0.43525 308 21573 788 0.43975 310.25 956 0.438 305.5 1054 69.16666667 23.52610893 42.85714286 1.905311778 0.41 0.58 0.657407407 20
597 596 109 45 0.417 0.45375 312 317 317 54801 1746 0.456 311.5 22859 821 0.45875 318.75 894 0.466 311 1292 46.66666667 32.31347289 56.59340659 2.850877193 0.35 1.04 0.586363636 20
598 597 108 140 0.409 0.443 312 316 310 48596 1521 0.438 306 17796 693 0.4454 309.5 905 0.4505 305 1246 36 37.9640045 66.10169492 2.652200121 0.27 0.89 0.774774775 20
599 598 105 61 0.417 0.44275 312 312 320 51779 1687 0.44225 310 23213 849 0.43775 312.25 852 0.4425 310.5 1312 40 31.84892897 63.0952381 3.229527105 0.34 0.85 0.727472527 20
600 599 106 43 0.417 0.44925 312 315 320 48226 1920 0.442 302.75 19821 850 0.4545 314.5 961 0.4535 314 1407 47.5 27.84448256 55.62130178 3.310430981 0.37 0.95 0.838074398 27
601 600 108 107 0.413 0.43925 312 313 311 51297 1846 0.44475 318.75 25125 970 0.442 318 934 0.449 307 1568 58.33333333 26.55016911 56.21621622 3.496503497 0.26 0.82 0.836689038 23
602 601 109 141 0.417 0.43358 312 319 320 49046 1906 0.43375 314.75 22104 970 0.43475 313.25 905 0.442 318 1494 52.83333333 29.68568102 57.64705882 2.972651605 0.29 0.46 0.743764172 22
603 602 108 106 0.417 0.436 312 314 312 47294 1619 0.44075 313 23406 971 0.442 310 830 0.447 311.5 1180 41.48333333 39.32960894 62.16216216 3.06122449 0.29 0.57 0.581018519 22
604 603 108 32 0.417 0.45 312 313 311 49834 1456 0.443 313 23470 896 0.4455 306.5 896 0.439 303 1046 42.33333333 22.41758242 45.65217391 2.25921522 0.27 0.58 0.507042254 22
605 604 108 101 0.413 0.4375 312 313 307 43088 1497 0.433 306 19098 919 0.4385 304.5 761 0.4455 314.5 984 56.33333333 33.39050886 61.32596685 4.318181818 0.21 0.62 0.784269663 21
606 605 102 31 0.415 0.463 312 317 323 58836 2034 0.45675 313.75 24885 1004 0.463 316.5 896 0.4715 317.5 1295 37.83333333 31.44618834 61.40350877 3.87409201 0.28 0.5 0.617521368 25
607 606 108 58 0.413 0.455 312 316 315 43902 1586 0.4455 317.25 21011 912 0.4465 319.75 800 0.457 317 1281 47.16666667 33.29639889 59.01639344 3.165298945 0.42 0.76 0.768018018 22
608 607 105 33 0.417 0.437 312 314 320 49721 1678 0.42875 305 19468 761 0.436 315.75 1001 0.4435 313.5 1533 47.66666667 32.58491652 57.06214689 2.826855124 0.23 0.72 0.724137931 25
609 608 103 39 0.417 0.4345 312 313 295 44111 1720 0.433 304 20239 844 0.44 300.75 808 0.451 312.5 1785 61.66666667 38.69688385 71.83908046 2.915451895 0.24 0.69 0.771167048 23
610 609 106 95 0.417 0.4515 312 316 318 54334 1918 0.44775 316.5 21428 877 0.4465 328 1087 0.4485 311 1656 50.16666667 38.71706758 74.70588235 2.241594022 0.29 0.84 0.736842105 20
611 610 80 59 0.425 0.43825 312 312 310 44336 1418 0.43025 304.5 22136 794 0.42875 322.75 880 0.434 318.5 1435 50.16666667 38.54282536 57.51295337 1.938187533 0.21 0.43 0.741935484 21
612 611 106 26 0.413 0.42875 312 316 296 43998 1582 0.4305 305 21541 802 0.43075 299.25 642 0.437 303 1176 45.33333333 31.60046729 49.0797546 3.823529412 0.32 0.45 0.692307692 22
613 612 108 12 0.413 0.4445 312 315 312 47953 1549 0.4465 325 28309 978 0.45645 319.5 900 0.455 317.5 1508 56.16666667 40.43047941 56.98324022 3.105590062 0.31 0.63 0.606334842 21
614 613 106 55 0.417 0.45125 312 313 323 48387 1923 0.45475 326.5 20376 966 0.45325 328.5 852 0.4635 330.5 1183 47.16666667 36.29873696 58.73015873 3.504928806 0.18 0.53 0.644396552 20
615 614 98 96 0.417 0.4365 311 313 317 55621 2174 0.436 314.25 26878 1040 0.4375 325.5 1057 0.448 326.5 1642 64.83333333 20.83798883 52.43243243 3.479177649 0.24 0.63 0.604651163 20
616 615 100 14 0.417 0.439 312 316 322 47891 1657 0.44 302.75 21622 1003 0.44 318.75 1064 0.442 320 1606 41.66666667 37.01007839 63.63636364 3.732162459 0.32 0.44 0.750572082 20
617 616 102 32 0.413 0.43925 312 313 317 50782 1458 0.4485 311 22602 696 0.4375 315.5 1027 0.4445 310.5 1155 61 32.93378995 65.29411765 2.967898243 0.3 0.75 0.727688787 21
618 617 106 95 0.417 0.43675 312 316 328 52631 1981 0.432 313.25 25399 1080 0.42975 316.75 901 0.4375 310 1600 56.33333333 29.64244521 56.90607735 4.337202199 0.37 0.68 0.585648148 20
619 618 80 48 0.433 0.44725 312 320 334 54383 1783 0.44975 323 30093 998 0.4505 332.5 1134 0.445 330 2002 69.13333333 18.61495845 34.5 6.568516421 0.15 0.3 0.583333333 22
620 619 104 63 0.425 0.44 312 314 321 48757 1550 0.4335 316 22634 1024 0.4385 323 924 0.4375 313 1516 57.5 33.10810811 57.83783784 2.618384401 0.29 0.72 0.881006865 20
621 620 108 119 0.417 0.42875 312 313 317 48564 1880 0.423 305.75 21059 877 0.41875 303.25 894 0.432 299 1155 53.83333333 30.1183432 58.43373494 3.29807094 0.36 0.6 0.838337182 23
622 621 106 26 0.425 0.44375 312 313 316 48001 1568 0.4405 310 23322 945 0.43975 307.25 950 0.444 306 1382 46.16666667 33.78995434 83.95061728 2.977232925 0.37 0.79 0.656750572 23
623 622 120 33 0.419 0.40975 306 306 302 46956 1790 0.4125 304.75 25174 1076 0.41025 306.25 824 0.426 313 1200 61.83333333 25.627554 54.49438202 4.171779141 0.34 0.56 0.725925926 11
624 623 90 57 0.425 0.43875 312 314 321 51924 1684 0.44525 315 18519 870 0.438 303.5 845 0.444 303 1558 56.16666667 39.41441441 54.45026178 2.259887006 0.21 0.56 0.662131519 20
625 624 95 104 0.425 0.42825 312 312 309 46780 1633 0.426 302.5 19612 842 0.428 310.25 910 0.4335 315.5 1362 54.83333333 29.16666667 61.17647059 2.315562736 0.48 0.48 0.738317757 20
626 625 106 79 0.417 0.4435 312 315 313 46506 1568 0.441 306.5 21702 926 0.43775 318 922 0.433 307 1365 58.18333333 35.38979248 66.28571429 3.357817419 0.29 0.61 0.702517162 23
627 626 102 22 0.417 0.44175 315 317 320 56328 2116 0.44325 320 27103 1101 0.443 321.5 1076 0.439 304.5 1222 64.56666667 32.97692741 69.78021978 3.896103896 0.41 0.65 0.690045249 25
628 627 98 48 0.417 0.42375 312 315 306 42150 1470 0.42575 313.5 19499 901 0.42475 308.5 897 0.4335 323.5 1813 60.16666667 26.96365768 1387.428571 3.179364127 0.35 0.64 0.779342723 20
629 628 102 166 0.417 0.43425 312 313 314 45590 1446 0.42875 304.5 18117 696 0.4335 309.75 751 0.4365 309 1060 45.83333333 34.15898618 59.1160221 2.20214568 0.28 0.8 0.728971963 20
630 629 102 11 0.421 0.4290525 312 315 307 52310 1687 0.43625 300.5 22731 796 0.43075 304.25 826 0.43 316.5 1250 39 35.98442714 63.33333333 3.382789318 0.23 0.56 0.557177616 22
631 630 98 21 0.417 0.4295 312 316 314 48644 1722 0.571333333 417.6666667 22420 833 0.43075 313.5 1015 0.4285 313 1572 63.66666667 38.08156232 50.53763441 1.714285714 0.33 0.57 0.779859485 20
632 631 100 41 0.417 0.4555 312 314 315 48580 1419 0.455 303.5 22296 772 0.4575 308.75 786 0.4535 293.5 886 51.5 33.53624792 62.5 1.97330238 0.41 0.79 0.655701754 20
633 632 100 87 0.417 0.4355 312 316 305 43548 1423 0.437 299.75 19483 807 0.439 307.5 882 0.434 299.5 1568 49 30.04587156 61.84971098 2.502910361 0.31 0.62 0.553287982 23
634 633 94 97 0.425 0.4215 312 312 297 43580 1516 0.424 298.5 20384 940 0.42425 307.5 887 0.428 299.5 1264 57 27.65196663 54.03726708 2.582582583 0.34 0.62 0.649411765 21
635 634 108 125 0.425 0.445 312 314 312 48371 1568 0.44425 305 21750 891 0.44375 313.5 887 0.4425 312 1040 47.83333333 26.51428571 54.11764706 3.085714286 0.44 0.68 0.838137472 20
636 635 110 128 0.425 0.44625 312 314 317 47664 1594 0.4505 315.5 22811 884 0.4395 322.25 905 0.4555 322.5 1064 40.33333333 26.23220153 62.29508197 2.625298329 0.44 0.83 0.789587852 21
637 636 96 75 0.421 0.43525 312 311 314 45494 1620 0.43475 311.25 20512 966 0.43875 306.75 943 0.438 305.5 1631 54.16666667 35.93450028 69.02173913 2.464985994 0.32 0.5 0.826789838 21
638 637 92 34 0.421 0.438 312 316 311 52100 1724 0.43825 306 23438 770 0.43775 311.75 688 0.4415 314 1841 56.5 26.19324796 56.21301775 3.669190448 0.31 0.8 0.592255125 20
639 638 95 85 0.421 0.44625 312 314 334 59334 2170 0.4455 316.25 25094 912 0.447 330.25 994 0.443 322 1470 66.16666667 23.63936229 52.54237288 2.956225128 0.32 0.5 0.606334842 20
640 639 104 106 0.417 0.4425 312 314 316 48258 1799 0.444 326 22795 989 0.44475 316.25 919 0.444 314 1421 53.33333333 38.73925501 62.30366492 2.514619883 0.38 0.66 0.965292842 20
641 640 104 92 0.421 0.43025 312 313 310 49126 1526 0.43025 311.75 24418 1003 0.4305 303.25 931 0.4295 300 1197 56.33333333 26.87981054 51.80722892 3.473945409 0.18 0.61 0.686363636 20
642 641 106 40 0.413 0.4465 312 315 309 47053 1668 0.44725 316.75 19050 761 0.45225 313.75 884 0.454 321 1558 33.16666667 32.25446429 63.12849162 3.429504627 0.41 0.5 0.827740492 22
643 642 105 97 0.413 0.43975 312 314 298 45638 1517 0.44225 309.5 21380 854 0.4425 313.25 810 0.4555 315 1190 35.66666667 24.8603352 49.46236559 4.332344214 0.37 0.77 0.919354839 20
644 643 102 36 0.421 0.4205 312 313 310 47374 1769 0.42125 299 19516 863 0.4215 306.5 873 0.4305 315 1554 37.83333333 27.27272727 55.75757576 3.013530135 0.31 0.74 0.847575058 21
645 644 105 27 0.421 0.437 312 311 311 46522 1678 0.4355 300 18214 842 0.44325 316.5 749 0.441 317 1158 48.5 33.66164542 62.20930233 2.537231109 0.33 0.6 0.647727273 20
646 645 98 23 0.421 0.432 312 313 302 43146 1382 0.42925 297.75 18551 747 0.434 310.5 901 0.432 295.5 1060 47.66666667 24.85448196 57.05882353 2.274052478 0.27 0.85 0.792147806 21
647 646 100 16 0.417 0.42925 312 314 308 46274 1519 0.43475 321.75 27682 1018 0.42875 310.5 850 0.4305 318 1180 69.5 20.92074592 53.33333333 3.341584158 0.36 0.76 0.642523364 19
648 647 100 66 0.417 0.423 312 312 298 44208 1608 0.42525 304.75 23690 980 0.42275 296.5 751 0.422 286.5 1316 68.16666667 27.34693878 53.59116022 2.89017341 0.38 0.6 0.557177616 22
649 648 102 19 0.417 0.42525 312 314 308 47245 1535 0.4185 311.25 24611 984 0.419 304.5 814 0.419 301.5 998 51.66666667 35.36299766 60.98901099 2.524630542 0.31 0.71 0.623287671 22
650 649 98 32 0.425 0.46625 312 312 315 50139 1561 0.467 314.25 23904 910 0.46525 316.5 838 0.467 304 1152 35.83333333 47.32662785 60.52631579 1.797752809 0.48 0.65 0.667396061 25
651 650 98 121 0.421 0.432 312 312 314 51747 1549 0.43525 312.75 26510 872 0.433 315.75 964 0.443 317.5 1113 56.25 32.49266862 49.7005988 2.857142857 0.5 0.22 0.824601367 21
652 651 98 25 0.421 0.424 313 315 306 42278 1433 0.424 307.25 19901 854 0.426 307.5 709 0.431 304 1046 61.68333333 37.33955659 68.13186813 2.923976608 0.27 0.69 0.700471698 22
653 652 88 17 0.429 0.44425 311 318 314 50548 1496 0.4435 311.75 24853 864 0.4465 315.25 772 0.4475 313 1330 47.5 26.15384615 54.54545455 3.281334051 0.46 0.91 0.74715262 20
654 653 90 95 0.421 0.42675 311 311 296 42970 1354 0.4245 294.25 19676 770 0.427 301 691 0.4275 287.5 1040 52.5 31.88073394 56.81818182 2.099580084 0.49 0.8 0.555288462 19

654
data/spc_mod.csv Normal file
View File

@ -0,0 +1,654 @@
Batch,Speed,BatchQty,Para1,Para2,Para3,Para4,Para5,Para6,Para7,Para8,Para9,Para10,Para11,Para12,Para13,Para14,Para15,Para16,Para17,Para18,Para19,Para20,Para21,Para22,Para23,timestamp
1,84,26,0.43025,324,314,49512,1759,0.42775,308.75,21557,810,0.4275,309,840,0.425,315.5,1564,75,25.52325581,55.42857143,4.074505239,0.26,0.62,0.588235294,23,2023-12-31T23:00:00Z
2,100,26,0.433,319,400,47101,1746,0.43375,306.75,20512,824,0.4305,309,756,0.431,305.5,784,64.5,31.6,59.34065934,2.097505669,0.34,0.77,0.839907193,22,2023-12-31T23:00:00Z
3,102,34,0.4285,323,316,60023,1482,0.428,311.75,24933,765,0.4325,319.75,863,0.4375,330.5,1166,76.3,27.47068677,44.27083333,2.888503755,0.33,0.78,0.681710214,24,2023-12-31T23:00:00Z
4,96,21,0.43775,322,332,55428,1857,0.43925,322.75,24997,933,0.4375,321.5,780,0.4395,319.5,1362,71.58333333,26.38966873,55.55555556,2.392344498,0.35,0.63,0.65437788,22,2023-12-31T23:00:00Z
5,94,23,0.41725,321,313,46442,1844,0.4185,312.5,20850,686,0.42175,305.75,791,0.4245,323.5,1334,60.15,28.84500299,47.31182796,2.951191827,0.23,0.66,0.722090261,22,2023-12-31T23:00:00Z
6,98,97,0.44075,320,312,45539,1584,0.43875,309.25,20866,1400,0.445,311.25,684,0.445,314.5,868,55.16666667,36.03603604,68.92655367,2.37700387,0.31,0.78,0.702031603,20,2023-12-31T23:00:00Z
7,98,43,0.42275,320,314,51492,1689,0.42625,311.75,20352,864,0.427,317.75,912,0.43,319.5,886,63.5,25.54285714,50.81081081,2.36653825,0.32,0.55,0.769931663,20,2023-12-31T23:00:00Z
8,94,25,0.43175,321,310,47661,1782,0.428,301,21991,858,0.4325,307.75,812,0.435,299,984,61.33333333,47.98619102,62.90322581,1.81200453,0.44,0.52,0.687943262,20,2023-12-31T23:00:00Z
9,102,65,0.44225,321,316,70638,1572,0.44,304.25,20352,252,0.446,319.5,901,0.441,319.5,1082,64.83333333,33.22014714,56.98924731,1.672433679,0.34,0.6,0.664444444,20,2023-12-31T23:00:00Z
10,94,15,0.42875,321,304,45944,1377,0.4335,339.75,21059,255,0.4295,308,677,0.425,289,945,59.5,29.93555946,45.25139665,1.952662722,0.28,0.59,0.712230216,20,2023-12-31T23:00:00Z
11,98,40,0.43925,325,330,56955,1848,0.43675,330.25,26300,968,0.4415,336.25,856,0.435,315.5,945,56.56666667,37.69363167,54.05405405,3.058438012,0.25,0.76,0.600431965,20,2023-12-31T23:00:01Z
12,104,35,0.4245,320,312,37616,1689,0.431,314,20496,473,0.431,314,854,0.434,318.5,1127,52.16666667,32.51318102,56.7251462,1.87820148,0.29,0.77,0.811320755,20,2023-12-31T23:00:01Z
13,95,46,0.43175,320,310,47953,1528,0.4325,321.25,23470,840,0.43125,318,763,0.429,305.5,1362,66.98333333,29.3202765,53.47593583,1.962983735,0.27,0.58,0.637813212,21,2023-12-31T23:00:01Z
14,65,83,0.4295,320,324,51891,1913,0.43025,331.75,24162,1034,0.4305,326.5,947,0.4335,316.5,1554,87,23.18757192,43.40659341,2.306425041,0.25,0.73,0.583138173,20,2023-12-31T23:00:01Z
15,98,23,0.43025,323,304,42608,1648,0.43125,306,21638,784,0.431,305.5,978,0.4295,298.5,1194,64,29.19075145,56.66666667,2.628571429,0.5,0.75,0.787185355,20,2023-12-31T23:00:01Z
16,94,40,0.44275,321,312,60625,1470,0.44425,316,21107,796,0.445,320.75,870,0.443,320,1533,71.66666667,36.2400906,60.42780749,2.155172414,0.31,0.86,0.767184035,22,2023-12-31T23:00:01Z
17,80,36,0.4275,321,296,42359,1398,0.41975,295.5,16563,746,0.42525,303.75,814,0.419,306.5,1200,81.5,25.40869565,53.21637427,2.75175644,0.36,0.73,0.58411215,20,2023-12-31T23:00:01Z
18,102,58,0.43925,320,310,46554,1452,0.43875,307.25,22554,1245,0.43875,310,768,0.439,304,772,55.73333333,37.79036827,61.08108108,2.559821925,0.36,0.91,0.600896861,20,2023-12-31T23:00:01Z
19,102,29,0.44575,319,318,49564,1377,0.4445,315,22634,728,0.446,321.25,680,0.4415,314.5,861,59.68333333,42.80022766,74.28571429,0.576036866,0.32,0.85,0.915367483,19,2023-12-31T23:00:01Z
20,104,68,0.4425,322,305,47824,1433,0.4405,318.5,21123,870,0.4395,317,770,0.4375,304,1120,53.5,45.70637119,71.18644068,1.840490798,0.36,0.71,0.856512141,19,2023-12-31T23:00:01Z
21,94,119,0.43,319,303,48516,1573,0.4315,305.5,23422,842,0.43175,308,872,0.428,298.5,1232,75.95,36.45348837,61.32596685,1.881246326,0.42,0.92,0.656612529,20,2023-12-31T23:00:02Z
22,92,56,0.42675,320,308,75703,1349,0.42825,306,20288,654,0.4255,309.5,690,0.427,307,1400,69.83333333,38.59020311,53.84615385,1.366742597,0.4,0.71,0.735981308,20,2023-12-31T23:00:02Z
23,75,40,0.439,321,318,53064,1732,0.43775,314,24708,1003,0.4375,316,768,0.4365,317.5,1536,92.66666667,26.65897288,53.72340426,1.022604952,0.39,0.76,0.6367713,22,2023-12-31T23:00:02Z
24,98,32,0.4215,324,312,51152,1578,0.42375,304,20818,740,0.421,303.25,704,0.427,307,1480,53.96666667,29.01734104,48.8372093,2.949681897,0.43,0.62,0.866995074,19,2023-12-31T23:00:02Z
25,98,50,0.42675,318,311,45172,1507,0.428,314.5,21091,821,0.42675,310.5,845,0.4325,325,1516,81,24.85448196,43.85026738,2.362204724,0.38,0.74,0.651658768,20,2023-12-31T23:00:02Z
26,100,60,0.4275,320,308,49898,1628,0.425,297.5,20512,620,0.42325,302.5,616,0.4215,297.5,1575,57.33333333,32.42320819,66.11111111,1.922020868,0.31,0.77,0.634844869,19,2023-12-31T23:00:02Z
27,98,40,0.43825,321,315,43420,1440,0.439,315.25,24596,200,0.4395,306.25,733,0.442,303,1550,65.16666667,24.29313329,41.30434783,2.223489168,0.37,0.54,0.638826185,18,2023-12-31T23:00:02Z
28,102,57,0.4575,326,318,49625,1482,0.46125,318.5,23615,729,0.46025,316.5,660,0.4475,316,1026,45,36.76222597,56.98324022,1.038661281,0.27,0.58,0.417607223,22,2023-12-31T23:00:02Z
29,102,35,0.427,323,315,48163,1512,0.4315,314.25,21975,700,0.42775,314.25,856,0.4385,319,1190,63.2,34.61084906,54.3956044,2.795208214,0.21,0.89,0.793911007,19,2023-12-31T23:00:02Z
30,98,52,0.431,322,309,46619,1578,0.43,310,20560,870,0.4305,308.5,886,0.4325,311,1278,68.83333333,35.57199772,56.75675676,1.428571429,0.37,0.76,0.678321678,18,2023-12-31T23:00:02Z
31,96,47,0.43125,323,310,48532,1559,0.428,305.75,17956,595,0.42975,303.5,802,0.43,303.5,910,65.7,39.87268519,58.98876404,1.474758934,0.24,0.62,0.687793427,18,2023-12-31T23:00:03Z
32,96,55,0.443,321,320,53965,1979,0.44075,316.25,23390,943,0.44,314,828,0.4405,310.5,1074,82.5,28.96983495,51.06382979,2.285714286,0.17,0.6,0.799097065,20,2023-12-31T23:00:03Z
33,100,27,0.42975,323,319,49753,1755,0.42775,318.5,21959,929,0.4305,321.75,864,0.429,312.5,724,76.16666667,29.70930233,50.28901734,2.12514758,0.21,0.72,0.622119816,19,2023-12-31T23:00:03Z
34,90,34,0.4305,320,302,48741,1610,0.42825,305.5,22345,831,0.43025,298.25,758,0.436,307,1298,76.66666667,29.08366534,48.92473118,1.386577926,0.3,0.61,0.788863109,20,2023-12-31T23:00:03Z
35,104,100,0.44325,317,326,54110,1878,0.443,310.25,24869,936,0.44125,318,877,0.434,301,1102,70.16666667,33.90804598,60.81871345,2.151823072,0.1,0.6,0.634259259,21,2023-12-31T23:00:03Z
36,90,37,0.45425,324,320,66539,1580,0.44775,329.25,24885,952,0.452,322.5,819,0.452,314.5,959,76.33333333,25.44444444,53.26086957,1.366742597,0.3,0.75,0.72967033,21,2023-12-31T23:00:03Z
37,80,37,0.4405,320,318,49898,1792,0.4375,304,22988,961,0.439,315.25,1153,0.4425,316.5,1148,77,26.88652879,51.95530726,3.23699422,0.24,0.48,0.763157895,22,2023-12-31T23:00:03Z
38,105,46,0.4345,322,306,44963,1223,0.43675,315.75,23358,742,0.437,305,768,0.443,303,1614,60,40.35693725,56.81818182,2.53776435,0.18,0.54,0.746067416,23,2023-12-31T23:00:03Z
39,90,27,0.4385,327,317,47454,1738,0.428,311.5,19098,794,0.4305,313.75,803,0.433,307.5,1488,73.83333333,32.71245634,59.65909091,2.247191011,0.31,0.45,0.648837209,22,2023-12-31T23:00:03Z
40,95,81,0.449,324,311,45574,1550,0.45325,326.75,23647,901,0.451,319.75,822,0.4475,320.5,1337,65.16666667,29.56326988,56.90607735,1.341531582,0.19,0.88,0.755707763,18,2023-12-31T23:00:03Z
41,98,100,0.4485,326,303,47744,1498,0.449,311.5,21959,852,0.449,307.5,772,0.451,313.5,1208,52.5,32.48195447,56.49717514,2.868391451,0.37,0.74,0.747826087,19,2023-12-31T23:00:04Z
42,104,60,0.4345,325,308,73536,1356,0.4335,307,19033,749,0.43075,310.75,758,0.4255,301.5,808,46.33333333,35.02331002,53.98773006,1.957186544,0.26,0.6,0.631929047,19,2023-12-31T23:00:04Z
43,98,98,0.42775,320,308,47069,1442,0.43375,304.75,22618,962,0.42925,301,726,0.4325,306,1183,58.33333333,29.34232715,47.20812183,1.960784314,0.34,0.57,0.665882353,19,2023-12-31T23:00:04Z
44,96,37,0.4385,322,308,48274,1530,0.4425,312.75,19837,662,0.43775,307.25,492,0.4375,305.5,1057,38.2,40.4935502,56.18556701,2.23838836,0.19,0.66,0.75,18,2023-12-31T23:00:04Z
45,92,27,0.424,320,303,45622,1547,0.42425,298.5,17860,733,0.4245,313,919,0.428,296.5,1250,60.83333333,26.10695802,53.63128492,1.887840089,0.28,0.68,0.69047619,20,2023-12-31T23:00:04Z
46,90,17,0.4345,322,314,49046,1416,0.43575,311.5,22763,707,0.43525,318,884,0.436,306.5,1302,67.56666667,23.93887946,42.32804233,2.727768685,0.35,0.7,0.638694639,20,2023-12-31T23:00:04Z
47,75,27,0.451,324,324,55492,1601,0.449,320.5,26412,900,0.4515,330.75,892,0.4475,317,1284,51.5,27.73681225,54.59459459,2.067464635,0.3,0.61,0.651612903,20,2023-12-31T23:00:04Z
48,101,78,0.43725,320,309,47582,1381,0.434,310.25,20576,898,0.43175,309.75,826,0.433,300,1036,53,33.40961098,60.79545455,2.504472272,0.21,0.68,0.835990888,19,2023-12-31T23:00:04Z
49,80,30,0.43125,320,308,48387,1750,0.43525,312.5,22586,915,0.433,309.25,817,0.427,298.5,836,62.5,30.20172911,44.50549451,1.6,0.27,0.67,0.593967517,20,2023-12-31T23:00:04Z
50,93,49,0.432,321,333,50200,1824,0.43275,339.75,21123,892,0.43125,323,1031,0.4335,310.5,875,55.16666667,32.25998807,55.0295858,1.343784994,0.34,0.67,0.759345794,20,2023-12-31T23:00:04Z
51,102,44,0.4415,320,315,50477,1437,0.44325,308.25,20560,611,0.4425,317.5,578,0.4465,314,882,41.31666667,36.02484472,77.90697674,2.279202279,0.39,0.92,0.787671233,20,2023-12-31T23:00:05Z
52,102,132,0.43725,322,313,46715,1255,0.4375,319,21606,621,0.43475,311.5,738,0.439,309.5,1127,55.18333333,31.49295775,48.40425532,1.048565121,0.37,0.7,0.692488263,19,2023-12-31T23:00:05Z
53,92,55,0.427,320,306,48242,1894,0.428,315.25,20657,898,0.42575,308,910,0.4345,308.5,924,78.5,26.5793967,49.72375691,1.086956522,0.27,0.64,0.593220339,20,2023-12-31T23:00:05Z
54,98,50,0.44275,320,316,53676,1517,0.438,311.75,17442,616,0.4435,310.25,768,0.4405,321,903,53.78333333,35.30415009,67.64705882,1.013333333,0.29,0.98,0.805429864,18,2023-12-31T23:00:05Z
55,95,45,0.42875,321,306,44882,1528,0.43175,305,19802,850,0.43175,307.25,735,0.435,306.5,896,62.5,34.63079565,60.46511628,2.249134948,0.4,0.87,0.711627907,20,2023-12-31T23:00:05Z
56,100,35,0.44,320,316,50493,1614,0.441,310,21862,817,0.4425,317.25,1004,0.447,311,1050,47.33333333,29.54285714,57.55813953,2.939375383,0.27,0.69,0.683146067,20,2023-12-31T23:00:05Z
57,62,131,0.43725,319,312,55654,1617,0.4345,299.5,19419,770,0.434,312.5,854,0.438,300.5,959,70.5,26.98768197,48.04469274,1.920903955,0.35,0.45,0.655737705,22,2023-12-31T23:00:05Z
58,90,30,0.43825,326,317,51200,1764,0.43925,306,22168,852,0.43775,309.75,779,0.444,312.5,1054,54,28.57142857,47.61904762,2.18579235,0.44,0.7,0.673423423,20,2023-12-31T23:00:05Z
59,90,90,0.43925,322,320,54512,1797,0.44,314.25,23486,831,0.44075,322,957,0.4415,328.5,854,72.33333333,26.39734366,45.91836735,1.092896175,0.32,0.7,0.638248848,30,2023-12-31T23:00:05Z
60,102,83,0.44525,321,306,44352,1393,0.44425,303,20384,656,0.448,305.75,702,0.45,314.5,840,49.88333333,35.34726143,75.88235294,1.455180442,0.39,0.69,0.754424779,19,2023-12-31T23:00:05Z
61,93,64,0.42975,319,320,49705,1648,0.433,316.75,22136,864,0.428,316.75,959,0.4345,314.5,1141,57,29.43925234,51.74418605,2.383863081,0.37,0.7,0.613793103,21,2023-12-31T23:00:06Z
62,94,81,0.43425,320,299,44480,1540,0.4365,298.25,19950,716,0.4335,297.5,779,0.4365,295,1326,63.5,31.66089965,64.02439024,1.690670006,0.32,0.83,0.595402299,20,2023-12-31T23:00:06Z
63,80,22,0.44275,326,312,50718,1718,0.44175,318.25,25672,1029,0.44125,311.5,894,0.4365,304.5,1088,61.5,29.731243,59.30232558,1.826974745,0.45,0.91,0.635103926,23,2023-12-31T23:00:06Z
64,85,45,0.451,319,326,48435,1587,0.44575,323.5,24772,691,0.45025,319.25,742,0.447,316,808,41.83333333,34.83398987,62.10526316,1.252041372,0.35,0.82,0.647186147,19,2023-12-31T23:00:06Z
65,84,32,0.44125,324,324,53596,1904,0.44275,307,22441,840,0.4365,317,854,0.444,312.5,844,54.83333333,37.93103448,66.4893617,1.83639399,0.44,0.55,0.566513761,20,2023-12-31T23:00:06Z
66,100,25,0.44975,323,308,48387,1362,0.44675,321.25,23084,721,0.4475,310.5,623,0.4505,312.5,581,37.43333333,48.1105471,91.62011173,2.633118783,0.4,0.7,0.714611872,20,2023-12-31T23:00:06Z
67,85,36,0.438,320,312,46301,1323,0.4305,301.25,23502,793,0.43125,301.25,600,0.431,317.5,1218,51.66666667,30.23255814,45.25139665,3.994927077,0.43,0.44,0.592592593,21,2023-12-31T23:00:06Z
68,86,30,0.44775,324,314,45890,1393,0.44525,312.25,22827,872,0.445,322.5,698,0.4455,312.5,595,49.33333333,43.92794887,69.61325967,1.662844037,0.46,0.83,0.824295011,22,2023-12-31T23:00:06Z
69,97,37,0.43175,319,310,44850,1400,0.433325,312.75,25512,831,0.43025,310.5,761,0.4305,300,777,37.33333333,33.86524823,61.36363636,2.210884354,0.36,0.7,0.731207289,20,2023-12-31T23:00:06Z
70,80,27,0.42225,320,307,42873,1220,0.42225,311.75,22023,679,0.42175,300.75,662,0.4215,303,1106,59.4,29.86935867,48.87640449,2.038369305,0.32,0.95,0.628841608,19,2023-12-31T23:00:06Z
71,85,16,0.434,320,306,43388,1202,0.4385,314.75,25158,808,0.4365,315.25,632,0.439,320.5,917,49.83333333,39.7964952,74.55621302,2.140672783,0.37,0.88,0.971830986,23,2023-12-31T23:00:07Z
72,94,99,0.43175,320,308,42391,1402,0.43075,301,19371,667,0.43275,303,595,0.4275,289.5,690,30,33.03886926,64.94252874,0.183823529,0.19,0.62,0.653579677,20,2023-12-31T23:00:07Z
73,100,30,0.43775,321,302,47760,1503,0.43675,306,20818,730,0.43825,305.5,789,0.4395,314.5,945,36.16666667,33.44827586,65,1.838440111,0.26,0.51,0.879120879,18,2023-12-31T23:00:07Z
74,100,42,0.43075,319,316,54399,1759,0.42725,305.25,21895,821,0.42925,316,896,0.437,324,777,36.83333333,24.39313203,53.93939394,2.320047591,0.35,0.22,0.534883721,18,2023-12-31T23:00:07Z
75,98,32,0.4335,318,312,51360,1642,0.431,303,22474,821,0.43175,304.75,929,0.436,304.5,945,45.16666667,28.22120867,56.52173913,3.243540407,0.17,0.68,0.625882353,19,2023-12-31T23:00:07Z
76,100,59,0.445,321,322,60484,1839,0.44325,314.5,22409,1029,0.44275,317.75,961,0.436,304.5,998,50.83333333,35.03981797,54.28571429,2.052597819,0.23,0.51,0.624719101,19,2023-12-31T23:00:07Z
77,92,35,0.44375,324,320,55800,1610,0.44525,315,23936,654,0.4465,319,856,0.445,314,639,34.16666667,32.69983231,64.94252874,2.899408284,0.17,0.51,0.484162896,20,2023-12-31T23:00:07Z
78,98,50,0.44875,320,325,53611,1479,0.4465,316.75,22152,609,0.4485,315.75,593,0.4495,307,784,38.05,43.83714445,64.21052632,2.378255946,0.3,0.56,0.671111111,20,2023-12-31T23:00:07Z
79,98,56,0.45475,320,323,53756,1648,0.455,316,23486,768,0.45175,324.75,894,0.457,323.5,1295,49.16666667,33.15305571,62.01117318,1.825013419,0.16,0.43,0.666666667,18,2023-12-31T23:00:07Z
80,102,129,0.449,322,324,53756,1440,0.45225,321.5,24226,786,0.451,311.5,562,0.4515,317,525,22.36666667,51.43165856,85.32608696,1.950659782,0.22,0.6,0.81797235,19,2023-12-31T23:00:07Z
81,101,71,0.4375,319,304,48226,1629,0.4405,316,23310,854,0.44025,308.75,887,0.438,312.5,984,49.16666667,32.20823799,58.82352941,1.886792453,0.38,0.56,0.773033708,19,2023-12-31T23:00:08Z
82,85,29,0.4385,319,314,49689,1535,0.44025,313.25,20496,777,0.43925,310.25,817,0.443,316.5,1190,65.16666667,25.55492316,60.22099448,2.272727273,0.38,0.62,0.801801802,20,2023-12-31T23:00:08Z
83,102,102,0.437,322,308,42262,1307,0.441,307.25,24612,1025,0.4445,315.5,905,0.445,306.5,844,45.33333333,45.79855314,84.81675393,2.019650655,0.46,0.67,0.707207207,23,2023-12-31T23:00:08Z
84,103,25,0.43675,320,317,44706,1351,0.4345,300.75,20802,695,0.44075,298.75,728,0.44,310.5,903,42.85,39.04542841,73.14285714,2.123672705,0.32,0.64,0.847161572,23,2023-12-31T23:00:08Z
85,102,112,0.4375,321,302,43146,1526,0.442,308.75,20400,714,0.43825,297,712,0.44,292.5,822,49.33333333,32.37934905,56.04395604,2.366863905,0.23,0.46,0.657210402,20,2023-12-31T23:00:08Z
86,100,42,0.442,321,324,53048,1519,0.4415,306.75,20239,662,0.436,312.75,642,0.443,313.5,784,37.45,33.6492891,58.92857143,1.720183486,0.31,0.8,0.681917211,20,2023-12-31T23:00:08Z
87,98,43,0.43175,323,308,48740,1542,0.42925,311.25,21959,840,0.43225,313.5,940,0.431,298,1001,62.16666667,25.94093804,45.40540541,2.18579235,0.26,0.64,0.630136986,20,2023-12-31T23:00:08Z
88,100,32,0.43925,323,314,48290,1430,0.4455,307.5,20480,656,0.44025,313.75,835,0.4515,324,1071,39.28333333,29.62750716,58.28571429,2.181400689,0.36,0.88,0.636155606,20,2023-12-31T23:00:08Z
89,98,52,0.437,321,322,49110,1631,0.43175,309.5,21300,723,0.435,306,802,0.4335,312.5,826,47.83333333,31.31991051,56.61375661,1.142857143,0.34,0.79,0.881642512,20,2023-12-31T23:00:08Z
90,88,71,0.4225,319,296,46233,1507,0.42125,300,18069,791,0.421,298,812,0.4265,299.5,1152,58.83333333,29.85865724,55.80110497,1.878453039,0.36,0.76,0.715294118,19,2023-12-31T23:00:08Z
91,104,31,0.455,321,318,48580,1533,0.4525,312,23310,819,0.45325,313.25,738,0.4525,324.5,934,37.33333333,36.26373626,58.79120879,1.117318436,0.31,0.67,0.642857143,20,2023-12-31T23:00:09Z
92,90,23,0.458,320,316,52052,1545,0.46025,315.5,25753,805,0.4595,320.5,763,0.462,318,652,37.16666667,43.72972973,90.39548023,2.985074627,0.36,0.68,0.815384615,23,2023-12-31T23:00:09Z
93,95,67,0.4345,321,312,54126,1684,0.43025,299.5,22650,774,0.434,310,831,0.437,305,976,43.75,38.07890223,49.43820225,1.208981002,0.42,0.66,0.662037037,20,2023-12-31T23:00:09Z
94,96,29,0.4425,320,316,52824,1671,0.4425,320.75,24933,940,0.442,323.75,920,0.445,323,1026,54.5,28.14982974,55.74712644,2.994011976,0.35,0.6,0.724373576,20,2023-12-31T23:00:09Z
95,98,142,0.435,320,307,46120,1334,0.4365,310,19966,751,0.44,309.5,732,0.439,311.5,609,44.33333333,27.67402377,46.84210526,2.688172043,0.38,0.57,0.728110599,20,2023-12-31T23:00:09Z
96,98,14,0.43975,322,312,50959,1482,0.43825,319.25,22184,679,0.43625,304,824,0.4405,311.5,777,44.85,38.04100228,64.40677966,3.306264501,0.47,0.57,0.661399549,20,2023-12-31T23:00:09Z
97,80,10,0.4455,320,326,58096,1852,0.45,315.5,21590,656,0.4455,324,1001,0.4485,328.5,980,42,27.07209686,59.47368421,2.673796791,0.22,0.65,0.66962306,20,2023-12-31T23:00:09Z
98,65,19,0.44775,321,318,50059,1454,0.449,321,21638,653,0.4465,308.25,719,0.444,310,938,54.45,22.68673356,52.97619048,2.485875706,0.34,0.64,0.539325843,21,2023-12-31T23:00:09Z
99,104,29,0.44575,319,312,54046,1264,0.4425,315.75,24129,704,0.44575,317.75,744,0.449,327.5,1141,44,40.77555817,68.04733728,3.695408735,0.29,0.58,0.62962963,19,2023-12-31T23:00:09Z
100,92,16,0.439,321,318,49898,1552,0.44325,315.5,22216,751,0.44075,317.25,924,0.4445,310.5,1078,51,28.90365449,61.05263158,2.173913043,0.32,0.84,0.753393665,20,2023-12-31T23:00:09Z
101,75,26,0.44975,326,328,57244,1853,0.44925,323.25,26508,985,0.44675,323.5,929,0.446,320.5,1344,64.5,19.20903955,48.55491329,1.694915254,0.35,0.7,0.615044248,20,2023-12-31T23:00:10Z
102,103,122,0.43325,318,303,45429,1407,0.42875,296,21300,866,0.442,300,639,0.4445,306,1022,47.33333333,35.86659377,79.76190476,2.839879154,0.28,0.62,0.587006961,21,2023-12-31T23:00:10Z
103,80,97,0.443,321,312,47808,1703,0.4405,301.25,25882,1062,0.43875,315.25,789,0.4385,306.5,718,45.5,30.58823529,58.06451613,2.824858757,0.35,0.61,0.531322506,20,2023-12-31T23:00:10Z
104,96,127,0.4445,320,313,48146,1656,0.45375,318.75,27216,1003,0.45075,312.5,779,0.45,302,766,40.33333333,35.32967033,65.43209877,1.807228916,0.32,0.62,0.981776765,22,2023-12-31T23:00:10Z
105,90,30,0.4385,321,314,52518,1699,0.435,308.25,23004,788,0.4375,317.25,805,0.4335,305.5,861,47.35,39.18690006,56.61375661,2.310803004,0.47,0.65,0.648401826,21,2023-12-31T23:00:10Z
106,94,30,0.4435,321,325,55267,1710,0.446,318,24354,998,0.445,314.75,756,0.451,322.5,819,45.66666667,24.87644152,56.52173913,2.310231023,0.37,0.56,0.875862069,20,2023-12-31T23:00:10Z
107,98,72,0.44,323,307,47262,1298,0.44,311,21557,639,0.438,308.25,695,0.4405,304,522,39.56666667,26.04049494,58.75706215,2.151755379,0.45,0.67,0.803652968,20,2023-12-31T23:00:10Z
108,88,32,0.42675,319,312,50396,1760,0.42625,312.75,23068,803,0.4245,310,903,0.422,304.5,1068,45,25.36873156,48.23529412,2.525832377,0.26,0.72,0.533333333,20,2023-12-31T23:00:10Z
109,85,29,0.43425,315,310,49673,1614,0.43425,298.5,23036,845,0.43325,297.25,784,0.4335,291,1113,53.16666667,22.49544627,42.39130435,2.367941712,0.33,0.75,0.635730858,21,2023-12-31T23:00:10Z
110,100,54,0.439,322,316,47374,1652,0.43975,306.5,21702,847,0.4405,321.75,836,0.4635,319,892,36.66666667,35.63799888,58.69565217,1.663090129,0.43,0.56,0.653594771,21,2023-12-31T23:00:10Z
111,94,77,0.43975,319,312,49223,1570,0.4385,315.5,19346,590,0.4385,313.75,818,0.443,311,966,49.83333333,33.86524823,59.28143713,2.361751152,0.18,0.71,0.690949227,20,2023-12-31T23:00:11Z
112,92,18,0.44475,321,318,54480,1479,0.44025,310.25,20496,570,0.4435,308.75,716,0.4475,312,1162,38.4,27.32331664,48.33333333,3.076923077,0.22,0.56,0.805936073,21,2023-12-31T23:00:11Z
113,88,46,0.437,321,312,45609,1465,0.4385,312,22586,819,0.43825,309,768,0.44,301,630,50.83333333,29.30153322,54.94505495,2.375565611,0.59,0.19,0.759637188,20,2023-12-31T23:00:11Z
114,90,93,0.439,320,318,54560,1437,0.436,302.5,21236,625,0.4365,318.25,728,0.438,304.5,536,40.65,17.6536943,47.42857143,0.161290323,0.2,0.56,0.774941995,20,2023-12-31T23:00:11Z
115,90,33,0.435,324,304,51280,1704,0.4335,303.25,21686,709,0.436,309.5,844,0.439,305,917,47.33333333,20.51282051,43.45238095,1.379310345,0.23,0.55,0.802352941,20,2023-12-31T23:00:11Z
116,75,18,0.4445,322,311,52808,1727,0.44575,317.25,23374,681,0.445,311.5,968,0.4465,310,1194,55.65,20.01124227,40.95744681,1.902173913,0.13,0.53,0.665148064,20,2023-12-31T23:00:11Z
117,82,82,0.436475,319,318,47583,1404,0.43875,314.25,22232,719,0.43825,315.5,604,0.4365,320,826,55.83333333,26.50115473,50.27624309,1.775147929,0.13,0.6,0.601830664,22,2023-12-31T23:00:11Z
118,80,18,0.441,319,315,48918,1647,0.44025,311.5,24017,814,0.44325,318.75,919,0.4385,305.5,1306,58,25.7918552,54.64480874,1.725163593,0.27,0.6,0.665148064,21,2023-12-31T23:00:11Z
119,70,25,0.4435,319,316,53113,1390,0.44475,305.25,20994,606,0.4425,309,653,0.441,315,1124,61.83333333,30.37330317,48.10810811,1.836969001,0.26,0.57,0.67114094,21,2023-12-31T23:00:11Z
120,90,36,0.443,322,316,49062,1577,0.433576,305.75,20593,765,0.44125,306.25,737,0.439,304,1001,50,42.33870968,63.58381503,1.697045883,0.29,0.76,0.85077951,20,2023-12-31T23:00:11Z
121,100,36,0.44925,322,320,51136,1547,0.444,309.5,23615,791,0.44575,317.5,698,0.882,616,630,37,29.79084228,65.69767442,3.03030303,0.35,0.63,0.749435666,20,2023-12-31T23:00:12Z
122,103,86,0.4395,321,317,49110,1414,0.434,311.75,20994,649,0.434,319.25,597,0.867,586,483,39.51666667,43.06818182,65.90909091,2.477876106,0.35,0.59,0.654205607,20,2023-12-31T23:00:12Z
123,104,34,0.436,324,316,53483,1521,0.44025,312.75,21638,579,0.438,312.5,607,0.44,306,700,35.6,27.13091922,54.14364641,0.634584876,0.25,0.43,0.775656325,20,2023-12-31T23:00:12Z
124,98,26,0.43475,318,317,50557,1545,0.43625,312.5,24081,912,0.437,307.5,709,0.433,307.5,948,44.66666667,29.21348315,55.61497326,1.324854266,0.29,0.58,0.808219178,20,2023-12-31T23:00:12Z
125,101,26,0.4305,320,312,46410,1608,0.438,305,23840,942,0.4325,303.75,796,0.438,298,802,40.83333333,29.9028016,59.21787709,2.5625,0.24,0.89,0.736238532,23,2023-12-31T23:00:12Z
126,102,81,0.4395,320,315,50204,1701,0.4395,311.5,22088,836,0.44175,317.75,842,0.441,315,878,46.83333333,35.83945732,63.04347826,2.527472527,0.17,0.72,0.64037123,20,2023-12-31T23:00:12Z
127,102,41,0.43775,323,312,44754,1362,0.43775,317.75,23325,940,0.4365,321.5,777,0.4415,312.5,700,39,33.97291196,61.29032258,2.177463255,0.31,0.77,0.814220183,20,2023-12-31T23:00:12Z
128,106,104,0.438,321,304,46233,1398,0.43675,313.25,21493,793,0.429,304.75,719,0.437,302,976,36.83333333,32.81875357,66.66666667,1.802325581,0.28,0.75,0.77383592,20,2023-12-31T23:00:12Z
129,104,19,0.43975,321,312,44095,1379,0.43925,301.25,18808,663,0.43875,301.25,740,0.444,300.5,480,36,32.84313725,56.61375661,2.389803505,0.29,0.72,0.897196262,18,2023-12-31T23:00:12Z
130,92,1,0.42375,319,305,45799,1500,0.41775,307.5,18808,684,0.42225,299,782,0.423,299.5,987,63.83333333,29.78723404,65.19337017,2.154195011,0.32,0.83,0.658653846,18,2023-12-31T23:00:12Z
131,96,42,0.45375,321,328,55317,1510,0.4575,323.25,23454,650,0.45475,322.25,831,0.4535,320,1071,51.83333333,38.92876864,52.12765957,1.479915433,0.37,0.92,0.543290043,18,2023-12-31T23:00:13Z
132,100,45,0.433,322,312,46426,1349,0.43225,302.25,19162,625,0.4325,308,660,0.4335,314,648,31.9,47.95127353,59.45945946,1.808634772,0.3,0.88,0.833723653,18,2023-12-31T23:00:13Z
133,104,23,0.441,321,326,53917,1829,0.44375,315,21991,719,0.43825,304,751,0.4435,305.5,822,49.5,40.7530454,65.95744681,0.818777293,0.39,0.67,0.712962963,18,2023-12-31T23:00:13Z
134,100,12,0.43125,320,310,53097,1410,0.42375,307.25,20592,614,0.428,306.5,592,0.433,305,882,36.43333333,39.22241281,66.47727273,1.567944251,0.27,0.59,0.710648148,18,2023-12-31T23:00:13Z
135,95,4,0.4365,324,316,48532,1484,0.43625,312,23181,744,0.433,306.25,640,0.4325,301.5,707,50.16666667,39.36170213,61.95652174,1.573033708,0.34,0.5,0.82983683,18,2023-12-31T23:00:13Z
136,80,34,0.41475,320,307,46024,1489,0.41075,308.25,17346,536,0.41425,303,749,0.4175,301,696,77.51666667,23.65721183,46.77419355,1.806588735,0.22,0.53,0.658767773,20,2023-12-31T23:00:13Z
137,90,26,0.4315,320,302,44513,1486,0.42975,307.25,22714,796,0.43075,307,779,0.431,311,900,50.5,26.65505226,60,2.51903925,0.23,0.5,0.745283019,20,2023-12-31T23:00:13Z
138,100,112,0.43575,321,314,49942,1664,0.4355,312.5,23647,924,0.43625,311,791,0.432,298.5,830,51.83333333,32.56855064,60.21505376,2.047592695,0.3,0.67,0.755760369,19,2023-12-31T23:00:13Z
139,98,118,0.42475,319,312,50284,1545,0.42325,311.75,20641,714,0.42525,307,712,0.4285,310.5,746,54.16666667,29.50437318,62.20930233,2.131336406,0.43,0.54,0.624708625,18,2023-12-31T23:00:13Z
140,100,19,0.436,324,300,44384,1339,0.44325,308,21943,803,0.43825,300.75,712,0.446,310,798,41.66666667,42.65815438,28.40236686,1.576182137,0.37,0.56,0.811494253,19,2023-12-31T23:00:13Z
141,97,31,0.43875,319,315,51763,1437,0.433,309,20528,598,0.44,309.5,800,0.441,311,938,51,30.01715266,64.44444444,2.356321839,0.29,0.72,0.597727273,20,2023-12-31T23:00:14Z
142,102,27,0.45425,323,320,52711,1393,0.4495,321.5,23744,662,0.4535,315.75,732,0.46,311.5,570,31.11666667,43.56545961,69.18604651,1.835405565,0.39,0.54,0.721238938,19,2023-12-31T23:00:14Z
143,98,23,0.44675,323,316,53370,1802,0.44275,314.75,22730,858,0.4425,316,849,0.444,322.5,1354,54.16666667,30.72118115,51.26903553,2.497398543,0.29,0.48,0.64380531,18,2023-12-31T23:00:14Z
144,102,95,0.4325,322,306,48275,1578,0.4285,307.75,20496,642,0.42975,308,850,0.4275,300,1015,58.26666667,31.10102157,59.5505618,1.861702128,0.4,0.65,0.687203791,19,2023-12-31T23:00:14Z
145,102,21,0.4415,322,315,45429,1407,0.43675,311.75,19805,662,0.438,311.25,733,0.4435,299,798,53.5,38.11936937,45.40540541,1.565120179,0.35,0.68,0.703196347,20,2023-12-31T23:00:14Z
146,92,53,0.439,322,309,49705,1554,0.44075,305.25,21766,710,0.44125,305,796,0.443,299,1081,45.5,29.43502825,58.23529412,1.776960784,0.36,0.7,0.636986301,20,2023-12-31T23:00:14Z
147,101,84,0.44175,318,315,47703,1680,0.4465,305.75,21204,824,0.4385,313,735,0.442,318.5,808,54.83333333,30.95505618,48.82352941,2.926525529,0.24,0.65,0.591836735,20,2023-12-31T23:00:14Z
148,100,23,0.42375,321,300,40944,1363,0.425,300.75,18840,688,0.4235,299.25,705,0.4185,292.5,749,36,35.85858586,63.48314607,2.209302326,0.26,0.73,0.909722222,20,2023-12-31T23:00:14Z
149,92,35,0.43,321,311,44738,1328,0.42975,301.5,21686,684,0.43,308.75,760,0.436,306.5,1071,53.28333333,32.33256351,50.81081081,2.570233114,0.31,0.67,0.76744186,20,2023-12-31T23:00:14Z
150,95,150,0.44825,323,320,48741,1550,0.43825,308.5,21991,704,0.4435,312.5,633,0.445,325,816,44.33333333,28.832951950000002,63.31360947,2.005730659,0.33,0.52,0.610599078,20,2023-12-31T23:00:14Z
151,100,141,0.4385,322,312,46940,1466,0.441,312,21798,728,0.4375,309,746,0.438,307,570,36.16666667,30.90705487,55.4973822,1.621621622,0.41,0.75,0.931034483,20,2023-12-31T23:00:15Z
152,90,22,0.4455,321,312,55176,1713,0.44225,313.25,21187,766,0.44525,311.75,854,0.4425,308.5,952,46.33333333,27.50434279,54.11764706,2.362669817,0.27,0.76,0.717391304,19,2023-12-31T23:00:15Z
153,88,70,0.433,321,301,39594,1129,0.42925,306,20303,749,0.43225,303,718,0.436,309.5,896,52.33333333,35.3314121,61.62162162,0.911039657,0.32,0.72,0.702576112,18,2023-12-31T23:00:15Z
154,92,35,0.437329,320,313,49416,1335,0.4345,311.25,22666,714,0.43425,313.25,744,0.436,309.5,732,40.21666667,37.16452742,58.24175824,1.893287435,0.32,0.8,0.717539863,19,2023-12-31T23:00:15Z
155,88,14,0.44275,320,315,48258,1421,0.43975,318.75,28984,872,0.4425,319.25,760,0.4465,313.5,707,49.23333333,31.90883191,50.88757396,2.092760181,0.2,0.51,0.681093394,20,2023-12-31T23:00:15Z
156,92,13,0.43475,319,308,45984,1218,0.436,319.25,22409,532,0.43725,303,499,0.4315,312.5,718,41,39.04542841,76.60818713,2.074927954,0.28,0.56,0.745920746,18,2023-12-31T23:00:15Z
157,92,121,0.42925,320,306,50300,1404,0.43575,304.75,21702,712,0.43075,304,654,0.441,287,513,37.5,33.16239316,68.86227545,1.993957704,0.25,0.66,0.945080092,21,2023-12-31T23:00:15Z
158,100,124,0.44225,320,323,54930,1704,0.44475,316.5,23036,842,0.44925,318.75,634,0.442,318,527,25.66666667,29.17831191,59.44444444,2.253032929,0.3,0.6,0.918367347,18,2023-12-31T23:00:15Z
159,98,92,0.44175,322,315,46024,1554,0.439,313.5,22220,742,0.44525,319.75,704,0.447,310,679,36.85,47.45075319,70.45454545,1.942926533,0.38,0.52,0.668903803,19,2023-12-31T23:00:15Z
160,98,74,0.426,320,309,47599,1309,0.4255,299.75,20255,681,0.43175,301.5,598,0.4235,298,672,53.46666667,38.0952381,88.34355828,2.038439138,0.3,0.89,0.832183908,19,2023-12-31T23:00:15Z
161,94,110,0.43,321,310,45976,1158,0.4285,297.5,22554,760,0.43575,305.5,677,0.428,290,518,38.01666667,22.78835386,47.02702703,4.134078212,0.36,0.53,0.629186603,20,2023-12-31T23:00:16Z
162,85,77,0.42775,321,307,44095,1390,0.428,310.5,20657,646,0.4275,309.5,747,0.4275,310,914,59.43333333,47.9006505,76.43678161,0.976450316,0.24,0.58,0.693023256,20,2023-12-31T23:00:16Z
163,100,45,0.4435,324,314,47085,1358,0.4465,327.75,24788,912,0.44675,322,900,0.4475,335,819,54.33333333,34.48464912,55.02392344,2.00927357,0.3,1.07,0.719457014,20,2023-12-31T23:00:16Z
164,96,15,0.43375,320,310,47438,1729,0.429,305.25,20368,807,0.43575,300.5,662,0.4355,314.5,774,55,29.9522673,70.58823529,2.558139535,0.41,0.84,0.940229885,21,2023-12-31T23:00:16Z
165,100,20,0.43125,320,304,43002,1507,0.4325,307.75,21396,892,0.433,309,700,0.444,327,644,40.16666667,27.68691589,48.82352941,2.915951973,0.42,0.75,0.630071599,20,2023-12-31T23:00:16Z
166,80,14,0.425,319,293,44223,1110,0.42525,294.75,19162,502,0.42625,301,665,0.4255,309.5,1252,53.33333333,33.67816092,61.45251397,1.712707182,0.25,0.65,0.745762712,20,2023-12-31T23:00:16Z
167,90,137,0.44325,322,314,52776,1498,0.4425,298,22698,668,0.4425,314.75,592,0.4515,312.5,504,35.23333333,38.66513234,67.93478261,2.614758861,0.4,0.76,0.733634312,20,2023-12-31T23:00:16Z
168,90,98,0.43775,318,320,50911,1552,0.438,308.75,27264,858,0.4365,316.25,639,0.4385,302,504,35.21666667,34.39093484,55.02645503,2.293064877,0.35,0.62,0.81498829,24,2023-12-31T23:00:16Z
169,88,96,0.4375,321,316,56360,1465,0.43525,309.75,20962,616,0.439,312.75,887,0.4415,309.5,724,41.28333333,29.79683973,57.60869565,2.190580504,0.2,0.71,0.75,18,2023-12-31T23:00:16Z
170,88,96,0.43275,320,319,56328,1500,0.434,310.75,22425,686,0.431,312.5,730,0.4335,321.5,872,41.4,27.40440324,51.61290323,2.159468439,0.27,0.64,0.712264151,18,2023-12-31T23:00:16Z
171,92,73,0.4265,320,311,45300,1816,0.4225,309.75,20384,789,0.426,307.5,754,0.424,314,945,66.16666667,26.60388464,54.11764706,1.471453796,0.35,0.72,0.778823529,19,2023-12-31T23:00:17Z
172,100,113,0.44275,325,313,45976,1265,0.448,313.25,22522,761,0.4425,315.75,525,0.44,316.5,665,38.16666667,40.90909091,71.26436782,1.68444694,0.25,0.75,0.902222222,18,2023-12-31T23:00:17Z
173,101,48,0.43925,321,320,49712,1640,0.4335,318,23695,718,0.4375,307.25,693,0.435,296.5,763,39.36666667,30.01138952,65.14285714,2.479338843,0.23,0.72,0.826879271,18,2023-12-31T23:00:17Z
174,103,74,0.44675,319,315,47969,1742,0.44675,315.5,24354,863,0.44325,316,864,0.4425,312,931,40.66666667,36.53738055,58.24175824,4.021289178,0.33,0.57,0.683257919,20,2023-12-31T23:00:17Z
175,92,12,0.4455,323,323,52984,1824,0.4455,314,24194,910,0.4495,312.5,800,0.4485,302,846,41.65,36.54178674,55.30726257,2.34375,0.36,0.6,0.68220339,20,2023-12-31T23:00:17Z
176,100,47,0.44275,321,322,57936,1944,0.43975,315.75,21991,807,0.441,318.5,744,0.4395,317.5,784,40.16666667,30.07432819,58.42696629,2.535832415,0.28,0.57,0.727477477,20,2023-12-31T23:00:17Z
177,88,59,0.43025,320,305,46265,1580,0.432,306.5,20271,642,0.4315,303.75,821,0.4325,309,1211,58.66666667,32.03214696,50.81967213,2.015411974,0.3,0.6,0.848623853,19,2023-12-31T23:00:17Z
178,104,66,0.43775,323,315,49305,1680,0.4375,322,21895,744,0.43975,311,724,0.434,305,780,42.83333333,37.00234192,59.52380952,1.44092219,0.24,0.9,0.85778781,18,2023-12-31T23:00:17Z
179,102,33,0.4355,319,320,54270,1647,0.43475,317.25,23342,618,0.44215,319.5,676,0.441,332.5,836,53.5,32.25083987,59.21787709,2.111111111,0.26,0.82,0.613839286,17,2023-12-31T23:00:17Z
180,100,23,0.43075,319,313,49512,1646,0.4355,318.25,24354,676,0.431,311.5,861,0.4275,300,1092,45,38.52889667,59.3220339,2.485549133,0.25,0.86,0.661214953,18,2023-12-31T23:00:17Z
181,104,81,0.44075,319,308,49608,1500,0.4315,297.75,19680,712,0.43775,305.25,665,0.4405,295.5,570,29.83333333,35.39358601,65.49707602,2.29226361,0.31,0.66,0.722222222,20,2023-12-31T23:00:18Z
182,103,153,0.43025,321,302,45831,1433,0.4285,299,20818,730,0.42775,304,691,0.428,298,714,42.66666667,36.67439166,70.83333333,2.202380952,0.27,0.65,0.917620137,20,2023-12-31T23:00:18Z
183,98,30,0.43375,319,308,48435,1638,0.43075,304.25,23752,639,0.43225,304.25,672,0.4385,313.5,1113,41,40.13040901,51.14942529,2.173913043,0.39,0.63,0.648275862,21,2023-12-31T23:00:18Z
184,102,16,0.432,323,312,51152,1505,0.43,308,22296,744,0.42775,304,728,0.43,302,518,36.23333333,32.12589074,71.42857143,2.58780037,0.21,0.87,0.816091954,20,2023-12-31T23:00:18Z
185,102,21,0.44175,322,318,51827,1456,0.44,309,25286,861,0.44425,322.25,550,0.447,322.5,486,37.98333333,35.06044905,56.52173913,2.121390689,0.31,0.91,0.764044944,20,2023-12-31T23:00:18Z
186,102,153,0.4365,323,320,52647,1818,0.43225,315,22377,794,0.4375,314.75,768,0.442,319,651,46,29.63604853,58.52272727,2.024539877,0.29,0.73,0.754022989,19,2023-12-31T23:00:18Z
187,102,24,0.437,322,317,48886,1533,0.44,310.75,24688,872,0.44025,315,666,0.45,312.5,479,44.83333333,33.29564726,54.4973545,2.248454188,0.35,0.72,0.95045045,19,2023-12-31T23:00:18Z
188,105,150,0.44425,322,316,50782,1535,0.437,310.75,21091,724,0.44425,318,649,0.4415,323.5,514,31.33333333,42.09039548,71.42857143,1.594802126,0.24,0.84,NULL,20,2023-12-31T23:00:18Z
189,101,32,0.44225,319,304,50911,1323,0.4395,306.25,21525,537,0.441,308.25,690,0.4445,306.5,805,36,19.87435751,39.20454545,2.005730659,0.35,0.68,0.657407407,20,2023-12-31T23:00:18Z
190,102,63,0.441,321,308,50252,1542,0.4405,308.5,23502,796,0.44225,306,623,0.4475,316.5,581,32.83333333,34.93571828,62.23404255,2.370689655,0.36,0.81,0.700460829,21,2023-12-31T23:00:18Z
191,104,17,0.42725,319,307,48757,1387,0.425,315.5,22940,606,0.42875,308.25,656,0.4295,312,640,37.83333333,39.19860627,50.27027027,2.5,0.17,0.82,0.645539906,18,2023-12-31T23:00:19Z
192,105,94,0.43125,320,317,49480,1610,0.4365,309.5,21364,733,0.431,314.5,602,0.437,308,534,31.28333333,42.85714286,60.54054054,2.347161572,0.35,0.67,0.889952153,20,2023-12-31T23:00:19Z
193,102,40,0.43425,323,325,52422,1629,0.43425,309.75,19676,565,0.43325,326,775,0.439,318,784,34.36666667,42.41573034,68.7150838,2.586206897,0.2,0.68,0.678082192,20,2023-12-31T23:00:19Z
194,102,98,0.42775,321,306,45204,1367,0.42875,303.25,19226,653,0.4255,300.5,663,0.427,310,623,37.33333333,29.31844888,59.52380952,1.649746193,0.26,0.68,0.788235294,20,2023-12-31T23:00:19Z
195,100,61,0.43325,322,318,50766,1558,0.431,310,21782,793,0.434,308.25,788,0.4365,302.5,1054,56.33333333,27.7998863,53.63128492,2.575587906,0.21,0.67,0.698823529,19,2023-12-31T23:00:19Z
196,100,111,0.43575,322,311,48596,1500,0.436,301,19130,744,0.43875,299,756,0.442,307.5,1200,46.33333333,41.10465116,59.23913043,1.851851852,0.22,0.6,0.659090909,18,2023-12-31T23:00:19Z
197,102,10,0.43525,320,329,56344,1890,0.43525,324,25479,914,0.43625,327.5,793,0.434,310.5,802,58.66666667,28.61789514,50,3.128621089,0.41,0.81,0.725118483,20,2023-12-31T23:00:19Z
198,96,20,0.43725,319,323,54496,1550,0.4425,320.25,27682,831,0.4395,320.25,789,0.44465,317.5,882,44,30.05714286,52.84090909,3.428571429,0.25,0.66,0.570114943,22,2023-12-31T23:00:19Z
199,100,142,0.4355,323,312,38244,1127,0.43875,317.5,22345,858,0.436,316.5,768,0.438,310,973,51.66666667,29.44162437,54.83870968,1.065989848,0.44,0.55,0.747706422,20,2023-12-31T23:00:19Z
200,100,87,0.431,321,304,46217,1325,0.4315,294,18840,690,0.43075,307.25,780,0.4385,310,1186,49.83333333,33.14285714,61.875,1.483171706,0.35,0.92,0.777777778,19,2023-12-31T23:00:19Z
201,100,44,0.435,321,314,56280,1759,0.434,320,23647,814,0.43575,303.5,705,0.439,324,1348,51.61666667,33.18129989,50.84745763,2.68378063,0.32,0.82,0.623501199,20,2023-12-31T23:00:20Z
202,102,16,0.44675,322,320,51618,1302,0.43925,327.75,21621,602,0.443,313.75,537,0.442,324,476,28.15,47.21906924,58.52272727,1.860202931,0.43,0.78,0.755196305,21,2023-12-31T23:00:20Z
203,95,2,0.42825,323,310,46876,1561,0.425,317.75,22345,798,0.43025,317.75,576,0.43,318.5,766,47.61666667,30.57996485,52.74725275,0.8,0.31,0.6,0.623556582,21,2023-12-31T23:00:20Z
204,98,6,0.442,323,318,50380,1194,0.44325,318.75,23663,709,0.4395,315,705,0.4465,315,1057,57,32.43553009,42.39130435,0.275330396,0.27,0.41,0.769574944,21,2023-12-31T23:00:20Z
205,70,1,0.43725,319,309,47937,1447,0.43825,306.25,26099,950,0.437,309.25,694,0.4345,327,651,54.26666667,32.58362168,44.44444444,2.540937324,0.3,0.7,0.493181818,21,2023-12-31T23:00:20Z
206,104,32,0.439,321,314,51088,1659,0.4365,318.5,23567,793,0.4415,325,800,0.4445,317.5,998,49.61666667,37.74985722,48.38709677,3.07424594,0.3,0.5,0.703539823,21,2023-12-31T23:00:20Z
207,95,42,0.43925,324,314,50557,1794,0.439,311.5,25029,906,0.434,319,821,0.435,311.5,1102,73.33333333,25.17281106,48.31460674,2.708933718,0.31,0.64,0.798657718,21,2023-12-31T23:00:20Z
208,84,35,0.4255,320,305,46924,1407,0.42925,306,21268,663,0.4235,305.75,822,0.427,311.5,906,66.15,26.60388464,47.25274725,2.464985994,0.34,0.63,0.637647059,20,2023-12-31T23:00:20Z
209,100,64,0.43525,423,316,46313,1384,0.4345,322.5,20528,891,0.4345,308.25,704,0.432,315,990,48.66666667,37.06253586,62.85714286,2.301369863,0.24,0.62,0.523041475,18,2023-12-31T23:00:20Z
210,102,27,0.4335,319,317,54372,1686,0.43225,303.5,23164,672,0.43275,324,684,0.4335,310,987,58.16666667,31.875,57.37704918,3.337236534,0.32,0.89,0.823943662,22,2023-12-31T23:00:20Z
211,99,18,0.44275,323,318,60508,1626,0.4395,315.75,23358,693,0.444,317.75,763,0.45,342,914,38.7,35.11576626,53.73134328,3.396809058,0.37,0.73,0.782909931,20,2023-12-31T23:00:21Z
212,100,32,0.432,324,314,49978,1608,0.43375,312,22246,828,0.4365,315.25,1012,0.442,321.5,1015,63.33333333,27.23138147,51.47928994,2.716763006,0.4,0.74,0.661137441,20,2023-12-31T23:00:21Z
213,100,46,0.43175,323,318,45044,1508,0.427,314,20576,719,0.4305,318.75,728,0.428,302.5,970,51.11666667,40.11560694,52.30769231,2.132312739,0.43,0.79,0.68321513,20,2023-12-31T23:00:21Z
214,98,27,0.433,322,311,48837,1656,0.4355,319,21171,761,0.436,316,822,0.4375,317,1208,57,37.06015891,57.78894472,2.638664513,0.3,0.78,0.998842593,22,2023-12-31T23:00:21Z
215,104,79,0.4355,320,310,47165,1540,0.438,314,22634,892,0.4365,309.25,746,0.444,325.5,1250,50.33333333,38.71693866,61.17021277,2.785838654,0.29,0.69,0.840546697,20,2023-12-31T23:00:21Z
216,102,30,0.452,319,326,57630,1617,0.44675,328.25,28293,828,0.448,318.25,782,0.447,1800,931,51.33333333,42.56410256,46.44808743,0.171722954,0.22,0.5,0.737931034,21,2023-12-31T23:00:21Z
217,102,50,0.44,319,344,61303,1864,0.438,314.25,25176,721,0.4445,328,840,0.4335,319,1130,59.83333333,24.66063348,48.63387978,3.723404255,0.24,0.79,0.660592255,20,2023-12-31T23:00:21Z
218,102,64,0.4445,323,321,52952,1516,0.44725,327.75,22666,777,0.4435,316.75,791,0.444,319,994,41.66666667,34.92957746,52.17391304,2.866593164,0.15,0.62,0.745495495,20,2023-12-31T23:00:21Z
219,100,37,0.4355,323,316,48966,1566,0.4305,315,18406,721,0.4325,316.75,754,0.43,313.5,984,61.83333333,27.49262537,54.03726708,2.327005511,0.23,0.65,0.84494382,20,2023-12-31T23:00:21Z
220,105,30,0.43475,324,325,52727,1729,0.43575,323,23744,824,0.4325,311.75,737,0.436,310.5,861,45.01666667,35.68985177,51.12359551,3.18627451,0.27,1.51,0.853080569,20,2023-12-31T23:00:21Z
221,103,47,0.4295,322,312,43548,1402,0.42675,308,19323,707,0.42925,305.75,714,0.436,319,1186,59.33333333,35.71844095,63.06818182,2.19017094,0.31,0.63,0.769784173,20,2023-12-31T23:00:22Z
222,104,16,0.42875,321,301,45349,1577,0.429,307.75,20962,662,0.43425,321,735,0.437,312,896,44.7,34.20899008,33.33333333,2.827466821,0.35,0.78,0.773148148,21,2023-12-31T23:00:22Z
223,104,92,0.4445,319,326,53129,1575,0.45025,324,26010,677,0.44725,324.5,676,0.4425,319,840,34,22.39641657,52.12121212,1.149425287,0.46,0.82,0.657471264,20,2023-12-31T23:00:22Z
224,108,29,0.43225,319,324,54274,1564,0.43375,317.5,21396,628,0.4355,324.5,808,0.4405,328.5,1218,53.33333333,30.00573723,45.40540541,3.294797688,0.37,0.62,0.662068966,20,2023-12-31T23:00:22Z
225,98,43,0.447,322,304,48339,1288,0.4475,312.25,20673,763,0.4465,310,670,0.4545,326,1253,35,34.54947485,54.54545455,1.767955801,0.45,0.88,0.733924612,19,2023-12-31T23:00:22Z
226,104,38,0.43425,324,323,52100,1768,0.42825,307.75,20207,822,0.435,322,1040,0.433,313,1166,66.16666667,38.08724832,55.55555556,2.517162471,0.29,0.85,0.776978417,20,2023-12-31T23:00:22Z
227,103,57,0.43025,321,315,49239,1950,0.4285,315.25,22474,901,0.4295,314.5,779,0.44,323.5,1054,41.55,32.21320973,49.45652174,2.549246813,0.38,0.62,0.694252874,21,2023-12-31T23:00:22Z
228,109,41,0.438,320,306,47438,1530,0.43575,304.25,20440,782,0.44125,309,840,0.4395,307,1326,49.33333333,43.93939394,67.0212766,2.863559798,0.38,0.86,0.868965517,20,2023-12-31T23:00:22Z
229,108,26,0.43375,323,306,48274,1398,0.43,308.25,23084,716,0.434,307.5,628,0.437,309,662,38.11666667,39.39220183,56.98324022,2.920560748,0.27,0.74,0.739030023,21,2023-12-31T23:00:22Z
230,108,39,0.4445,321,320,48660,1608,0.445,321.5,21396,712,0.4425,320.25,668,0.437,317,654,37.45,28.66741321,58.38150289,3.00982801,0.28,0.55,0.862790698,20,2023-12-31T23:00:22Z
231,102,35,0.433,319,320,50750,1587,0.43525,320.5,26573,788,0.43325,313.5,770,0.4365,320,1354,69.83333333,23.31969608,46.11111111,3.442340792,0.32,0.56,0.693548387,20,2023-12-31T23:00:23Z
232,108,31,0.436,322,314,48602,1692,0.43025,310,21622,808,0.43575,311.5,826,0.4385,309,816,33.33333333,44.70655926,57.62711864,3.352601156,0.31,0.67,0.924137931,22,2023-12-31T23:00:23Z
233,108,87,0.44825,323,313,49673,1377,0.44375,320.5,20512,623,0.4495,314.25,821,0.45,310,802,43.1,37.40661686,60.86956522,2.761550717,0.42,0.97,0.943262411,20,2023-12-31T23:00:23Z
234,98,50,0.4305,323,312,46201,1432,0.42875,303.75,19387,618,0.4285,308.25,606,0.433,325.5,1092,52.18333333,23.9906378,40.33149171,2.390670554,0.39,0.86,0.796296296,20,2023-12-31T23:00:23Z
235,106,19,0.43475,319,318,51272,1320,0.43525,307.25,20690,632,0.44275,317.25,723,0.4395,320,906,47.66666667,40.67121729,66.86046512,3.183962264,0.38,0.87,0.692307692,20,2023-12-31T23:00:23Z
236,101,117,0.438,319,318,49110,1526,0.436,311.5,21589,864,0.43875,317.5,878,0.438,311.5,1032,54.16666667,37.03703704,54.65116279,2.790697674,0.36,0.79,0.712643678,19,2023-12-31T23:00:23Z
237,100,50,0.427,319,316,53419,1572,0.42325,307.5,22666,684,0.42525,307,582,0.427,310.5,868,64.78333333,27.84810127,44.91017964,3.273809524,0.4,0.66,0.612903226,19,2023-12-31T23:00:23Z
238,105,56,0.42125,321,305,42439,1312,0.42175,303.5,18326,648,0.41575,291.5,724,0.418,302.5,732,47.83333333,36.20791494,61.45251397,2.837290098,0.31,0.69,0.788732394,18,2023-12-31T23:00:23Z
239,102,47,0.42575,321,310,41732,1506,0.425,305.75,19628,791,0.566333333,409.3333333,716,0.4305,303,850,53.5,40.47619048,62.3655914,2.705882353,0.41,0.66,0.813364055,20,2023-12-31T23:00:23Z
240,102,16,0.43025,323,308,42310,1330,0.42925,315.5,21686,758,0.4285,306.5,800,0.4285,301.5,819,58.83333333,40.0234055,54.18994413,2.900232019,0.39,0.71,0.845454545,20,2023-12-31T23:00:23Z
241,107,71,0.4495,320,318,49384,1692,0.449,327.5,25962,842,0.45075,316.5,761,0.453,326.5,994,48.5,28.7394958,49.7382199,3.174603175,0.4,0.74,0.827956989,20,2023-12-31T23:00:24Z
242,104,40,0.45525,328,324,51875,1813,0.45725,320.5,24177,861,0.46,324,898,0.463,316.5,1088,53.83333333,34.01950163,60.82474227,3.249475891,0.42,0.94,0.633832976,20,2023-12-31T23:00:24Z
243,107,15,0.43025,324,313,46008,1526,0.42275,297.5,20657,775,0.43325,308.75,754,0.4325,307.5,1238,55.2,30.50749712,56.81818182,3.550295858,0.31,0.36,0.874709977,20,2023-12-31T23:00:24Z
244,106,30,0.44675,319,323,55839,1703,0.44325,318.5,23245,674,0.44975,325.75,679,0.4555,331.5,1144,49.33333333,33.60210538,63.07692308,4.371584699,0.38,0.71,0.623287671,22,2023-12-31T23:00:24Z
245,105,92,0.4365,325,317,46097,1522,0.4305,306,20866,905,0.42675,309,752,0.423,304.5,882,47.66666667,33.19977104,47.84946237,2.591283863,0.35,0.74,0.705882353,21,2023-12-31T23:00:24Z
246,80,21,0.435,319,310,46056,1330,0.43225,313.75,22490,672,0.43575,305.5,690,0.44,310,1246,54.66666667,28.26086957,53.55191257,2.688486265,0.25,0.83,0.630841121,19,2023-12-31T23:00:24Z
247,106,52,0.418,320,312,48853,1573,0.4215,303.5,20464,686,0.42,308.5,802,0.427,317,1306,55,30.75571178,54.18994413,3.275862069,0.33,0.61,0.7470726,22,2023-12-31T23:00:24Z
248,108,37,0.4265745,324,316,52342,1736,0.42825,313.5,21059,793,0.4295,322.25,1020,0.428,319,1026,74,30.58280439,59.89010989,3.333333333,0.35,0.74,0.683333333,20,2023-12-31T23:00:24Z
249,106,43,0.44225,322,320,47840,1616,0.4445,309.75,22522,950,0.43925,312.5,774,0.446,319.5,1008,50.16666667,40.75144509,43.24324324,2.923076923,0.46,0.76,0.731707317,20,2023-12-31T23:00:24Z
250,109,70,0.4345,321,306,47760,1498,0.43875,314.5,19451,698,0.434,308.75,735,0.4405,312.5,770,45.83333333,35.18621456,61.05263158,3.191489362,0.23,0.73,0.953917051,18,2023-12-31T23:00:24Z
251,108,51,0.439,322,307,48821,1596,0.435,309.25,19805,763,0.4415,311,718,0.4485,326,606,52.16666667,43.82955174,67.20430108,3.852596315,0.35,0.85,0.941724942,19,2023-12-31T23:00:25Z
252,104,39,0.4325,321,314,43998,1424,0.43325,314.5,18712,782,0.43275,310.25,705,0.441,318,644,58.66666667,42.84064665,68.64864865,2.415966387,0.23,0.73,0.967592593,20,2023-12-31T23:00:25Z
253,100,46,0.42475,321,311,47985,1577,0.419,308.25,18744,738,0.42925,313.75,826,0.4265,301.5,1116,59.66666667,30.7735426,49.72972973,2.824267782,0.39,0.96,0.70521542,19,2023-12-31T23:00:25Z
254,95,15,0.44675,319,309,46088,1176,0.448,302.75,22602,665,0.44675,308.75,648,0.446,299,1127,66.5,32.13483146,54.54545455,2.419808666,0.4,0.9,0.587973274,21,2023-12-31T23:00:25Z
255,103,108,0.4185,320,312,46040,1628,0.4225,309.75,17908,814,0.422,302.25,819,0.42,286.5,1155,61.16666667,33.03834808,50.85714286,2.34939759,0.38,1.01,0.624676242,18,2023-12-31T23:00:25Z
256,106,35,0.4345,320,315,47937,1384,0.43925,306,21992,761,0.437,312.5,847,0.4455,178.5,749,54.16666667,32.94930876,58.01104972,2.958579882,0.46,0.9,0.922897196,18,2023-12-31T23:00:25Z
257,104,45,0.43675,320,310,47503,1400,0.43625,308.25,19644,644,0.43575,310.75,789,0.441,314.5,952,50.08333333,28.30613393,52.68817204,2.888503755,0.38,0.79,0.944567627,19,2023-12-31T23:00:25Z
258,104,16,0.44525,320,314,44995,1502,0.44525,318.25,21460,866,0.44175,315,816,0.4475,320,980,58.16666667,38.18696884,50.50505051,2.717391304,0.42,0.93,0.769230769,20,2023-12-31T23:00:25Z
259,102,39,0.44175,324,310,46410,1484,0.44425,310.75,19194,714,0.4375,317.75,847,0.4405,326,906,37.83333333,33.03964758,56.31578947,2.905982906,0.33,0.8,0.751662971,19,2023-12-31T23:00:25Z
260,106,24,0.43675,319,305,49609,1656,0.43875,314.25,23326,665,0.433,304.25,779,0.4345,302.5,1071,46,27.9478458,52.84090909,3.05997552,0.32,0.79,0.618721461,20,2023-12-31T23:00:25Z
261,104,31,0.44225,325,313,48773,1580,0.594,426.6666667,21948,866,0.4435,313.5,849,0.4405,307.5,889,52.33333333,41.57923799,62.37113402,2.936549554,0.35,0.64,0.730088496,19,2023-12-31T23:00:26Z
262,103,47,0.43275,319,316,48902,1563,0.4265,314.75,22490,873,0.4325,321,868,0.4355,310,1144,57,34.20902342,65,3.406466513,0.26,0.61,0.650574713,20,2023-12-31T23:00:26Z
263,106,37,0.441,322,306,46972,1575,0.4345,305.75,22634,842,0.43625,307,828,0.436,311.5,637,46.83333333,35.31122746,60.97560976,3.105590062,0.34,0.64,0.862302483,20,2023-12-31T23:00:26Z
264,102,37,0.4245,322,307,48419,1514,0.422,297.75,20158,726,0.42725,309.75,875,0.4255,321,1036,54.16666667,33.60137852,55.11363636,2.89017341,0.2,0.75,0.82038835,20,2023-12-31T23:00:26Z
265,106,64,0.4485,324,324,54239,1876,0.4475,322.75,25656,1031,0.4525,328.75,828,0.4575,326.5,1043,65.5,31.82308522,54.27135678,3.157894737,0.2,0.63,0.956018519,20,2023-12-31T23:00:26Z
266,107,29,0.433,324,302,47551,1654,0.43375,302,20158,835,0.42975,295,779,0.4315,308,1239,57,42.25988701,56.31578947,1.685393258,0.21,0.67,0.72985782,19,2023-12-31T23:00:26Z
267,103,90,0.4435,319,308,50187,1414,0.443,312.75,21749,658,0.44375,309.5,728,0.443,305.5,886,59.33333333,29.92081448,21.10552764,3.067484663,0.31,0.63,0.609865471,20,2023-12-31T23:00:26Z
268,100,42,0.4585,320,312,47069,1404,0.456,309.5,21043,747,0.4555,304.25,698,0.457,307.5,984,31,39.06926407,67.77777778,3.409090909,0.32,0.78,0.986754967,21,2023-12-31T23:00:26Z
269,108,32,0.454,319,306,48387,1410,0.45075,319.25,27062,859,0.4495,314.25,681,0.4575,1774,1400,34.66666667,33.98656215,51.35135135,3.431101273,0.35,0.66,0.611353712,20,2023-12-31T23:00:26Z
270,102,27,0.437,320,310,50300,1687,0.43575,317,24852,1040,0.4325,315.75,798,0.43,304.5,819,62.16666667,29.42857143,40.11299435,2.98136646,0.31,0.75,0.748267898,20,2023-12-31T23:00:26Z
271,108,40,0.428,323,302,49271,1293,0.42475,304.5,21412,784,0.42425,301.75,686,0.436,312,910,52.18333333,33.80447585,49.06832298,2.841918295,0.36,0.65,0.758949881,20,2023-12-31T23:00:27Z
272,109,23,0.43125,322,316,48242,1479,0.432075,306.5,22522,704,0.43525,318.75,760,0.434,315.5,794,57.03333333,34.0546697,55.97826087,2.603613177,0.28,0.63,0.723809524,20,2023-12-31T23:00:27Z
273,109,79,0.45,321,327,56248,1549,0.446,326,25480,774,0.441,319,863,0.4395,309,1004,48.68333333,31.90770962,62.42774566,2.923331495,0.24,0.69,0.749425287,20,2023-12-31T23:00:27Z
274,104,92,0.4395,317,315,47607,1496,0.436,301.5,23792,660,0.444,317.25,814,0.4445,312,1060,58.16666667,24.06892718,49.45054945,2.023608769,0.38,0.76,0.670533643,20,2023-12-31T23:00:27Z
275,104,111,0.42475,321,316,46088,1586,0.42325,295,19049,868,0.42375,305.75,672,0.428,310,760,63,33.55184744,50,2.869518138,0.23,0.88,0.545673077,19,2023-12-31T23:00:27Z
276,103,26,0.452,319,316,48907,1578,0.4455,313.75,23004,726,0.45125,326,866,0.451,310.5,931,61.5,38.35242771,60.33519553,3.152173913,0.31,0.88,0.61790393,20,2023-12-31T23:00:27Z
277,105,136,0.4343335,319,316,50702,1488,0.431,313.5,23470,752,0.4385,327,840,0.441,303,861,65.83333333,26.22196665,45.76271186,2.824858757,0.18,0.67,0.662870159,20,2023-12-31T23:00:27Z
278,104,30,0.4485,324,309,50091,1536,0.4495,321.5,24531,929,0.44825,317.25,943,0.4555,310,752,62.66666667,27.42474916,56.21621622,3.136629452,0.46,0.74,0.958997722,20,2023-12-31T23:00:27Z
279,106,128,0.42725,324,308,45831,1631,0.429,309.75,20271,763,0.42875,301,912,0.4275,310,819,56.16666667,31.84421535,57.37704918,2.521008403,0.34,0.74,0.858513189,20,2023-12-31T23:00:27Z
280,102,96,0.432,321,309,52744,1592,0.4335,309.75,20158,612,0.43825,304.25,724,0.445,319.5,1127,51.55,31.10465116,50.57471264,3.419811321,0.37,0.66,0.871853547,20,2023-12-31T23:00:27Z
281,102,149,0.43775,321,310,48821,1640,0.43875,309,21396,803,0.43675,312,684,0.4405,304,990,50.26666667,38.50354997,54.78723404,3.517877739,0.32,0.94,0.995305164,23,2023-12-31T23:00:28Z
282,104,60,0.44075,320,310,49882,1712,0.4375,302.5,22650,861,0.44375,316.5,840,0.4505,311,956,69.83333333,25.04145937,53.67231638,2.824858757,0.34,0.73,0.744186047,20,2023-12-31T23:00:28Z
283,103,20,0.43025,324,316,52302,1549,0.43075,319.25,22795,802,0.4315,309.5,732,0.436,304,1652,69.11666667,33.48623853,57.22222222,3.058280439,0.61,0.59,0.836065574,23,2023-12-31T23:00:28Z
284,108,103,0.44,320,306,43975,1435,0.43625,310.75,20754,668,0.4395,306.75,814,0.443,314,1354,54.98333333,33.29519451,50.86705202,2.728285078,0.41,0.98,0.81264637,20,2023-12-31T23:00:28Z
285,105,23,0.432,319,304,46394,1774,0.43025,306.75,21155,882,0.4295,298.5,817,0.4295,311.5,959,62.83333333,30.4246655,55.23255814,3.548574753,0.3,0.93,0.744186047,20,2023-12-31T23:00:28Z
286,108,125,0.43925,319,304,46635,1120,0.43975,308,21766,817,0.44125,303.75,598,0.437,304,1088,59.66666667,31.99320498,53.47593583,2.75175644,0.25,0.71,0.670588235,20,2023-12-31T23:00:28Z
287,107,35,0.43825,319,300,51790,1528,0.4315,305.25,25801,1004,0.43525,306.25,866,0.437,305.5,978,66.16666667,28.30080367,45.05494505,3.866128102,0.24,0.76,0.581589958,20,2023-12-31T23:00:28Z
288,106,110,0.41525,319,295,54994,1815,0.4165,303.5,20753,751,0.41825,305,751,0.422,311.5,1082,70,25.33883324,46.59090909,3.244837758,0.32,0.67,0.717761557,19,2023-12-31T23:00:28Z
289,105,100,0.42275,322,302,47567,1617,0.42375,311.25,20882,940,0.42375,299,719,0.419,286,812,59.5,28.04129794,50.84745763,2.978723404,0.31,0.79,0.70990566,20,2023-12-31T23:00:28Z
290,90,133,0.4425,319,318,52132,1694,0.4475,302.5,24274,756,0.445,316.75,1020,0.443,306.5,724,64.5,31.76996092,42.47311828,2.547065338,0.3,0.57,0.74049217,20,2023-12-31T23:00:28Z
291,105,21,0.425,321,308,50959,1832,0.42425,306.25,24081,1186,0.42075,300.5,973,0.426,306,938,72.5,28.74423963,48.91304348,3.093922652,0.29,0.61,0.822323462,22,2023-12-31T23:00:29Z
292,98,72,0.43125,322,313,49078,1768,0.4335,312.25,25302,1055,0.43575,309.5,845,0.445,322,1082,71.5,27.73841962,55.67567568,3.989361702,0.4,0.61,0.623093682,20,2023-12-31T23:00:29Z
293,101,28,0.439,319,312,45092,1498,0.439,314.75,20528,686,0.43875,309,635,0.437,305.5,808,54.5,35.06721216,63.27683616,1.776504298,0.18,0.46,0.768888889,22,2023-12-31T23:00:29Z
294,102,17,0.4435,323,313,52551,1687,0.4435,305.75,20464,772,0.4425,314,721,0.4495,308.5,802,61.71666667,28.5304248,56.41025641,2.997601918,0.28,0.78,0.903153153,23,2023-12-31T23:00:29Z
295,108,71,0.4475,323,306,49239,1564,0.4475,304,19676,721,0.451,306,768,0.4545,313,1088,58.16666667,37.49309774,65.0273224,2.18579235,0.34,0.73,0.662921348,18,2023-12-31T23:00:29Z
296,101,28,0.436,320,318,53836,1785,0.43525,318.5,23679,775,0.43225,313.25,796,0.4355,322,1208,57.31666667,26.86397268,47.72727273,3.394255875,0.26,0.68,0.832167832,18,2023-12-31T23:00:29Z
297,107,45,0.4325,323,312,45478,1502,0.44075,318.25,23920,950,0.43675,303.25,718,0.4375,307.5,1197,59.66666667,26.98504028,50.56179775,2.7479092,0.3,0.74,0.827586207,20,2023-12-31T23:00:29Z
298,104,113,0.44925,327,313,45895,1654,0.44325,315.5,25415,935,0.4555,315,709,0.456,329,1340,58.16666667,35.20494104,63.97849462,2.699530516,0.3,0.6,0.796338673,25,2023-12-31T23:00:29Z
299,105,38,0.42725,325,301,48066,1696,0.42475,304.75,20422,763,0.4235,302,756,0.432,307,1281,60.33333333,33.29473075,51.95530726,3.282399547,0.22,0.55,0.915331808,20,2023-12-31T23:00:29Z
300,105,130,0.45175,318,318,51859,1638,0.4455,311.5,23936,709,0.4495,322.75,766,0.453,312.5,1264,56,33.22072072,60.79545455,2.795208214,0.22,0.75,0.629711752,22,2023-12-31T23:00:29Z
301,90,104,0.4295,317,322,52406,1549,0.4285,319.75,22104,722,0.4375,339.5,718,0.42,333,1372,48.33333333,20.58993638,40.55555556,2.728285078,0.38,0.94,0.655502392,22,2023-12-31T23:00:30Z
302,96,17,0.43475,317,326,51522,1547,0.429,317.5,22988,678,0.4355,320.75,817,0.451,337.5,1141,75.66666667,26.18368511,47.72727273,2.66591038,0.24,0.74,0.675862069,20,2023-12-31T23:00:30Z
303,104,73,0.4445,320,317,47808,1552,0.44575,324.25,29225,962,0.446,318.25,700,0.454,316.5,1400,75,34.83941208,52.87958115,3.664921466,0.31,0.81,0.607843137,20,2023-12-31T23:00:30Z
304,95,64,0.44075,325,311,52468,1626,0.438,312.5,19950,637,0.44375,315.25,784,0.446,317.5,1106,57.16666667,32.43395166,45.94594595,3.395784543,0.4,0.9,0.641891892,20,2023-12-31T23:00:30Z
305,106,125,0.43225,321,299,48692,1519,0.4335,299.25,19756,642,0.42925,295.75,726,0.43,298.5,718,55.28333333,37.621498,53.33333333,3.142536476,0.34,0.85,0.829383886,21,2023-12-31T23:00:30Z
306,98,115,0.442,322,322,52518,1727,0.44525,321,23647,976,0.444,314,976,0.4445,320.5,1092,66.83333333,28.35400225,51.1627907,2.469135802,0.2,0.46,0.67816092,22,2023-12-31T23:00:30Z
307,95,43,0.4375,322,312,53499,1519,0.435,305,21010,768,0.43675,309.5,754,0.445,315.5,756,65.38333333,32.58426966,48.40425532,2.249598286,0.3,0.57,0.762352941,20,2023-12-31T23:00:30Z
308,88,103,0.445,320,312,54512,1913,0.43725,313,21380,696,0.4425,311.75,877,0.4505,326,1197,68.25,25.97844583,48.82352941,2.305159166,0.27,0.55,0.694382022,20,2023-12-31T23:00:30Z
309,104,36,0.437,323,309,44529,1426,0.44075,311.75,21775,884,0.4375,303.5,780,0.4475,315.5,760,70,35.54046406,63.44086022,3.064066852,0.22,0.51,0.807962529,22,2023-12-31T23:00:30Z
310,100,96,0.43675,322,320,53852,1976,0.44,318.5,26605,1122,0.438,304.25,877,0.4405,313,864,68.5,25.27901786,38.79781421,4.340175953,0.24,0.68,0.680434783,25,2023-12-31T23:00:30Z
311,102,40,0.44,319,311,52438,1648,0.43875,312.75,24161,774,0.44,306.25,766,0.438,307.5,1116,61,32.92682927,50,4.284037559,0.38,0.99,0.704651163,20,2023-12-31T23:00:31Z
312,108,24,0.42825,321,308,43902,1477,0.426,305,20432,761,0.4315,311,732,0.4275,312.5,746,38.5,37.66233766,58.88888889,3.546099291,0.36,0.86,0.790754258,20,2023-12-31T23:00:31Z
313,106,118,0.44025,323,310,50509,1746,0.44175,308.25,23502,886,0.438,314.75,751,0.445,309.5,878,41.66666667,38.69148336,56.08465608,2.991944764,0.41,0.57,0.737668161,21,2023-12-31T23:00:31Z
314,100,54,0.4305,324,314,47937,1556,0.43,308.25,19403,882,0.43125,312.75,796,0.4285,303,1320,57,38.08695652,61.4973262,2.857142857,0.25,0.5,0.877880184,20,2023-12-31T23:00:31Z
315,102,122,0.43475,323,314,48708,1703,0.43725,309.5,22490,910,0.4385,309,758,0.4455,312,704,60.83333333,31.38357705,56.38297872,2.777777778,0.31,0.61,0.76056338,20,2023-12-31T23:00:31Z
316,98,26,0.43675,321,315,49834,1521,0.43075,313,22200,735,0.4375,310.75,688,0.441,311.5,1078,51.35,30.01132503,45.55555556,2.98102981,0.4,0.58,0.708333333,19,2023-12-31T23:00:31Z
317,106,97,0.441,324,324,55251,2039,0.4395,324.25,23015,980,0.449,320.25,987,0.4545,309,1018,60.83333333,28.11135371,56.32183908,3.770197487,0.11,0.53,0.776315789,20,2023-12-31T23:00:31Z
318,87,55,0.4085,321,312,46740,1648,0.40775,311.75,17683,802,0.41075,311,835,0.4115,300.5,844,54.5,23.70458606,41.30434783,2.218524681,0.15,0.41,0.680387409,19,2023-12-31T23:00:31Z
319,88,152,0.4345,322,320,50654,1508,0.42875,315.75,17812,744,0.43,307.5,732,0.4305,321,847,60.83333333,26.27070246,46.44808743,1.912568306,0.025,0.57,0.756818182,19,2023-12-31T23:00:31Z
320,103,25,0.4265,319,294,46780,1507,0.424625,305.25,22136,779,0.42425,306.75,765,0.428,311.5,1295,58.5,24.52830189,48.35164835,3.436018957,0.29,0.59,0.699769053,20,2023-12-31T23:00:31Z
321,83,103,0.44075,319,314,48926,1701,0.44425,317.75,25762,660,0.44375,311.5,714,0.453,326.5,1057,57.16666667,24.5883021,36.55913978,3.470588235,0.36,0.65,0.730088496,20,2023-12-31T23:00:32Z
322,90,26,0.578333333,318,411,57936,1932,0.4335,313.75,22843,940,0.43025,299,863,0.433,316,1228,69.33333333,24.61273666,49.04458599,2.746893394,0.31,0.58,0.740909091,19,2023-12-31T23:00:32Z
323,99,22,0.44525,319,321,47969,1500,0.454,316.75,23920,738,0.4525,310.75,716,0.437,316.5,1400,52.33333333,33.0255296,55.37634409,3.327877796,0.3,0.8,0.839622642,20,2023-12-31T23:00:32Z
324,106,77,0.445,317,314,49271,1656,0.43925,304.5,23197,733,0.44625,309.25,859,0.453,311.5,1330,48.16666667,37.62827822,76.78571429,3.052064632,0.23,0.72,0.941309255,20,2023-12-31T23:00:32Z
325,100,35,0.4385,320,306,51297,1587,0.44275,301,23197,807,0.445,315.5,887,0.446,317.5,1166,54.83333333,30.98987627,58.42696629,3.65630713,0.49,0.75,0.716553288,19,2023-12-31T23:00:32Z
326,108,77,0.432275,319,305,47390,1508,0.42875,426.25,20087,716,0.42725,300.5,749,0.4285,306.5,938,40.66666667,44.77521264,66.25,2.727272727,0.15,0.94,0.633333333,20,2023-12-31T23:00:32Z
327,108,19,0.4355,319,305,49516,1475,0.42925,309.5,22908,730,0.42925,303.5,688,0.4335,294.5,1064,61,39.68521641,55.97826087,2.544378698,0.25,0.89,0.674584323,20,2023-12-31T23:00:32Z
328,98,129,0.4355,320,320,50606,1750,0.439,313,23518,821,0.43675,315,882,0.437,305.5,917,52.83333333,35.2072686,63.27683616,3.057757644,0.41,0.77,0.977011494,20,2023-12-31T23:00:32Z
329,88,28,0.43225,320,309,51988,1764,0.4295,304.25,21750,863,0.434,307.75,723,0.4365,312.5,812,51.95,26.81924883,42.69662921,2.169869808,0.35,0.65,0.687782805,19,2023-12-31T23:00:32Z
330,107,104,0.427,320,300,47197,1600,0.42625,298.75,22200,840,0.42575,295.5,688,0.4295,300,1074,47.81666667,36.63024727,55.0802139,2.750275028,0.29,0.7,0.712962963,21,2023-12-31T23:00:32Z
331,90,25,0.4315,320,310,51972,1566,0.4325,318.75,22215,822,0.43475,320,950,0.4385,322.5,987,68,25.84841629,50.26455026,3.246376812,0.3,0.79,0.954022989,18,2023-12-31T23:00:33Z
332,104,109,0.4575,322,325,58000,1773,0.45475,343.25,30238,1060,0.4535,328.25,880,0.4665,334,1096,52.76666667,31.97316937,55.78947368,3.395585739,0.24,0.68,0.88172043,20,2023-12-31T23:00:33Z
333,109,44,0.41725,318,306,42150,1524,0.42075,302.25,20930,775,0.4175,303,541,0.417,316,668,42.16666667,44.24242424,55.74712644,2.631578947,0.33,0.7,0.825775656,19,2023-12-31T23:00:33Z
334,108,112,0.445,319,322,60476,1748,0.442,317.5,25263,795,0.44575,314.5,635,0.458,311,679,35.9,29.59912136,51.61290323,4.154809334,0.36,0.78,0.895591647,19,2023-12-31T23:00:33Z
335,67,44,0.453,320,317,60202,1953,0.44975,306.25,25190,943,0.45125,310.25,961,0.4565,327.5,1312,49.83333333,22.49718785,44.31818182,2.490096208,0.24,0.71,0.582417582,20,2023-12-31T23:00:33Z
336,102,11,0.429,317,308,48982,1598,0.422,310.5,27457,840,0.43025,308.75,761,0.4445,310.5,1064,66.83333333,30.65268065,54.80225989,3.701492537,0.32,0.7,0.634482759,22,2023-12-31T23:00:33Z
337,99,103,0.43825,319,310,49962,1535,0.438,309,25238,852,0.4435,317.25,664,0.4415,328.5,1544,69.5,37.78647289,57.80346821,3.795284646,0.29,0.7,0.667447307,22,2023-12-31T23:00:33Z
338,95,26,0.44725,319,324,57052,2044,0.444875,325.75,24708,1017,0.44775,324,990,0.4475,327.5,1270,64.33333333,33.29652126,54.89130435,3.218645949,0.44,0.83,0.80778032,20,2023-12-31T23:00:33Z
339,104,38,0.4385,321,319,50975,1631,0.43825,320.5,22104,833,0.43775,315,824,0.441,302,1306,58.21666667,33.5864486,55.81395349,2.97691373,0.2,0.61,0.706546275,20,2023-12-31T23:00:33Z
340,108,105,0.45175,319,322,56537,1774,0.45325,318.5,26187,793,0.454,327.25,859,0.4615,312.5,844,36.45,38.58607663,53.36787565,3.303471445,0.35,0.71,0.848214286,22,2023-12-31T23:00:33Z
341,104,54,0.43825,320,312,50139,1788,0.436,319.75,22457,887,0.437,316.5,908,0.4335,318.5,1036,53.83333333,34.49419569,57.07070707,2.985074627,0.44,0.73,0.860986547,20,2023-12-31T23:00:34Z
342,90,50,0.43175,321,312,49898,1605,0.43,306,22474,872,0.4355,310,738,0.4255,299.5,1309,53.9,29.87238979,44,2.505827506,0.05,0.28,0.589201878,20,2023-12-31T23:00:34Z
343,108,96,0.4445,323,322,49207,1356,0.443,316.75,21284,793,0.44425,317.75,749,0.4405,318,875,51.78333333,46.36015326,55.02645503,2.49031544,0.332,0.78,0.779775281,20,2023-12-31T23:00:34Z
344,100,15,0.43975,321,319,53547,1804,0.4405,317,21943,826,0.4385,312.5,863,0.4415,307,1285,62.33333333,28.39931153,59.25925926,2.367242482,0.3,0.7,0.857471264,20,2023-12-31T23:00:34Z
345,104,17,0.4385,321,313,47101,1503,0.4385,312,19498,707,0.43925,313,833,0.4355,309.5,1170,52.7,28.92423366,46.85714286,2.8713418,0.26,0.7,0.776523702,20,2023-12-31T23:00:34Z
346,109,88,0.42,320,312,45027,1636,0.41625,313,18776,735,0.41725,310.5,872,0.4255,322.5,1774,63.78333333,31.37026239,58.52272727,2.764423077,0.23,0.69,0.694581281,20,2023-12-31T23:00:34Z
347,106,27,0.436,NULL,312,53579,1771,0.4335,309.5,20448,670,0.431,305.25,877,0.4365,310,1421,54.5,33.06497987,49.41176471,3.416149068,0.4,0.72,0.670644391,20,2023-12-31T23:00:34Z
348,108,141,0.443,319,320,53692,1762,0.44175,309.5,24451,740,0.44175,308.75,768,0.445,307.5,1502,54.5,27.08449916,56.4516129,3.341013825,0.39,0.61,0.6,21,2023-12-31T23:00:34Z
349,88,21,0.43075,322,312,55332,1843,0.4305,317.25,22779,1034,0.4275,312.75,800,0.4455,315.5,1106,74,32.04407208,50,3.185035389,0.32,0.64,0.689252336,20,2023-12-31T23:00:34Z
350,96,98,0.43875,321,319,54672,1769,0.44,305.25,22264,990,0.442,324.75,1040,0.4475,304,1106,61.83333333,26.53867871,57.89473684,3.426791277,0.43,0.65,0.70521542,20,2023-12-31T23:00:34Z
351,98,22,0.431,321,314,48564,1690,0.4385,308.5,25268,943,0.437,318.75,898,0.447,321.5,1334,57,36.35860542,61.2745098,3.270564916,0.36,0.69,0.774580336,21,2023-12-31T23:00:35Z
352,108,50,0.445,321,322,55412,1846,0.4445,328.25,25705,1046,0.44625,325.5,901,0.443,315,1057,64.83333333,27.01181767,47.87878788,3.520691785,0.35,0.54,0.557017544,23,2023-12-31T23:00:35Z
353,104,21,0.4485,318,298,48998,1522,0.4535,313.25,28373,959,0.4485,306.5,808,0.458,315.5,844,46.66666667,23.87562465,51.74418605,3.703703704,0.36,0.64,0.785714286,20,2023-12-31T23:00:35Z
354,109,126,0.441,320,308,45558,1339,0.43825,314,19692,644,0.4425,305.75,780,0.445,309.5,1302,47.33333333,35.23700742,50.9202454,2.907328892,0.32,0.84,0.751677852,19,2023-12-31T23:00:35Z
355,85,13,0.439,318,318,52454,1703,0.43775,307.5,20464,744,0.4435,324.25,774,0.441,311.5,1302,56.65,23.81747357,43.02325581,3.59212051,0.36,0.68,0.820930233,18,2023-12-31T23:00:35Z
356,109,42,0.429,320,314,53901,1656,0.43025,315.25,21862,733,0.432,318.25,830,0.4375,314,1194,60.65,21.84971098,48.73417722,2.962962963,0.29,0.82,0.823113208,20,2023-12-31T23:00:35Z
357,109,95,0.4345,319,314,49737,1412,0.4355,316.25,21830,742,0.43975,323.5,922,0.437,316,1242,58.86666667,32.4141812,56.83060109,3.185437998,0.29,0.76,0.804651163,20,2023-12-31T23:00:35Z
358,109,17,0.44275,318,312,52824,1653,0.445,317.25,22506,684,0.44275,306.75,645,0.4475,320,1158,56.33333333,26.06741573,42.42424242,2.781136638,0.35,0.69,0.617777778,20,2023-12-31T23:00:35Z
359,105,59,0.43525,320,310,50268,1656,0.43275,313.25,27424,1139,0.43025,310.25,791,0.446,314,1326,59,26.17255356,49.45652174,3.002309469,0.39,0.67,0.639908257,22,2023-12-31T23:00:35Z
360,109,28,0.436,317,315,52302,1682,0.44275,309.75,25576,746,0.4455,307.5,805,0.443,294.5,651,55.66666667,26.54320988,44.76744186,3.064066852,0.44,0.81,0.623831776,20,2023-12-31T23:00:35Z
361,105,81,0.43475,321,320,51522,1852,0.437,312.75,28196,957,0.43425,302.75,716,0.437,316.5,948,49.66666667,28.25191289,51.1627907,3.353293413,0.28,0.95,0.70917226,25,2023-12-31T23:00:36Z
362,103,30,0.44425,321,315,55312,1643,0.44825,321.25,26846,934,0.45175,315.75,906,0.4595,327.5,896,47.06666667,28.04597701,54.74860335,2.964959569,0.3,0.96,0.741935484,24,2023-12-31T23:00:36Z
363,98,126,0.425,320,302,47326,1684,0.42275,306,18503,681,0.424,310.25,822,0.4225,299.5,826,56.26666667,34.06976744,53.71428571,2.55648038,0.29,0.93,0.565320665,21,2023-12-31T23:00:36Z
364,104,48,0.446,319,319,48403,1787,0.448,311.75,21573,875,0.44525,318,849,0.4505,317.5,1572,53.5,30.31973539,58.79120879,3.03030303,0.47,0.94,0.709006928,25,2023-12-31T23:00:36Z
365,109,112,0.441,321,302,48274,1731,0.43975,302,21525,833,0.44225,308,830,0.446,308.5,1288,38.66666667,31.49915778,65.14285714,2.808988764,0.38,0.7,0.939252336,25,2023-12-31T23:00:36Z
366,98,29,0.44125,318,297,48290,1516,0.4405,315,20691,732,0.44675,310.75,800,0.4555,316.5,1278,47.51666667,26.41615255,55.43478261,2.915291529,0.45,0.96,0.663615561,22,2023-12-31T23:00:36Z
367,90,98,0.43925,321,310,52357,1687,0.43625,314,22956,730,0.437,311.75,906,0.449,306.5,976,62.8,20.99603848,46.02272727,2.845982143,0.3,1.08,0.570071259,21,2023-12-31T23:00:36Z
368,104,17,0.43525,321,311,52031,1659,0.43325,305.75,25882,938,0.441,311.75,819,0.4415,312.5,1547,51.33333333,25.85915493,50.56179775,2.848101266,0.31,0.64,0.653206651,25,2023-12-31T23:00:36Z
369,100,109,0.4375,319,320,53290,1703,0.445,311.75,23904,952,0.44,312.5,901,0.4485,314,1428,61.83333333,21.82539683,61.25,2.923976608,0.3,0.92,0.674364896,20,2023-12-31T23:00:36Z
370,92,44,0.44075,320,314,58000,2014,0.44825,308,24660,980,0.445,312.75,914,0.447,318.5,1687,63,17.4904943,37.05583756,3.404924044,0.22,0.98,0.570093458,21,2023-12-31T23:00:36Z
371,108,116,0.439,320,320,55653,1824,0.44425,320,22522,878,0.4415,317,826,0.447,314.5,1274,54.66666667,27.78088317,56.91489362,2.988378528,0.28,0.73,0.729119639,21,2023-12-31T23:00:37Z
372,104,34,0.4235,318,298,44690,1524,0.42425,298.25,21879,957,0.4225,296.75,982,0.4285,300.5,1309,47.5,26.36729994,50.85714286,3.130434783,0.33,0.83,0.622171946,23,2023-12-31T23:00:37Z
373,102,114,0.43775,322,308,49223,1701,0.43675,305,25553,905,0.44,310.5,796,0.447,307,1204,45.33333333,26.88290269,57.06521739,3.494467094,0.33,0.81,0.75877193,25,2023-12-31T23:00:37Z
374,88,59,0.434,318,303,49078,1638,0.445,312.25,23422,889,0.445,313.75,1026,0.4495,309.5,1526,54,32.56616801,47.97687861,2.719033233,0.34,0.67,0.762124711,20,2023-12-31T23:00:37Z
375,102,26,0.429,316,302,49094,1750,0.43425,312.25,21910,914,0.43425,310.5,903,0.4375,293.5,760,49,42.86542923,71.0982659,2.863961814,0.39,0.58,0.495348837,21,2023-12-31T23:00:37Z
376,105,75,0.42675,319,306,47165,1680,0.4255,303.25,21380,870,0.42875,304.5,742,0.443,302.5,872,46.83333333,34.31372549,60.11235955,3.592814371,0.37,0.68,0.665178571,21,2023-12-31T23:00:37Z
377,104,21,0.4325,323,318,49850,1530,0.42925,307.75,21461,734,0.4335,311,854,0.4475,316,868,43.61666667,34.99152063,50.81081081,3.050847458,0.38,0.66,0.610849057,19,2023-12-31T23:00:37Z
378,108,122,0.43875,321,309,53338,1843,0.43775,311,21911,782,0.43425,305,712,0.4395,308,1071,44.31666667,41.41531323,64.04494382,2.444570779,0.3,0.63,0.774336283,22,2023-12-31T23:00:37Z
379,106,69,0.4325,322,316,53322,1843,0.4375,317,21911,908,0.4365,315.75,962,0.4365,311,1386,48.16666667,37.44292237,64,2.162162162,0.37,0.71,0.726190476,22,2023-12-31T23:00:37Z
380,95,130,0.429,322,312,46956,1594,0.431,297,22458,940,0.4335,308.25,878,0.4325,314,1407,53.66666667,30.65735893,57.22222222,2.352941176,0.38,0.69,0.607981221,20,2023-12-31T23:00:37Z
381,94,17,0.439,320,318,56232,2007,0.4425,315,28630,1048,0.445,315.25,978,0.4455,314,1228,54,23.20601852,49.09090909,4.242424242,0.44,0.67,0.587006961,23,2023-12-31T23:00:38Z
382,104,126,0.44975,321,314,49448,2030,0.449,313,24467,1090,0.44825,317,1020,0.454,316.5,1228,45.73333333,32.57661748,49.16201117,3.183962264,0.4,0.62,0.735099338,20,2023-12-31T23:00:38Z
383,108,28,0.448,321,315,43709,1596,0.449,317.5,24499,985,0.4465,315.25,1069,0.4515,314,1382,55.5,32.25985564,59.45945946,3.081232493,0.37,0.57,0.730337079,20,2023-12-31T23:00:38Z
384,109,56,0.4525,320,315,54528,1685,0.45075,312.75,24531,970,0.44975,317.25,970,0.4555,317.5,1712,49.66666667,32.4668435,59.68586387,2.798708288,0.4,0.58,0.870748299,23,2023-12-31T23:00:38Z
385,106,42,0.426,318,299,45863,1704,0.42225,300.5,20770,920,0.4235,306.5,875,0.424,293.5,1148,37.16666667,25.56390977,52.60115607,2.643948296,0.34,0.69,0.722477064,21,2023-12-31T23:00:38Z
386,107,74,0.424,318,304,46458,1577,0.424,315.25,20770,920,0.42425,302.75,898,0.4195,295.5,1186,54,31.49107657,55.24861878,2.766333137,0.25,0.46,0.752808989,22,2023-12-31T23:00:38Z
387,104,30,0.432,319,307,46876,1267,0.42975,313.5,22778,707,0.43325,314,749,0.4385,319,1292,51.16666667,38.32650673,80,2.944640754,0.41,0.67,0.639344262,21,2023-12-31T23:00:38Z
388,106,84,0.439,319,310,50589,1379,0.439,318.5,24097,777,0.44325,312.5,751,0.44,304,1281,47.16666667,40.63384267,70.65217391,3.114186851,0.33,0.74,0.619489559,22,2023-12-31T23:00:38Z
389,106,26,0.4175,316,296,44610,1368,0.41775,294.75,19789,658,0.4155,297.25,768,0.4185,303.5,987,38.66666667,38.6869871,59.53757225,2.386634845,0.27,0.58,0.714285714,23,2023-12-31T23:00:38Z
390,108,120,0.44675,317,300,45751,1440,0.44775,313.5,23342,817,0.44525,314.25,726,0.4495,302.5,864,34.66666667,29.50437318,52.87356322,2.55648038,0.41,0.61,0.693181818,21,2023-12-31T23:00:38Z
391,82,25,0.441,317,312,53531,1522,0.439,308.5,29402,980,0.439,312.25,788,0.441,285.5,1309,52,15.17010597,40.76086957,2.696629213,0.32,0.9,0.648401826,22,2023-12-31T23:00:39Z
392,82,75,0.4425,319,302,55669,1804,0.44075,304.5,25030,732,0.443,307,807,0.4505,311.5,1054,53.66666667,23.02962549,49.19786096,3.163841808,0.36,0.61,0.58276644,23,2023-12-31T23:00:39Z
393,104,23,0.433,321,305,48307,1503,0.43275,310,20271,702,0.43275,311.25,856,0.434,298.5,994,36.15,41.14942529,69.94219653,2.997737557,0.41,0.83,0.826388889,25,2023-12-31T23:00:39Z
394,105,26,0.4455,321,320,54785,1992,0.447,328.75,25576,1022,0.4505,323,915,0.4565,314,987,40,25.56723852,58.60215054,2.857142857,0.27,0.58,0.890868597,23,2023-12-31T23:00:39Z
395,110,68,0.433,321,304,46634,1549,0.43725,309.25,21412,793,0.43575,310.75,849,0.444,310,1337,43,30.67520373,58.68263473,3.048780488,0.28,0.82,0.896162528,23,2023-12-31T23:00:39Z
396,96,77,0.436,320,311,52534,1895,0.43325,310.5,25592,1068,0.437,310,952,0.4295,297.5,1148,55.83333333,24.78729438,54.44444444,2.732240437,0.27,0.831,0.733021077,20,2023-12-31T23:00:39Z
397,98,27,0.44225,321,309,54464,1852,0.44375,304.75,24113,964,0.442,308.75,810,0.443,300.5,910,41.5,29.23752057,53.19148936,2.694786175,0.31,0.78,0.781659389,21,2023-12-31T23:00:39Z
398,102,84,0.41925,317,298,45670,1568,0.42375,298,19307,794,0.42175,301.25,856,0.428,303,1152,43.83333333,23.28847279,54.54545455,2.756141402,0.27,0.66,0.730593607,19,2023-12-31T23:00:39Z
399,108,10,0.4495,317,321,57743,1652,0.45175,322.5,25946,905,0.45025,325.75,746,0.461,321,952,37.33333333,32.62527233,69.83240223,3.510696654,0.18,0.72,0.534934498,20,2023-12-31T23:00:39Z
400,106,41,0.443,318,305,52390,1748,0.441,307.75,26106,934,0.43475,302,805,0.4365,307.5,1278,42.83333333,26.21195039,44.57142857,3.773584906,0.33,0.54,0.575555556,22,2023-12-31T23:00:39Z
401,108,80,0.4255,319,309,48146,1516,0.42525,303.25,23254,786,0.4245,305.25,768,0.428,320.5,1477,46.83333333,29.67853042,69.23076923,2.670623145,0.15,0.68,0.639269406,20,2023-12-31T23:00:40Z
402,107,45,0.439,321,317,53113,1512,0.44175,319.75,26637,922,0.4395,316.75,938,0.4385,310,1110,48.33333333,30.40540541,52.84090909,3.692674211,0.29,0.56,0.717647059,22,2023-12-31T23:00:40Z
403,108,82,0.44825,319,310,55653,1561,0.448,310.25,26348,780,0.44925,315.75,870,0.4545,313.5,679,36.83333333,30.22346369,52.17391304,2.558139535,0.22,0.66,0.612200436,22,2023-12-31T23:00:40Z
404,92,7,0.452,321,322,51762,1805,0.4455,311.25,26926,987,0.45275,328,1015,0.4565,315,984,43.78333333,27.03723691,47.2826087,3.517877739,0.23,0.52,0.70754717,24,2023-12-31T23:00:40Z
405,105,128,0.43225,320,319,57020,1841,0.427,303,23952,810,0.435,311.25,1020,0.435,310,662,49.81666667,35.85014409,48.40425532,2.707692308,0.23,0.74,0.781818182,21,2023-12-31T23:00:40Z
406,105,121,0.4415,318,310,45124,1564,0.44425,307.5,23245,875,0.44375,310,723,0.444,302,1172,38.16666667,33.07943417,59.375,3.372093023,0.28,0.67,0.793023256,23,2023-12-31T23:00:40Z
407,108,22,0.44275,320,317,52020,1662,0.4425,323.25,23149,746,0.44825,324.75,896,0.4545,317,1134,40.51666667,27.82415136,53.15789474,3.167185877,0.27,0.77,0.856179775,24,2023-12-31T23:00:40Z
408,100,97,0.44725,321,311,44786,1253,0.4485,313.25,24177,733,0.4475,319.75,836,0.4505,330,1340,49.43333333,41.15720524,74,2.671755725,0.35,0.55,0.707762557,23,2023-12-31T23:00:40Z
409,102,20,0.4215,315,300,45928,1592,0.421,297.25,21702,772,0.41825,290.25,738,0.426,294,1046,39.5,33.7334934,67.87878788,3.023516237,0.39,0.6,0.788235294,23,2023-12-31T23:00:40Z
410,101,36,0.444,315,327,65346,1866,0.4415,321.75,29273,875,0.43925,323.25,738,0.4445,336,1477,33.33333333,24.87016734,65.6626506,3.513996426,0.21,0.78,0.47716895,22,2023-12-31T23:00:40Z
411,98,52,0.45075,320,325,54608,1720,0.45125,324.5,24788,808,0.4505,322,898,0.4575,333.5,1505,42.16666667,44.58705357,59.01639344,3.193960511,0.17,0.48,0.545454545,20,2023-12-31T23:00:41Z
412,75,75,0.44425,317,320,65266,1801,0.447,317.25,23744,704,0.44475,326.25,931,0.4505,331.5,1712,57.5,24.09972299,39.3258427,2.941176471,0.35,1.03,0.554524362,21,2023-12-31T23:00:41Z
413,98,15,0.423,318,302,42326,1208,0.42325,301.5,21196,707,0.42475,309.25,914,0.4325,311,1099,59.3,28.24925816,42.94478528,2.766798419,0.38,0.97,0.746445498,23,2023-12-31T23:00:41Z
414,108,102,0.44975,320,317,56264,1956,0.44075,302.5,26332,861,0.441,307,892,0.449,306,946,30.63333333,25.37900056,42.54143646,3.828002098,0.51,0.68,0.581818182,26,2023-12-31T23:00:41Z
415,100,30,0.44325,322,319,50814,1699,0.448,330,27730,1029,0.4435,315.5,726,0.447,319,665,57.76666667,14.3812709,42.85714286,4.052573932,0.49,0.84,0.610047847,25,2023-12-31T23:00:41Z
416,108,108,0.435,319,305,47920,1549,0.439,323.5,24017,800,0.43725,315.25,688,0.434,317,812,56.88333333,30.42492918,51.91256831,3.563084112,0.4,0.82,0.69751693,20,2023-12-31T23:00:41Z
417,107,31,0.448,319,308,47165,1543,0.4445,319.75,25496,996,0.4445,314.5,826,0.4465,318,1158,34.95,42.13451918,65.2173913,3.653250774,0.33,0.75,0.612612613,20,2023-12-31T23:00:41Z
418,105,42,0.44975,320,308,51056,1488,0.45075,319.5,24434,821,0.44775,312.25,894,0.4485,306.5,1141,49.35,31.40360459,53.92670157,2.852441031,0.31,0.89,0.689342404,21,2023-12-31T23:00:41Z
419,109,69,0.4405,317,300,48724,1430,0.44175,307,23132,700,0.44075,296.25,831,0.449,288,2232,53.9,28.66894198,56.36363636,2.324195471,0.39,0.68,0.671171171,24,2023-12-31T23:00:41Z
420,98,81,0.43625,317,315,45574,1533,0.4335,308.25,21895,830,0.43225,318.25,665,0.4345,334.5,1218,57.16666667,38.66362079,61.2565445,2.630106323,0.62,0.7,0.57918552,21,2023-12-31T23:00:41Z
421,98,56,0.42425,316,300,48773,1694,0.4215,305,24612,1015,0.425,309,877,0.4295,315,1533,76.5,22.51184834,42.85714286,2.992220227,0.23,0.65,0.644705882,22,2023-12-31T23:00:42Z
422,94,97,0.4275,316,331,48242,1470,0.4315,302.25,23358,971,0.4295,304,901,0.4385,303.5,1498,59.66666667,19.58121109,40.90909091,3.483870968,0.27,0.8,0.504524887,25,2023-12-31T23:00:42Z
423,100,18,0.434,319,309,47503,1507,0.43325,306.5,22618,718,0.43225,312.75,666,0.4365,324,1211,59.33333333,25.74031891,54.18994413,2.983293556,0.43,0.64,0.630841121,25,2023-12-31T23:00:42Z
424,96,62,0.442,318,316,60508,1682,0.44175,309.5,25882,737,0.44075,313.5,920,0.444,302.5,1040,56.33333333,22.52873563,51.76470588,2.53164557,0.35,0.76,0.637583893,20,2023-12-31T23:00:42Z
425,92,23,0.444,317,322,54062,1535,0.43775,318,25464,884,0.438,308.25,803,0.444,247.5,1281,73.33333333,26.11111111,44.86486486,3.624078624,0.41,0.79,0.589073634,22,2023-12-31T23:00:42Z
426,102,65,0.4235,319,309,45059,1619,0.4265,300,25013,1001,0.42225,305,858,0.419,313.5,1362,62.5,31.45400593,52.69461078,3.276622558,0.39,0.8,0.694638695,23,2023-12-31T23:00:42Z
427,87,122,0.438,320,317,52164,1802,0.43075,299.25,24210,920,0.43575,309.25,886,0.4425,315,1256,62.16666667,31.99534613,39.20454545,2.678062678,0.38,0.6,0.746575342,23,2023-12-31T23:00:42Z
428,95,44,0.418,317,299,47937,1794,0.41925,304.25,23277,921,0.4145,299.75,758,0.418,304,1001,59.33333333,28.55450237,37.28813559,2.5,0.18,0.78,0.767058824,20,2023-12-31T23:00:42Z
429,88,103,0.445,319,314,51457,1526,0.4425,300,20014,893,0.445,307.25,738,0.449,305,1228,63.66666667,28.07881773,52.15053763,3.324099723,0.28,0.66,0.729216152,20,2023-12-31T23:00:42Z
430,94,33,0.44025,321,312,53017,1575,0.44225,311.25,24596,887,0.44675,316.75,956,0.4395,298,1234,55.95,32.44853738,48.64864865,2.920560748,0.5,0.74,0.768518519,22,2023-12-31T23:00:42Z
431,107,91,0.44625,321,323,59351,1941,0.44375,323.5,26540,789,0.44575,314,912,0.453,322,1379,48.03333333,29.55421024,47.82608696,3.718535469,0.38,0.84,0.801843318,23,2023-12-31T23:00:43Z
432,108,23,0.436,319,306,44749,1351,0.43675,310,24338,789,0.43675,306,751,0.447,309.5,1225,53.08333333,24.30011198,51.12359551,3.436018957,0.49,0.84,0.567307692,22,2023-12-31T23:00:43Z
433,109,74,0.45075,321,322,59578,1818,0.44675,316.5,27409,934,0.45475,321.75,1116,0.459,334,1624,47.4,27.97586396,54.05405405,3.27689787,0.39,0.71,0.818807339,21,2023-12-31T23:00:43Z
434,104,64,0.4415,318,320,61167,1992,0.44175,325.25,26540,1034,0.44075,320.75,1080,0.444,321.5,1176,52.5,29.57264957,50.83798883,2.712060012,0.35,0.74,0.665943601,19,2023-12-31T23:00:43Z
435,102,100,0.43925,317,298,53016,1780,0.438,308,24000,1004,0.43925,302.25,948,0.449,305,1242,51.83333333,28.26815642,62.06896552,3.303684879,0.31,0.8,0.544217687,22,2023-12-31T23:00:43Z
436,98,28,0.42675,317,301,52551,1636,0.4275,294.5,21187,641,0.428,313,987,0.436,303,1410,79.5,27.7499709,45,5.460662526,0.3,0.85,0.676814988,24,2023-12-31T23:00:43Z
437,95,65,0.4505,318,323,57839,1990,0.45125,328,27521,1172,0.44775,318.5,1017,0.4545,331,1512,50,25.9529148,49.13294798,0.982800983,0.19,0.52,0.603982301,21,2023-12-31T23:00:43Z
438,105,36,0.4405,314,312,57325,1545,0.444,301.5,23583,718,0.443,314.75,880,0.451,311,1250,39.83333333,32.30593607,60.60606061,3.210175651,0.35,0.57,0.788990826,20,2023-12-31T23:00:43Z
439,104,87,0.44025,318,302,46554,1530,0.4435,303.75,23984,896,0.44,301.5,872,0.4495,1862.5,1060,49.5,34.8581355,57.77777778,3.042959427,0.35,0.8,0.69751693,24,2023-12-31T23:00:43Z
440,75,56,0.45475,322,328,59752,1834,0.45775,316.5,24820,810,0.458,328.5,898,0.4585,319,766,44.05,23.70804475,38.02083333,4.255319149,0.35,0.72,0.630289532,23,2023-12-31T23:00:43Z
441,98,111,0.44725,320,313,52148,1550,0.442,298,21991,686,0.44675,314.25,938,0.4525,307.5,788,57.2,31.35639758,50,2.858809802,0.34,0.66,0.749435666,23,2023-12-31T23:00:44Z
442,75,12,0.431,317,313,52936,1743,0.428,306.75,24033,929,0.43375,309.25,864,0.4285,303.5,830,68.83333333,36.44595359,53.64583333,2.422680412,0.35,0.65,0.670644391,20,2023-12-31T23:00:44Z
443,108,112,0.4375,317,304,43034,1272,0.4345,307.75,22409,791,0.43725,311.75,716,0.4385,309.5,1068,52.83333333,29.79942693,61.5819209,2.915951973,0.4,0.71,0.813364055,20,2023-12-31T23:00:44Z
444,80,14,0.42575,318,305,46586,1675,0.423,307.5,20962,714,0.4265,300,794,0.425,310,1197,70.26666667,22.58630778,38.37837838,3.057553957,0.39,0.72,0.649411765,21,2023-12-31T23:00:44Z
445,96,9,0.43825,321,320,52792,1839,0.43975,321.5,24386,875,0.44025,322.75,929,0.437,324,1533,59.33333333,26.36054422,50.80213904,2.362204724,0.28,0.59,0.791762014,20,2023-12-31T23:00:44Z
446,101,33,0.4235,317,304,47905,1650,0.42325,302.25,22940,749,0.425,309,934,0.4305,314.5,2009,73.16666667,26.07398568,35.91160221,2.386495925,0.22,0.62,0.687943262,20,2023-12-31T23:00:44Z
447,106,34,0.449,317,323,52262,1741,0.44525,312.5,25930,886,0.4515,314.75,774,0.456,319.5,1320,53.53333333,25.91380251,43.33333333,4.756575266,0.35,0.91,0.635321101,23,2023-12-31T23:00:44Z
448,106,84,0.442,317,310,51313,1542,0.436,308,24489,1024,0.44275,315.5,1068,0.4525,303.5,1631,55.65,25.72074618,44.18604651,4.606060606,0.38,0.78,0.686936937,22,2023-12-31T23:00:44Z
449,106,26,0.44225,318,317,56087,1486,0.4435,320.5,24804,826,0.44425,317,1022,0.454,324,1466,57.28333333,33.55592654,42.32804233,3.181336161,0.34,0.58,0.695749441,23,2023-12-31T23:00:44Z
450,109,120,0.44425,320,310,52204,1671,0.44175,310.25,24000,868,0.4435,315,1006,0.4355,307.5,1418,50.98333333,35.64189189,56.66666667,2.576489533,0.36,0.69,0.876355748,22,2023-12-31T23:00:44Z
451,102,9,0.437,318,310,49400,1654,0.44375,316.75,25464,947,0.43875,316.5,992,0.4385,311,1365,63.16666667,40.96989967,58.15217391,2.312138728,0.42,0.81,0.707093822,22,2023-12-31T23:00:45Z
452,104,14,0.43525,318,317,46554,1608,0.4315,313.25,24917,929,0.438,315.25,819,0.438,315,784,51.33333333,23.98843931,41.37931034,3.658536585,0.42,0.45,0.69212963,24,2023-12-31T23:00:45Z
453,102,65,0.44025,318,306,47310,1750,0.44575,312.5,27103,1116,0.4455,314,1057,0.458,316.5,1530,57.66666667,26.23922414,53.2967033,3.391684902,0.36,0.71,0.599045346,26,2023-12-31T23:00:45Z
454,106,34,0.443,323,298,53596,1754,0.44525,311,23566,962,0.4405,301.25,868,0.4465,298,1274,57.83333333,32.65421619,65.51724138,3.143960287,0.31,0.65,0.713302752,24,2023-12-31T23:00:45Z
455,108,73,0.453,320,322,57426,2135,0.45125,312.5,26417,1024,0.457,321,1026,0.457,318,1684,59.66666667,31.36830719,69.94219653,2.81447444,0.32,0.63,0.767653759,23,2023-12-31T23:00:45Z
456,92,46,0.4435,316,318,53933,1830,0.44325,309.5,31250,1183,0.443,321,1136,0.4415,304,2264,62.16666667,20.34559643,44,3.00245098,0.37,0.68,0.514606742,22,2023-12-31T23:00:45Z
457,108,77,0.446,316,317,49030,1930,0.446,316.75,27553,1085,0.452,321.25,970,0.4485,310,990,56.83333333,31.59609121,53.80434783,4.355400697,0.43,0.65,0.653579677,22,2023-12-31T23:00:45Z
458,92,51,0.432,318,310,49448,1932,0.4345,314,24933,1036,0.4385,318.25,985,0.436,296,1050,61,21.51968941,41.84782609,3.473389356,0.23,0.6,0.55971897,24,2023-12-31T23:00:45Z
459,102,86,0.4455,318,309,48998,1680,0.44825,320.5,27344,1148,0.4465,311,803,0.4475,312,1407,52,25.68704431,55.15151515,2.826217679,0.32,0.5,0.725446429,24,2023-12-31T23:00:45Z
460,109,46,0.451,326,322,54769,1853,0.45175,301,24965,816,0.452,325.5,934,0.4595,304,1124,35.83333333,32.85714286,63.44086022,3.728813559,0.39,0.9,0.831509847,25,2023-12-31T23:00:45Z
461,106,141,0.4425,319,315,54059,1852,0.44025,313.5,25978,1017,0.4435,310.75,1057,0.443,299.5,1064,62,25.20413718,44.38502674,3.770491803,0.4,0.8,0.568445476,23,2023-12-31T23:00:46Z
462,102,32,0.42925,318,306,47889,1675,0.435,312.5,21911,968,0.43175,303.5,898,0.4345,309.5,1204,65.16666667,27.81232335,46.875,2.777777778,0.39,0.85,0.727688787,23,2023-12-31T23:00:46Z
463,104,122,0.444,318,311,55235,1754,0.44775,311.5,25014,878,0.43875,312,826,0.442,300,1064,62.5,24.94382022,43.09392265,NULL,0.43,0.8,0.86199095,22,2023-12-31T23:00:46Z
464,104,34,0.4525,318,318,51699,1698,0.45275,310.25,24015,931,0.452,314.25,873,0.455,308,1344,52.83333333,38.5331144,58.33333333,2.465753425,0.33,0.86,0.689189189,20,2023-12-31T23:00:46Z
465,103,146,0.432,318,303,42809,1465,0.4275,307,23116,906,0.4305,306.75,766,0.43,303.5,1477,58.16666667,33.73842593,57.05882353,2.786377709,0.45,1.21,0.721153846,20,2023-12-31T23:00:46Z
466,109,97,0.437,320,299,45526,1544,0.43875,301.25,20882,796,0.43775,306.25,872,0.44,302,1278,49.66666667,33.88666285,62.65060241,3.055721989,0.3,0.77,0.698412698,20,2023-12-31T23:00:46Z
467,103,53,0.43375,320,322,55396,1995,0.43825,328.25,23004,926,0.43175,318.25,982,0.444,305,1144,62.5,21.56976744,48.14814815,3.039158387,0.28,0.76,0.632054176,19,2023-12-31T23:00:46Z
468,98,81,0.43225,319,312,46298,1902,0.42625,304.75,20930,948,0.429,314.5,900,0.4325,306.5,1533,67,24.11594203,51.38121547,2.812687014,0.37,0.7,0.748251748,22,2023-12-31T23:00:46Z
469,83,29,0.4355,315,306,50477,1908,0.43475,304,21638,936,0.432,310.5,1027,0.436,297,1365,68.66666667,30.00580383,60.12269939,2.166476625,0.39,0.64,0.666666667,22,2023-12-31T23:00:46Z
470,106,92,0.44525,321,305,46988,1589,0.4445,307.5,21059,989,0.44125,316,970,0.438,309.5,1256,51.66666667,40.91671325,65.36312849,3.065355697,0.4,0.81,0.840182648,22,2023-12-31T23:00:46Z
471,101,67,0.42975,316,291,41169,1295,0.433,299.25,23534,931,0.43425,288.5,770,0.4345,290.5,1172,50.66666667,30.49199085,62.2754491,2.120141343,0.43,0.63,0.538641686,23,2023-12-31T23:00:47Z
472,105,46,0.433,320,302,47251,1577,0.432,298.75,22329,1029,0.4345,307.5,906,0.443,312.5,1337,69.33333333,29.06032483,50.56179775,2.796352584,0.29,0.66,0.494252874,22,2023-12-31T23:00:47Z
473,99,73,0.44,320,320,50557,1844,0.436,314,24724,1097,0.4425,321,1036,0.441,302.5,1148,60.16666667,24.8600224,45.21276596,2.736842105,0.2,0.69,0.534988713,22,2023-12-31T23:00:47Z
474,88,25,0.438,319,307,48130,1787,0.43725,313.75,28196,1172,0.437,312,919,0.436,311,1456,59,23.3995585,43.42857143,3.327495622,0.44,0.79,0.535307517,25,2023-12-31T23:00:47Z
475,102,119,0.42625,319,309,47953,1857,0.42625,300.5,21878,1026,0.425,307,824,0.425,292,1148,47.66666667,36.34782609,51.36612022,3.176341731,0.3,0.48,0.724465558,22,2023-12-31T23:00:47Z
476,94,24,0.445,318,316,53515,1692,0.45225,314.75,29434,1143,0.45325,319.25,957,0.452,313.5,1393,60,29.88950276,56.04395604,3.468208092,0.32,0.82,0.605568445,22,2023-12-31T23:00:47Z
477,102,20,0.446,323,328,56972,1832,0.437,314.5,24032,858,0.444,327.75,770,0.4425,324.5,774,28.56666667,45.84050488,63.00578035,2.181208054,0.48,0.68,0.70917226,21,2023-12-31T23:00:47Z
478,108,72,0.4555,320,318,56328,1886,0.45525,315,21686,772,0.4565,318.25,880,0.461,323.5,1239,30.23333333,45.51835853,61.46341463,3.100775194,0.43,0.76,0.734782609,23,2023-12-31T23:00:47Z
479,106,20,0.449,320,312,46683,1776,0.4415,313.25,19194,866,0.45,314,733,0.4445,311,1071,45.16666667,39.24914676,66.12903226,2.973568282,0.4,0.87,0.567928731,20,2023-12-31T23:00:47Z
480,109,71,0.45925,320,317,42714,1472,0.4575,318.5,21627,875,0.45075,314,679,0.4575,310,1043,26.33333333,28.14042787,54.85714286,2.88184438,0.33,0.65,0.769230769,21,2023-12-31T23:00:47Z
481,105,87,0.43375,319,312,45176,1585,0.43525,306.5,21975,882,0.43275,296.75,588,0.4405,306.5,1120,34.65,31.16438356,50.82872928,2.227171492,0.42,0.68,0.813953488,21,2023-12-31T23:00:48Z
482,104,25,0.45275,320,309,53354,1696,0.458,310,25110,915,0.451,303,922,0.455,313,1288,34.5,23.59234234,49.13294798,2.824551874,0.32,0.69,0.622362869,20,2023-12-31T23:00:48Z
483,96,31,0.45,320,321,62887,2053,0.45175,335,27650,1099,0.44925,311,1054,0.4545,309.5,1225,76.16666667,25.16129032,47.80487805,3.111814346,0.34,1.12,0.786995516,21,2023-12-31T23:00:48Z
484,100,87,0.441,321,302,48724,1596,0.4485,299.25,25190,1004,0.43825,295.25,737,0.4415,283,1046,57.66666667,24.68856172,66.45962733,3.636363636,0.25,0.63,0.585972851,23,2023-12-31T23:00:48Z
485,103,24,0.42275,317,303,41780,1466,0.4295,306.25,22809,1069,0.425,303.25,882,0.424,296.5,980,62.66666667,41.41904184,64.1509434,2.421924793,0.39,0.87,0.910138249,21,2023-12-31T23:00:48Z
486,85,93,0.43025,322,306,43789,1549,0.42425,296.5,21316,1031,0.4235,307.5,803,0.4315,304.5,872,57,42.3880597,58.75706215,2.142857143,0.26,0.64,0.792626728,23,2023-12-31T23:00:48Z
487,98,118,0.43075,318,320,52550,1362,0.42875,313,23888,864,0.4305,311.75,807,0.4355,313.5,1550,52.48333333,28.86480319,43.25842697,3.126843658,0.35,0.87,0.618705036,20,2023-12-31T23:00:48Z
488,88,35,0.43525,321,316,47872,1642,0.44,317.25,20384,782,0.43675,325.25,750,0.4395,327.5,1281,67.31666667,20.85924251,38.62433862,3.139269406,0.29,0.7,0.607888631,20,2023-12-31T23:00:48Z
489,106,78,0.4385,320,314,47889,1642,0.45,315.5,23936,878,0.43975,313,933,0.4485,303,914,61.45,32.95774648,51.39664804,3.163841808,0.39,0.78,0.709302326,23,2023-12-31T23:00:48Z
490,100,83,0.425,320,316,48808,1617,0.426,317.25,22361,828,0.42725,312.5,947,0.424,301.5,906,63.56666667,26.27070246,44.08602151,2.160318363,0.38,0.49,0.630170316,20,2023-12-31T23:00:48Z
491,100,122,0.43775,318,311,45510,1444,0.44625,318.5,21846,770,0.44425,316.25,900,0.443,319,1270,53.71666667,25.93210907,50.25906736,2.211874272,0.26,0.73,0.719178082,21,2023-12-31T23:00:49Z
492,98,4,0.424,318,305,47598,1342,0.42825,292.75,20946,707,0.431,308.25,868,0.4325,292,1438,54.36666667,24.23188406,54.9132948,2.522421525,0.49,0.77,0.751184834,24,2023-12-31T23:00:49Z
493,98,35,0.4315,320,320,51248,1820,0.432,316.5,22602,802,0.434,316.25,1015,0.4415,317,1894,49.46666667,32.11678832,56.4516129,2.282377919,0.4,0.73,0.793764988,23,2023-12-31T23:00:49Z
494,102,18,0.4425,320,316,49207,1620,0.43975,313,22088,849,0.4415,320.5,994,0.4405,314,1256,62.83333333,28.60335196,52.22222222,2.370689655,0.32,0.64,0.588235294,20,2023-12-31T23:00:49Z
495,83,29,0.44475,318,323,55058,1636,0.44375,310.5,27634,770,0.4405,313.75,814,0.447,313,794,67.16666667,14.3575419,36.81318681,3.941176471,0.44,0.72,0.67816092,25,2023-12-31T23:00:49Z
496,97,38,0.443,316,310,50007,1820,0.4355,306.75,25808,1078,0.43925,314.5,942,0.4285,296.5,1124,64.4,30.09491904,49.44444444,3.463203463,0.43,0.82,0.464285714,23,2023-12-31T23:00:49Z
497,105,79,0.4325,319,321,56216,1839,0.433,310.25,23454,756,0.43175,317,875,0.4365,319.5,878,63.45,25.26193248,37.83783784,1.53937241,0.45,0.83,0.626450116,23,2023-12-31T23:00:49Z
498,105,43,0.44625,318,321,52920,1897,0.4445,316,26396,1150,0.44625,316.5,1057,0.45,325.5,928,57.5,21.47138965,53,3.867403315,0.54,0.78,0.630841121,23,2023-12-31T23:00:49Z
499,100,25,0.45675,318,312,49834,1766,0.45125,306.5,23599,915,0.4535,303.75,961,0.4565,315.5,1414,59.66666667,33.08470964,53.40314136,3.52303523,0.48,0.84,0.69837587,22,2023-12-31T23:00:49Z
500,90,98,0.4455,321,315,49593,1614,0.4395,315.75,19914,914,0.44725,319.75,882,0.446,1808,1292,60.83333333,35.69372481,60.11560694,2.266124346,0.48,0.5,0.493421053,20,2023-12-31T23:00:49Z
501,94,34,0.44175,321,310,52245,1886,0.4395,319.25,26106,1052,0.4445,324.25,1088,0.444,317,1662,57.16666667,18.87755102,35.51912568,3.724928367,0.55,0.81,0.712328767,22,2023-12-31T23:00:50Z
502,94,52,0.4505,319,323,56039,1962,0.451,316.75,25158,1057,0.45125,323,884,0.4555,329,1726,61.16666667,20.54495913,39.57219251,4.043126685,0.45,0.68,0.590909091,22,2023-12-31T23:00:50Z
503,109,135,0.443,321,312,46699,1594,0.439,313.25,24644,784,0.44,319.25,700,0.4365,326,990,39.65,53.1587934,89.14285714,3.757225434,0.48,0.92,0.891891892,23,2023-12-31T23:00:50Z
504,92,24,0.4395,318,308,47438,1846,0.441,305,22345,931,0.446,317.75,957,0.4465,304.5,1036,61.16666667,20.88036117,45.40229885,3.273137698,0.19,1.04,0.598173516,20,2023-12-31T23:00:50Z
505,96,64,0.441,317,302,45027,1610,0.43875,306,19548,850,0.44325,311.5,928,0.4475,311.5,1214,66.83333333,23.3163554,48.5380117,3.052064632,0.25,0.83,0.675174014,20,2023-12-31T23:00:50Z
506,100,81,0.43025,323,302,46136,1626,0.4265,305.5,20866,854,0.425,306.75,873,0.4295,315.5,1330,63.66666667,33.50846468,44.38202247,3.106682298,0.43,0.68,0.719817768,19,2023-12-31T23:00:50Z
507,96,21,0.433,323,311,45092,1582,0.43225,310,19178,833,0.433,306.75,749,0.4395,307,966,49.33333333,27.3255814,49.70760234,2.614379085,0.36,0.65,0.903669725,18,2023-12-31T23:00:50Z
508,106,82,0.4345,318,318,50862,1934,0.4455,321.25,26187,1092,0.44,311.5,1078,0.442,296.5,1088,77.16666667,21.22425629,39.13043478,2.840909091,0.38,0.93,0.793721973,20,2023-12-31T23:00:50Z
509,105,8,0.4395,318,302,51200,1746,0.43925,306.75,23132,805,0.442,305,796,0.4445,301,1032,51.61666667,21.64477441,44,2.719546742,0.29,0.66,0.822988506,22,2023-12-31T23:00:50Z
510,105,8,0.43675,318,308,51602,1426,0.4365,302.75,21477,634,0.43725,296.5,830,0.4415,289,826,52.95,24.17519909,50.5952381,3.174603175,0.26,0.73,0.812641084,22,2023-12-31T23:00:50Z
511,105,8,0.4305,318,305,49071,1606,0.43325,303.75,22827,850,0.43,305.5,754,0.44,304,910,NULL,23.84189463,46.19565217,3.339296363,0.4,0.52,0.828235294,22,2023-12-31T23:00:51Z
512,105,38,0.435,320,312,47776,1463,0.433,304.75,23148,796,0.43475,309,1026,0.442,304,1026,54,22.84408909,47.70114943,3.038674033,0.29,0.66,0.655889145,20,2023-12-31T23:00:51Z
513,105,38,0.446,317,318,50605,1503,0.44975,321,22602,686,0.4485,318.75,945,0.449,302.5,900,49.35,23.74378796,52.04678363,3.045977011,0.33,0.63,0.619047619,20,2023-12-31T23:00:51Z
514,105,38,0.444,317,316,54158,1766,0.4505,321,25448,910,0.445,320.5,990,0.4515,321.5,980,60.85,27.25770925,53.26086957,2.891844997,0.25,0.55,0.71954023,20,2023-12-31T23:00:51Z
515,106,59,0.435,319,309,47390,1762,0.43475,308.25,21220,864,0.43325,304.25,817,0.435,298.5,1236,51.83333333,36.15886189,58.62068966,2.293862368,0.36,0.7,0.742081448,20,2023-12-31T23:00:51Z
516,104,96,0.42775,319,304,44561,1542,0.429,299,19081,835,0.42675,302.75,889,0.4285,305,1435,54.16666667,30.22170362,57.22222222,2.094240838,0.28,0.75,0.717647059,20,2023-12-31T23:00:51Z
517,101,38,0.4535,318,317,56167,1787,0.4495,318.5,23149,864,0.453,317.75,805,0.4555,317,1064,43.5,27.97586396,52.43243243,2.77324633,0.4,0.68,0.885964912,20,2023-12-31T23:00:51Z
518,98,116,0.432,317,303,42359,1463,0.435,315,25672,976,0.43575,308.5,794,0.4395,330.5,1390,67.5,29.86651835,53.43915344,2.714932127,0.37,0.86,0.599088838,22,2023-12-31T23:00:51Z
519,100,18,0.43675,320,305,42841,1416,0.43975,310.25,21846,970,0.43525,302,672,0.433,313,1096,50.83333333,39.58927553,56.80473373,2.798400914,0.31,0.72,0.931034483,22,2023-12-31T23:00:51Z
520,102,45,0.43425,322,318,52856,1771,0.43325,324,27923,1118,0.4345,316.5,942,0.4405,306.5,1256,53.33333333,34.77508651,53.33333333,3.556609366,0.31,0.58,0.594405594,23,2023-12-31T23:00:51Z
521,102,94,0.444,318,297,50107,1788,0.43825,314,27553,955,0.43925,302.5,856,0.448,300.5,1124,57.33333333,25.01411632,50.57471264,3.544450901,0.36,0.7,0.725663717,23,2023-12-31T23:00:52Z
522,103,71,0.43575,318,315,52277,1566,0.437,308.75,23984,760,0.43975,322,1017,0.446,300.5,1295,64.98333333,26.93181818,40.8839779,2.482929857,0.41,0.52,0.637413395,21,2023-12-31T23:00:52Z
523,103,119,0.4545,324,315,50589,1614,0.452,319.75,26814,917,0.456,324,964,0.4625,323.5,1396,55.03333333,35.21667581,51.32275132,2.795573675,0.39,0.6,0.689277899,21,2023-12-31T23:00:52Z
524,100,37,0.4435,324,311,50621,1864,0.4505,318.75,25946,1158,0.44775,309.5,961,0.45,309,1082,69.5,25.02780868,50,3.314917127,0.4,0.83,0.628959276,22,2023-12-31T23:00:52Z
525,96,36,0.425,318,299,47229,1558,0.4295,295.75,19644,833,0.4255,305.25,959,0.433,314,1631,56.2,28.78787879,37.5,2.787068004,0.35,0.74,0.793981481,22,2023-12-31T23:00:52Z
526,106,44,0.458,320,322,53242,1815,0.4525,323.75,27264,976,0.45675,322,992,0.4505,303.5,1043,41.76666667,31.93420306,58.72093023,3.428571429,0.35,1.89,0.796536797,24,2023-12-31T23:00:52Z
527,106,94,0.4475,321,313,51474,1706,0.44175,319.75,23261,858,0.44425,308.75,877,0.451,321.5,1446,48.31666667,36.87214612,64.73988439,3.244166192,0.42,0.77,0.608695652,23,2023-12-31T23:00:52Z
528,106,104,0.4435,322,316,46780,1638,0.44,305.25,21123,816,0.43475,314.75,886,0.4525,325,1648,57,40.51509577,66.48648649,2.906976744,0.4,0.5,0.7695962,20,2023-12-31T23:00:52Z
529,95,24,0.4275,316,302,46281,1603,0.43225,306.5,23310,873,0.42925,304.25,889,0.429,299.5,1085,60.83333333,23.6645606,60.97560976,3.272498427,0.26,0.48,0.584295612,23,2023-12-31T23:00:52Z
530,103,89,0.44175,318,312,45140,1886,0.43925,305,22329,976,0.43525,314,985,0.443,306.5,1376,55.83333333,34.93424814,56.47058824,3.227699531,0.28,0.69,0.702078522,24,2023-12-31T23:00:52Z
531,103,130,0.4265,322,297,40012,1318,0.43,294,20994,914,0.4335,306.5,833,0.4365,293.5,1428,51.51666667,32.53747918,54.14364641,3.468208092,0.33,0.68,0.644859813,23,2023-12-31T23:00:53Z
532,103,19,0.4225,317,300,45429,1561,0.43125,303.25,20624,934,0.42625,305,1004,0.432,296.5,1337,47.83333333,31.7571512,45.50898204,2.979274611,0.44,0.6,0.645833333,20,2023-12-31T23:00:53Z
533,103,30,0.44375,320,314,45879,1734,0.4395,312.75,20464,1012,0.44125,306.25,938,0.4485,324,1074,50.78333333,57.79816514,63.38797814,2.45398773,0.44,0.52,0.769574944,23,2023-12-31T23:00:53Z
534,101,97,0.437,321,314,44063,1713,0.43475,312,21590,928,0.43625,309,821,0.436,302,788,70,47.34463277,55,1.612903226,0.29,0.42,0.631336406,22,2023-12-31T23:00:53Z
535,106,66,0.433,320,307,44625,1255,0.43625,313.25,25029,849,0.4305,309.5,858,0.428,302,872,45.81666667,46.27277747,69.23076923,2.442827443,0.2,0.56,0.746411483,21,2023-12-31T23:00:53Z
536,106,81,0.42525,317,311,46538,1325,0.4195,310.25,24515,970,0.42725,307.75,740,0.4355,310,777,57.6,41.21863799,65.14285714,3.047404063,0.26,0.76,0.684085511,22,2023-12-31T23:00:53Z
537,103,37,0.443,313,312,48701,1628,0.44225,320,24692,850,0.444,315.25,822,0.4465,310,917,58.98333333,31.39140271,60.57142857,2.691867125,0.51,0.82,0.941834452,21,2023-12-31T23:00:53Z
538,80,22,0.43975,323,321,50959,1654,0.4335,316.25,24901,1045,0.43825,322.5,1092,0.434,309.5,1158,65.5,23.83654938,45.74468085,2.521008403,0.38,0.6,0.754022989,22,2023-12-31T23:00:53Z
539,90,66,0.42775,312,309,42954,1505,0.42075,306.5,22361,900,0.42925,313.25,882,0.424,314.5,1134,78,32.48993675,60.84656085,2.412868633,0.32,0.55,0.754761905,22,2023-12-31T23:00:53Z
540,96,34,0.42875,324,321,52872,1678,0.42825,317.75,20480,812,0.427,321.5,859,0.4265,309,1246,50.66666667,31.30733945,60.33519553,1.991150442,0.25,0.62,0.734741784,20,2023-12-31T23:00:53Z
541,103,96,0.4295,318,304,49994,1668,0.43425,305.25,22425,882,0.43225,308.5,985,0.434,304.5,1522,62.66666667,25.26564345,53.65853659,2.704257768,0.31,0.86,0.601769912,22,2023-12-31T23:00:54Z
542,105,108,0.42425,313,316,47583,1741,0.4235,313.75,22457,852,0.424,304.75,780,0.424,322.5,1656,47.66666667,40.28021016,61.57894737,3.418339664,0.33,0.57,0.839243499,25,2023-12-31T23:00:54Z
543,106,44,0.42775,316,311,49930,1715,0.426,315,23856,954,0.4295,302.5,936,0.4345,311.5,1295,62.5,28.81257276,40.8839779,2.838557067,0.17,0.57,0.569506726,22,2023-12-31T23:00:54Z
544,107,127,0.4455,312,316,53885,1892,0.4485,304.25,25930,931,0.44175,312.25,882,0.4545,301,976,52.66666667,32.39823982,53.51351351,3.201396973,0.31,0.42,0.747747748,22,2023-12-31T23:00:54Z
545,102,45,0.43125,313,311,48934,1349,0.43375,311,22409,793,0.43325,312,788,0.4375,308.5,1162,60.83333333,40.39238315,57.86516854,3.204047218,0.1,0.47,0.631205674,25,2023-12-31T23:00:54Z
546,103,80,0.433,319,307,46731,1536,0.438,305.75,21027,800,0.4345,307.75,780,0.44,312,1498,49.9,39.62795941,56.59340659,2.78223649,0.38,0.75,0.795823666,21,2023-12-31T23:00:54Z
547,109,98,0.45175,315,319,53017,1766,0.45225,323.75,25720,747,0.4535,313.25,922,0.459,314,1484,41.01666667,39.15431082,47.44897959,2.536640361,0.49,0.86,0.695259594,22,2023-12-31T23:00:54Z
548,109,138,0.4575,317,320,51216,1740,0.45325,323,24354,800,0.45575,328.75,798,0.4515,348,1533,38.98333333,47.14285714,70.32967033,1.873278237,0.42,0.84,0.641255605,21,2023-12-31T23:00:54Z
549,97,103,0.43075,312,318,61440,2070,0.43275,307,24482,954,0.4365,308.25,901,0.4355,305.5,1088,60.5,24.91620112,42.85714286,4.656577416,0.25,0.48,0.589164786,21,2023-12-31T23:00:54Z
550,85,32,0.4375,312,308,54094,1871,0.43925,303.25,21589,858,0.439,311,780,0.439,308,1362,58.83333333,18.20744081,30.21978022,3.719008264,0.14,0.42,0.651376147,20,2023-12-31T23:00:54Z
551,105,180,0.42775,313,301,45172,1484,0.4295,309.5,20368,936,0.4315,311.25,819,0.4325,305,1180,51.83333333,34.98273878,58.79120879,2.5769956,0.25,0.59,0.793981481,22,2023-12-31T23:00:55Z
552,105,215,0.4215,312,350,43918,1556,0.4235,302.75,19676,872,0.42275,302,537,0.4225,299,1180,56.5,31.1023622,66.06060606,2.496798976,0.37,0.55,0.867298578,21,2023-12-31T23:00:55Z
553,102,29,0.44625,313,298,47872,1456,0.587333333,411.6666667,24494,758,0.447,307.25,742,0.4625,308.5,1253,59,26.02631875,50.88757396,3.300733496,0.29,0.52,0.65,23,2023-12-31T23:00:55Z
554,106,130,0.434,314,313,47503,1549,0.43475,313.5,21477,718,0.43425,305.5,772,0.43,283.5,920,51.16666667,24.81375358,54.11764706,2.965864578,0.25,0.67,0.876168224,20,2023-12-31T23:00:55Z
555,108,30,0.456,317,322,57646,1771,0.452,315.25,24997,826,0.454,321.25,956,0.46,326,1446,40.48333333,38.6951631,61.79775281,2.228571429,0.31,0.48,0.830107527,20,2023-12-31T23:00:55Z
556,108,96,0.4325,316,311,52100,1764,0.432,310.5,21380,766,0.44025,319.75,1012,0.4385,310.5,1544,52.18333333,34.93699885,48.33333333,2.191464821,0.23,0.72,0.801843318,20,2023-12-31T23:00:55Z
557,106,78,0.44075,312,302,42696,1461,0.442,306.75,20480,968,0.4415,310.25,892,0.4405,319.5,1244,43.66666667,35.13209668,62.94117647,2.249134948,0.3,0.49,0.684684685,20,2023-12-31T23:00:55Z
558,109,34,0.42925,316,311,48338,1362,0.42975,316.75,20753,679,0.43075,316.5,936,0.428,308.5,1589,43.91666667,31.20365088,55.93220339,2.744425386,0.28,0.25,0.752403846,21,2023-12-31T23:00:55Z
559,109,82,0.441,318,304,49190,1540,0.44,316,21927,649,0.44275,305.75,730,0.456,333.5,1806,41.58333333,32.13665316,60.81871345,2.533172497,0.31,0.57,0.736238532,22,2023-12-31T23:00:55Z
560,105,35,0.42825,312,295,42873,1438,0.4345,312,22506,901,0.42675,307,838,0.432,309.5,1466,42.66666667,36.81225184,54.4973545,2.368265246,0.39,0.55,0.73364486,20,2023-12-31T23:00:55Z
561,70,56,0.435,312,294,47214,1676,0.43075,302,25303,1200,0.43375,293.75,877,0.437,357.5,1631,68.16666667,14.36814772,33.33333333,2.66357846,0.2,0.42,0.586363636,21,2023-12-31T23:00:56Z
562,104,138,0.43225,317,316,52052,1657,0.429,301.75,20239,793,0.43425,300.75,838,0.4385,317,1340,70,36.05248146,60,2.026666667,0.23,0.43,0.662707838,23,2023-12-31T23:00:56Z
563,104,101,0.43275,312,316,49239,1843,0.424,317,24226,896,0.42625,309.25,840,0.426,299,1204,52.16666667,34.31430253,45.34883721,2.880184332,0.25,0.8,0.671264368,25,2023-12-31T23:00:56Z
564,104,27,0.43,316,310,50428,1740,0.4345,313.5,24467,1036,0.436,310.75,926,0.439,308.5,1022,47.66666667,37.48571429,54.34782609,3.112391931,0.27,0.49,0.689814815,25,2023-12-31T23:00:56Z
565,106,137,0.441,318,316,44931,1586,0.43875,306.75,19853,830,0.443,319.75,861,0.438,307,1288,49.33333333,49.29017604,78.57142857,2.624531334,0.39,0.57,0.767123288,25,2023-12-31T23:00:56Z
566,90,86,0.45775,321,315,47728,1461,0.45675,323.25,23261,740,0.456,312.5,726,0.4535,310,1141,47.35,35.54959786,59.89304813,2.218614719,0.5,0.84,0.710467706,21,2023-12-31T23:00:56Z
567,105,129,0.4465,316,318,52534,1852,0.44325,309.25,20223,756,0.44175,314,845,0.443,312.5,1242,45.06666667,44.65909091,67.0212766,2.373417722,0.26,0.88,0.760964912,23,2023-12-31T23:00:56Z
568,107,73,0.4395,317,315,51522,1866,0.43125,308.25,18840,698,0.43625,316,870,0.439,335.5,1522,50.71666667,34.19838524,64.59627329,2.96969697,0.31,0.92,0.410377358,25,2023-12-31T23:00:56Z
569,106,47,0.4295,312,317,52068,1760,0.42775,320.75,27778,1031,0.425,310.25,924,0.4355,318.5,1158,46.33333333,32.21590909,56.75675676,3.105263158,0.38,0.62,0.772300469,27,2023-12-31T23:00:56Z
570,108,87,0.4405,314,311,48483,1533,0.4405,309.25,27200,1074,0.44275,311,1003,0.4545,308,1666,50,39.96728462,67.55319149,2.959240648,0.37,0.54,0.770419426,25,2023-12-31T23:00:56Z
571,106,41,0.44725,312,308,53226,1787,0.4475,306.75,24467,1015,0.44875,313.5,810,0.4505,320.5,1382,56.5,34.55555556,51.79487179,2.891844997,0.38,0.66,0.507865169,23,2023-12-31T23:00:57Z
572,106,156,0.42175,312,288,42037,1345,0.42025,288.5,19226,728,0.4225,290.5,740,0.4285,299.5,1134,56.66666667,29.24807578,55.88235294,2.90237467,0.37,0.63,0.760095012,26,2023-12-31T23:00:57Z
573,98,128,0.41775,313,296,44320,1521,0.408,284,17168,728,0.4133,296.75,830,0.417,292,962,65.33333333,26.13095238,46.9273743,2.489866821,0.25,0.36,0.520383693,25,2023-12-31T23:00:57Z
574,108,48,0.43425,312,301,47856,1439,0.43475,304.25,22859,864,0.44075,313.25,933,0.445,299,752,52.66666667,33.35208099,57.06214689,3.287981859,0.19,0.43,0.713625866,32,2023-12-31T23:00:57Z
575,106,164,0.43175,312,299,46780,1564,0.43325,306.25,22248,971,0.43775,304.75,889,0.437,299,1158,62.83333333,29.84988453,60.47904192,2.43902439,0.22,0.86,0.738636364,25,2023-12-31T23:00:57Z
576,104,24,0.43,312,298,52599,1778,0.43175,306.25,23904,870,0.433,304,905,0.436,316,1414,63.56666667,30.89430894,54.94505495,2.593818985,0.21,1.05,0.872727273,27,2023-12-31T23:00:57Z
577,108,92,0.43375,312,308,53901,1759,0.42775,302.25,21075,774,0.43325,308,889,0.4365,297,1085,55.56666667,40.76834862,63.18681319,2.592165899,0.19,0.82,0.781990521,23,2023-12-31T23:00:57Z
578,108,17,0.45225,316,323,55267,1897,0.4505,312.75,24612,744,0.4565,317.25,868,0.4585,329.5,1442,40.1,28.96825397,50.84745763,3.171856978,0.4,0.77,0.645089286,21,2023-12-31T23:00:57Z
579,106,94,0.45325,322,311,47198,1521,0.45125,319.25,24547,987,0.45075,309,765,0.4555,308,1152,53.33333333,36.42384106,56.54450262,3.010033445,0.22,0.52,0.697986577,20,2023-12-31T23:00:57Z
580,93,18,0.4255,313,308,44963,1701,0.425,306.5,19532,804,0.426,307.5,1020,0.429,312,1330,62.16666667,32.73672055,56.98924731,2.382302893,0.23,0.4,0.662763466,25,2023-12-31T23:00:57Z
581,104,95,0.418,312,305,44658,1547,0.421,304.75,21509,868,0.42375,300.75,833,0.431,309.5,1970,68.83333333,31.74984967,54.23728814,3.141993958,0.36,0.48,0.689903846,25,2023-12-31T23:00:58Z
582,106,25,0.43925,312,317,54432,1811,0.445,322.25,28587,948,0.441,310,990,0.437,306,1298,67.16666667,25.78125,54.02298851,3.692115144,0.33,0.62,0.712962963,21,2023-12-31T23:00:58Z
583,104,47,0.4485,315,325,54142,1934,0.44875,326.25,27055,1169,0.45325,324,962,0.4555,312.5,1382,53.16666667,37.43315508,55.44554455,3.99573788,0.43,0.65,0.719817768,22,2023-12-31T23:00:58Z
584,108,42,0.4425,315,309,47149,1620,0.44825,328,26332,1104,0.44975,317,903,0.446,323,1253,40.66666667,39.34977578,72.52747253,3.376906318,0.23,0.4,0.77293578,23,2023-12-31T23:00:58Z
585,106,38,0.4525,316,316,55572,1746,0.44725,308.5,22104,872,0.45025,319.25,901,0.457,322,1060,48,28.66449511,53.80434783,3.553299492,0.24,0.25,0.70246085,24,2023-12-31T23:00:58Z
586,95,106,0.44225,319,308,48628,1624,0.4415,313.75,22168,936,0.4405,311.25,831,0.4425,302,1082,45.83333333,30.91537133,55.08982036,2.595051298,0.31,0.62,0.659142212,24,2023-12-31T23:00:58Z
587,109,83,0.44575,319,310,47117,1493,0.45575,323.75,22554,905,0.451,313.75,742,0.4485,321.5,1407,37.66666667,38.27092511,68.61702128,2.542841349,0.2,0.52,0.794642857,20,2023-12-31T23:00:58Z
588,108,40,0.4505,313,325,50590,1738,0.463,323.75,24612,990,0.4535,330.75,980,0.454,310.5,1110,42.16666667,32.67273701,60.77348066,2.448775612,0.4,0.96,0.652968037,21,2023-12-31T23:00:58Z
589,108,98,0.44,313,310,58965,1899,0.44425,307.5,20657,896,0.44075,315,900,0.4385,311,970,45.16666667,34.5890411,68.42105263,2.608695652,0.31,0.63,0.671232877,20,2023-12-31T23:00:58Z
590,108,37,0.43475,312,316,51972,1785,0.42375,313.75,22811,882,0.4255,311.25,998,0.4265,307,1036,47.66666667,25.35294118,10.75697211,3.107344633,0.21,0.68,0.751162791,23,2023-12-31T23:00:58Z
591,106,81,0.44325,312,308,48210,1564,0.43825,304.5,21541,856,0.447,306.25,863,0.45,309.5,1204,54.16666667,31.80515759,68.18181818,2.994011976,0.4,0.41,0.630044843,23,2023-12-31T23:00:59Z
592,98,113,0.435,316,306,51788,1421,0.435325,312,28196,959,0.431,316.5,766,0.445,329,1488,51.66666667,29.67479675,56.32183908,3.317535545,0.31,0.68,0.645833333,26,2023-12-31T23:00:59Z
593,109,90,0.44775,315,318,51554,1804,0.4435,313.25,19436,780,0.448,322.5,1169,0.444,322.5,1575,55,30.73420603,62.94117647,2.229299363,0.31,0.56,0.756818182,24,2023-12-31T23:00:59Z
594,106,128,0.43,315,324,48178,1642,0.437,314,21252,817,0.43475,325.75,896,0.4305,316.5,1026,56.33333333,47.47126437,71.72774869,2.561183836,0.29,0.82,0.757719715,20,2023-12-31T23:00:59Z
595,72,28,0.44175,315,314,49770,1577,0.43525,308,21573,788,0.43975,310.25,956,0.438,305.5,1054,69.16666667,23.52610893,42.85714286,1.905311778,0.41,0.58,0.657407407,20,2023-12-31T23:00:59Z
596,109,45,0.45375,317,317,54801,1746,0.456,311.5,22859,821,0.45875,318.75,894,0.466,311,1292,46.66666667,32.31347289,56.59340659,2.850877193,0.35,1.04,0.586363636,20,2023-12-31T23:00:59Z
597,108,140,0.443,316,310,48596,1521,0.438,306,17796,693,0.4454,309.5,905,0.4505,305,1246,36,37.9640045,66.10169492,2.652200121,0.27,0.89,0.774774775,20,2023-12-31T23:00:59Z
598,105,61,0.44275,312,320,51779,1687,0.44225,310,23213,849,0.43775,312.25,852,0.4425,310.5,1312,40,31.84892897,63.0952381,3.229527105,0.34,0.85,0.727472527,20,2023-12-31T23:00:59Z
599,106,43,0.44925,315,320,48226,1920,0.442,302.75,19821,850,0.4545,314.5,961,0.4535,314,1407,47.5,27.84448256,55.62130178,3.310430981,0.37,0.95,0.838074398,27,2023-12-31T23:00:59Z
600,108,107,0.43925,313,311,51297,1846,0.44475,318.75,25125,970,0.442,318,934,0.449,307,1568,58.33333333,26.55016911,56.21621622,3.496503497,0.26,0.82,0.836689038,23,2023-12-31T23:00:59Z
601,109,141,0.43358,319,320,49046,1906,0.43375,314.75,22104,970,0.43475,313.25,905,0.442,318,1494,52.83333333,29.68568102,57.64705882,2.972651605,0.29,0.46,0.743764172,22,2023-12-31T23:01:00Z
602,108,106,0.436,314,312,47294,1619,0.44075,313,23406,971,0.442,310,830,0.447,311.5,1180,41.48333333,39.32960894,62.16216216,3.06122449,0.29,0.57,0.581018519,22,2023-12-31T23:01:00Z
603,108,32,0.45,313,311,49834,1456,0.443,313,23470,896,0.4455,306.5,896,0.439,303,1046,42.33333333,22.41758242,45.65217391,2.25921522,0.27,0.58,0.507042254,22,2023-12-31T23:01:00Z
604,108,101,0.4375,313,307,43088,1497,0.433,306,19098,919,0.4385,304.5,761,0.4455,314.5,984,56.33333333,33.39050886,61.32596685,4.318181818,0.21,0.62,0.784269663,21,2023-12-31T23:01:00Z
605,102,31,0.463,317,323,58836,2034,0.45675,313.75,24885,1004,0.463,316.5,896,0.4715,317.5,1295,37.83333333,31.44618834,61.40350877,3.87409201,0.28,0.5,0.617521368,25,2023-12-31T23:01:00Z
606,108,58,0.455,316,315,43902,1586,0.4455,317.25,21011,912,0.4465,319.75,800,0.457,317,1281,47.16666667,33.29639889,59.01639344,3.165298945,0.42,0.76,0.768018018,22,2023-12-31T23:01:00Z
607,105,33,0.437,314,320,49721,1678,0.42875,305,19468,761,0.436,315.75,1001,0.4435,313.5,1533,47.66666667,32.58491652,57.06214689,2.826855124,0.23,0.72,0.724137931,25,2023-12-31T23:01:00Z
608,103,39,0.4345,313,295,44111,1720,0.433,304,20239,844,0.44,300.75,808,0.451,312.5,1785,61.66666667,38.69688385,71.83908046,2.915451895,0.24,0.69,0.771167048,23,2023-12-31T23:01:00Z
609,106,95,0.4515,316,318,54334,1918,0.44775,316.5,21428,877,0.4465,328,1087,0.4485,311,1656,50.16666667,38.71706758,74.70588235,2.241594022,0.29,0.84,0.736842105,20,2023-12-31T23:01:00Z
610,80,59,0.43825,312,310,44336,1418,0.43025,304.5,22136,794,0.42875,322.75,880,0.434,318.5,1435,50.16666667,38.54282536,57.51295337,1.938187533,0.21,0.43,0.741935484,21,2023-12-31T23:01:00Z
611,106,26,0.42875,316,296,43998,1582,0.4305,305,21541,802,0.43075,299.25,642,0.437,303,1176,45.33333333,31.60046729,49.0797546,3.823529412,0.32,0.45,0.692307692,22,2023-12-31T23:01:01Z
612,108,12,0.4445,315,312,47953,1549,0.4465,325,28309,978,0.45645,319.5,900,0.455,317.5,1508,56.16666667,40.43047941,56.98324022,3.105590062,0.31,0.63,0.606334842,21,2023-12-31T23:01:01Z
613,106,55,0.45125,313,323,48387,1923,0.45475,326.5,20376,966,0.45325,328.5,852,0.4635,330.5,1183,47.16666667,36.29873696,58.73015873,3.504928806,0.18,0.53,0.644396552,20,2023-12-31T23:01:01Z
614,98,96,0.4365,313,317,55621,2174,0.436,314.25,26878,1040,0.4375,325.5,1057,0.448,326.5,1642,64.83333333,20.83798883,52.43243243,3.479177649,0.24,0.63,0.604651163,20,2023-12-31T23:01:01Z
615,100,14,0.439,316,322,47891,1657,0.44,302.75,21622,1003,0.44,318.75,1064,0.442,320,1606,41.66666667,37.01007839,63.63636364,3.732162459,0.32,0.44,0.750572082,20,2023-12-31T23:01:01Z
616,102,32,0.43925,313,317,50782,1458,0.4485,311,22602,696,0.4375,315.5,1027,0.4445,310.5,1155,61,32.93378995,65.29411765,2.967898243,0.3,0.75,0.727688787,21,2023-12-31T23:01:01Z
617,106,95,0.43675,316,328,52631,1981,0.432,313.25,25399,1080,0.42975,316.75,901,0.4375,310,1600,56.33333333,29.64244521,56.90607735,4.337202199,0.37,0.68,0.585648148,20,2023-12-31T23:01:01Z
618,80,48,0.44725,320,334,54383,1783,0.44975,323,30093,998,0.4505,332.5,1134,0.445,330,2002,69.13333333,18.61495845,34.5,6.568516421,0.15,0.3,0.583333333,22,2023-12-31T23:01:01Z
619,104,63,0.44,314,321,48757,1550,0.4335,316,22634,1024,0.4385,323,924,0.4375,313,1516,57.5,33.10810811,57.83783784,2.618384401,0.29,0.72,0.881006865,20,2023-12-31T23:01:01Z
620,108,119,0.42875,313,317,48564,1880,0.423,305.75,21059,877,0.41875,303.25,894,0.432,299,1155,53.83333333,30.1183432,58.43373494,3.29807094,0.36,0.6,0.838337182,23,2023-12-31T23:01:01Z
621,106,26,0.44375,313,316,48001,1568,0.4405,310,23322,945,0.43975,307.25,950,0.444,306,1382,46.16666667,33.78995434,83.95061728,2.977232925,0.37,0.79,0.656750572,23,2023-12-31T23:01:02Z
622,120,33,0.40975,306,302,46956,1790,0.4125,304.75,25174,1076,0.41025,306.25,824,0.426,313,1200,61.83333333,25.627554,54.49438202,4.171779141,0.34,0.56,0.725925926,11,2023-12-31T23:01:02Z
623,90,57,0.43875,314,321,51924,1684,0.44525,315,18519,870,0.438,303.5,845,0.444,303,1558,56.16666667,39.41441441,54.45026178,2.259887006,0.21,0.56,0.662131519,20,2023-12-31T23:01:02Z
624,95,104,0.42825,312,309,46780,1633,0.426,302.5,19612,842,0.428,310.25,910,0.4335,315.5,1362,54.83333333,29.16666667,61.17647059,2.315562736,0.48,0.48,0.738317757,20,2023-12-31T23:01:02Z
625,106,79,0.4435,315,313,46506,1568,0.441,306.5,21702,926,0.43775,318,922,0.433,307,1365,58.18333333,35.38979248,66.28571429,3.357817419,0.29,0.61,0.702517162,23,2023-12-31T23:01:02Z
626,102,22,0.44175,317,320,56328,2116,0.44325,320,27103,1101,0.443,321.5,1076,0.439,304.5,1222,64.56666667,32.97692741,69.78021978,3.896103896,0.41,0.65,0.690045249,25,2023-12-31T23:01:02Z
627,98,48,0.42375,315,306,42150,1470,0.42575,313.5,19499,901,0.42475,308.5,897,0.4335,323.5,1813,60.16666667,26.96365768,1387.428571,3.179364127,0.35,0.64,0.779342723,20,2023-12-31T23:01:02Z
628,102,166,0.43425,313,314,45590,1446,0.42875,304.5,18117,696,0.4335,309.75,751,0.4365,309,1060,45.83333333,34.15898618,59.1160221,2.20214568,0.28,0.8,0.728971963,20,2023-12-31T23:01:02Z
629,102,11,0.4290525,315,307,52310,1687,0.43625,300.5,22731,796,0.43075,304.25,826,0.43,316.5,1250,39,35.98442714,63.33333333,3.382789318,0.23,0.56,0.557177616,22,2023-12-31T23:01:02Z
630,98,21,0.4295,316,314,48644,1722,0.571333333,417.6666667,22420,833,0.43075,313.5,1015,0.4285,313,1572,63.66666667,38.08156232,50.53763441,1.714285714,0.33,0.57,0.779859485,20,2023-12-31T23:01:02Z
631,100,41,0.4555,314,315,48580,1419,0.455,303.5,22296,772,0.4575,308.75,786,0.4535,293.5,886,51.5,33.53624792,62.5,1.97330238,0.41,0.79,0.655701754,20,2023-12-31T23:01:03Z
632,100,87,0.4355,316,305,43548,1423,0.437,299.75,19483,807,0.439,307.5,882,0.434,299.5,1568,49,30.04587156,61.84971098,2.502910361,0.31,0.62,0.553287982,23,2023-12-31T23:01:03Z
633,94,97,0.4215,312,297,43580,1516,0.424,298.5,20384,940,0.42425,307.5,887,0.428,299.5,1264,57,27.65196663,54.03726708,2.582582583,0.34,0.62,0.649411765,21,2023-12-31T23:01:03Z
634,108,125,0.445,314,312,48371,1568,0.44425,305,21750,891,0.44375,313.5,887,0.4425,312,1040,47.83333333,26.51428571,54.11764706,3.085714286,0.44,0.68,0.838137472,20,2023-12-31T23:01:03Z
635,110,128,0.44625,314,317,47664,1594,0.4505,315.5,22811,884,0.4395,322.25,905,0.4555,322.5,1064,40.33333333,26.23220153,62.29508197,2.625298329,0.44,0.83,0.789587852,21,2023-12-31T23:01:03Z
636,96,75,0.43525,311,314,45494,1620,0.43475,311.25,20512,966,0.43875,306.75,943,0.438,305.5,1631,54.16666667,35.93450028,69.02173913,2.464985994,0.32,0.5,0.826789838,21,2023-12-31T23:01:03Z
637,92,34,0.438,316,311,52100,1724,0.43825,306,23438,770,0.43775,311.75,688,0.4415,314,1841,56.5,26.19324796,56.21301775,3.669190448,0.31,0.8,0.592255125,20,2023-12-31T23:01:03Z
638,95,85,0.44625,314,334,59334,2170,0.4455,316.25,25094,912,0.447,330.25,994,0.443,322,1470,66.16666667,23.63936229,52.54237288,2.956225128,0.32,0.5,0.606334842,20,2023-12-31T23:01:03Z
639,104,106,0.4425,314,316,48258,1799,0.444,326,22795,989,0.44475,316.25,919,0.444,314,1421,53.33333333,38.73925501,62.30366492,2.514619883,0.38,0.66,0.965292842,20,2023-12-31T23:01:03Z
640,104,92,0.43025,313,310,49126,1526,0.43025,311.75,24418,1003,0.4305,303.25,931,0.4295,300,1197,56.33333333,26.87981054,51.80722892,3.473945409,0.18,0.61,0.686363636,20,2023-12-31T23:01:03Z
641,106,40,0.4465,315,309,47053,1668,0.44725,316.75,19050,761,0.45225,313.75,884,0.454,321,1558,33.16666667,32.25446429,63.12849162,3.429504627,0.41,0.5,0.827740492,22,2023-12-31T23:01:04Z
642,105,97,0.43975,314,298,45638,1517,0.44225,309.5,21380,854,0.4425,313.25,810,0.4555,315,1190,35.66666667,24.8603352,49.46236559,4.332344214,0.37,0.77,0.919354839,20,2023-12-31T23:01:04Z
643,102,36,0.4205,313,310,47374,1769,0.42125,299,19516,863,0.4215,306.5,873,0.4305,315,1554,37.83333333,27.27272727,55.75757576,3.013530135,0.31,0.74,0.847575058,21,2023-12-31T23:01:04Z
644,105,27,0.437,311,311,46522,1678,0.4355,300,18214,842,0.44325,316.5,749,0.441,317,1158,48.5,33.66164542,62.20930233,2.537231109,0.33,0.6,0.647727273,20,2023-12-31T23:01:04Z
645,98,23,0.432,313,302,43146,1382,0.42925,297.75,18551,747,0.434,310.5,901,0.432,295.5,1060,47.66666667,24.85448196,57.05882353,2.274052478,0.27,0.85,0.792147806,21,2023-12-31T23:01:04Z
646,100,16,0.42925,314,308,46274,1519,0.43475,321.75,27682,1018,0.42875,310.5,850,0.4305,318,1180,69.5,20.92074592,53.33333333,3.341584158,0.36,0.76,0.642523364,19,2023-12-31T23:01:04Z
647,100,66,0.423,312,298,44208,1608,0.42525,304.75,23690,980,0.42275,296.5,751,0.422,286.5,1316,68.16666667,27.34693878,53.59116022,2.89017341,0.38,0.6,0.557177616,22,2023-12-31T23:01:04Z
648,102,19,0.42525,314,308,47245,1535,0.4185,311.25,24611,984,0.419,304.5,814,0.419,301.5,998,51.66666667,35.36299766,60.98901099,2.524630542,0.31,0.71,0.623287671,22,2023-12-31T23:01:04Z
649,98,32,0.46625,312,315,50139,1561,0.467,314.25,23904,910,0.46525,316.5,838,0.467,304,1152,35.83333333,47.32662785,60.52631579,1.797752809,0.48,0.65,0.667396061,25,2023-12-31T23:01:04Z
650,98,121,0.432,312,314,51747,1549,0.43525,312.75,26510,872,0.433,315.75,964,0.443,317.5,1113,56.25,32.49266862,49.7005988,2.857142857,0.5,0.22,0.824601367,21,2023-12-31T23:01:04Z
651,98,25,0.424,315,306,42278,1433,0.424,307.25,19901,854,0.426,307.5,709,0.431,304,1046,61.68333333,37.33955659,68.13186813,2.923976608,0.27,0.69,0.700471698,22,2023-12-31T23:01:05Z
652,88,17,0.44425,318,314,50548,1496,0.4435,311.75,24853,864,0.4465,315.25,772,0.4475,313,1330,47.5,26.15384615,54.54545455,3.281334051,0.46,0.91,0.74715262,20,2023-12-31T23:01:05Z
653,90,95,0.42675,311,296,42970,1354,0.4245,294.25,19676,770,0.427,301,691,0.4275,287.5,1040,52.5,31.88073394,56.81818182,2.099580084,0.49,0.8,0.555288462,19,2023-12-31T23:01:05Z
1 Batch Speed BatchQty Para1 Para2 Para3 Para4 Para5 Para6 Para7 Para8 Para9 Para10 Para11 Para12 Para13 Para14 Para15 Para16 Para17 Para18 Para19 Para20 Para21 Para22 Para23 timestamp
2 1 84 26 0.43025 324 314 49512 1759 0.42775 308.75 21557 810 0.4275 309 840 0.425 315.5 1564 75 25.52325581 55.42857143 4.074505239 0.26 0.62 0.588235294 23 2023-12-31T23:00:00Z
3 2 100 26 0.433 319 400 47101 1746 0.43375 306.75 20512 824 0.4305 309 756 0.431 305.5 784 64.5 31.6 59.34065934 2.097505669 0.34 0.77 0.839907193 22 2023-12-31T23:00:00Z
4 3 102 34 0.4285 323 316 60023 1482 0.428 311.75 24933 765 0.4325 319.75 863 0.4375 330.5 1166 76.3 27.47068677 44.27083333 2.888503755 0.33 0.78 0.681710214 24 2023-12-31T23:00:00Z
5 4 96 21 0.43775 322 332 55428 1857 0.43925 322.75 24997 933 0.4375 321.5 780 0.4395 319.5 1362 71.58333333 26.38966873 55.55555556 2.392344498 0.35 0.63 0.65437788 22 2023-12-31T23:00:00Z
6 5 94 23 0.41725 321 313 46442 1844 0.4185 312.5 20850 686 0.42175 305.75 791 0.4245 323.5 1334 60.15 28.84500299 47.31182796 2.951191827 0.23 0.66 0.722090261 22 2023-12-31T23:00:00Z
7 6 98 97 0.44075 320 312 45539 1584 0.43875 309.25 20866 1400 0.445 311.25 684 0.445 314.5 868 55.16666667 36.03603604 68.92655367 2.37700387 0.31 0.78 0.702031603 20 2023-12-31T23:00:00Z
8 7 98 43 0.42275 320 314 51492 1689 0.42625 311.75 20352 864 0.427 317.75 912 0.43 319.5 886 63.5 25.54285714 50.81081081 2.36653825 0.32 0.55 0.769931663 20 2023-12-31T23:00:00Z
9 8 94 25 0.43175 321 310 47661 1782 0.428 301 21991 858 0.4325 307.75 812 0.435 299 984 61.33333333 47.98619102 62.90322581 1.81200453 0.44 0.52 0.687943262 20 2023-12-31T23:00:00Z
10 9 102 65 0.44225 321 316 70638 1572 0.44 304.25 20352 252 0.446 319.5 901 0.441 319.5 1082 64.83333333 33.22014714 56.98924731 1.672433679 0.34 0.6 0.664444444 20 2023-12-31T23:00:00Z
11 10 94 15 0.42875 321 304 45944 1377 0.4335 339.75 21059 255 0.4295 308 677 0.425 289 945 59.5 29.93555946 45.25139665 1.952662722 0.28 0.59 0.712230216 20 2023-12-31T23:00:00Z
12 11 98 40 0.43925 325 330 56955 1848 0.43675 330.25 26300 968 0.4415 336.25 856 0.435 315.5 945 56.56666667 37.69363167 54.05405405 3.058438012 0.25 0.76 0.600431965 20 2023-12-31T23:00:01Z
13 12 104 35 0.4245 320 312 37616 1689 0.431 314 20496 473 0.431 314 854 0.434 318.5 1127 52.16666667 32.51318102 56.7251462 1.87820148 0.29 0.77 0.811320755 20 2023-12-31T23:00:01Z
14 13 95 46 0.43175 320 310 47953 1528 0.4325 321.25 23470 840 0.43125 318 763 0.429 305.5 1362 66.98333333 29.3202765 53.47593583 1.962983735 0.27 0.58 0.637813212 21 2023-12-31T23:00:01Z
15 14 65 83 0.4295 320 324 51891 1913 0.43025 331.75 24162 1034 0.4305 326.5 947 0.4335 316.5 1554 87 23.18757192 43.40659341 2.306425041 0.25 0.73 0.583138173 20 2023-12-31T23:00:01Z
16 15 98 23 0.43025 323 304 42608 1648 0.43125 306 21638 784 0.431 305.5 978 0.4295 298.5 1194 64 29.19075145 56.66666667 2.628571429 0.5 0.75 0.787185355 20 2023-12-31T23:00:01Z
17 16 94 40 0.44275 321 312 60625 1470 0.44425 316 21107 796 0.445 320.75 870 0.443 320 1533 71.66666667 36.2400906 60.42780749 2.155172414 0.31 0.86 0.767184035 22 2023-12-31T23:00:01Z
18 17 80 36 0.4275 321 296 42359 1398 0.41975 295.5 16563 746 0.42525 303.75 814 0.419 306.5 1200 81.5 25.40869565 53.21637427 2.75175644 0.36 0.73 0.58411215 20 2023-12-31T23:00:01Z
19 18 102 58 0.43925 320 310 46554 1452 0.43875 307.25 22554 1245 0.43875 310 768 0.439 304 772 55.73333333 37.79036827 61.08108108 2.559821925 0.36 0.91 0.600896861 20 2023-12-31T23:00:01Z
20 19 102 29 0.44575 319 318 49564 1377 0.4445 315 22634 728 0.446 321.25 680 0.4415 314.5 861 59.68333333 42.80022766 74.28571429 0.576036866 0.32 0.85 0.915367483 19 2023-12-31T23:00:01Z
21 20 104 68 0.4425 322 305 47824 1433 0.4405 318.5 21123 870 0.4395 317 770 0.4375 304 1120 53.5 45.70637119 71.18644068 1.840490798 0.36 0.71 0.856512141 19 2023-12-31T23:00:01Z
22 21 94 119 0.43 319 303 48516 1573 0.4315 305.5 23422 842 0.43175 308 872 0.428 298.5 1232 75.95 36.45348837 61.32596685 1.881246326 0.42 0.92 0.656612529 20 2023-12-31T23:00:02Z
23 22 92 56 0.42675 320 308 75703 1349 0.42825 306 20288 654 0.4255 309.5 690 0.427 307 1400 69.83333333 38.59020311 53.84615385 1.366742597 0.4 0.71 0.735981308 20 2023-12-31T23:00:02Z
24 23 75 40 0.439 321 318 53064 1732 0.43775 314 24708 1003 0.4375 316 768 0.4365 317.5 1536 92.66666667 26.65897288 53.72340426 1.022604952 0.39 0.76 0.6367713 22 2023-12-31T23:00:02Z
25 24 98 32 0.4215 324 312 51152 1578 0.42375 304 20818 740 0.421 303.25 704 0.427 307 1480 53.96666667 29.01734104 48.8372093 2.949681897 0.43 0.62 0.866995074 19 2023-12-31T23:00:02Z
26 25 98 50 0.42675 318 311 45172 1507 0.428 314.5 21091 821 0.42675 310.5 845 0.4325 325 1516 81 24.85448196 43.85026738 2.362204724 0.38 0.74 0.651658768 20 2023-12-31T23:00:02Z
27 26 100 60 0.4275 320 308 49898 1628 0.425 297.5 20512 620 0.42325 302.5 616 0.4215 297.5 1575 57.33333333 32.42320819 66.11111111 1.922020868 0.31 0.77 0.634844869 19 2023-12-31T23:00:02Z
28 27 98 40 0.43825 321 315 43420 1440 0.439 315.25 24596 200 0.4395 306.25 733 0.442 303 1550 65.16666667 24.29313329 41.30434783 2.223489168 0.37 0.54 0.638826185 18 2023-12-31T23:00:02Z
29 28 102 57 0.4575 326 318 49625 1482 0.46125 318.5 23615 729 0.46025 316.5 660 0.4475 316 1026 45 36.76222597 56.98324022 1.038661281 0.27 0.58 0.417607223 22 2023-12-31T23:00:02Z
30 29 102 35 0.427 323 315 48163 1512 0.4315 314.25 21975 700 0.42775 314.25 856 0.4385 319 1190 63.2 34.61084906 54.3956044 2.795208214 0.21 0.89 0.793911007 19 2023-12-31T23:00:02Z
31 30 98 52 0.431 322 309 46619 1578 0.43 310 20560 870 0.4305 308.5 886 0.4325 311 1278 68.83333333 35.57199772 56.75675676 1.428571429 0.37 0.76 0.678321678 18 2023-12-31T23:00:02Z
32 31 96 47 0.43125 323 310 48532 1559 0.428 305.75 17956 595 0.42975 303.5 802 0.43 303.5 910 65.7 39.87268519 58.98876404 1.474758934 0.24 0.62 0.687793427 18 2023-12-31T23:00:03Z
33 32 96 55 0.443 321 320 53965 1979 0.44075 316.25 23390 943 0.44 314 828 0.4405 310.5 1074 82.5 28.96983495 51.06382979 2.285714286 0.17 0.6 0.799097065 20 2023-12-31T23:00:03Z
34 33 100 27 0.42975 323 319 49753 1755 0.42775 318.5 21959 929 0.4305 321.75 864 0.429 312.5 724 76.16666667 29.70930233 50.28901734 2.12514758 0.21 0.72 0.622119816 19 2023-12-31T23:00:03Z
35 34 90 34 0.4305 320 302 48741 1610 0.42825 305.5 22345 831 0.43025 298.25 758 0.436 307 1298 76.66666667 29.08366534 48.92473118 1.386577926 0.3 0.61 0.788863109 20 2023-12-31T23:00:03Z
36 35 104 100 0.44325 317 326 54110 1878 0.443 310.25 24869 936 0.44125 318 877 0.434 301 1102 70.16666667 33.90804598 60.81871345 2.151823072 0.1 0.6 0.634259259 21 2023-12-31T23:00:03Z
37 36 90 37 0.45425 324 320 66539 1580 0.44775 329.25 24885 952 0.452 322.5 819 0.452 314.5 959 76.33333333 25.44444444 53.26086957 1.366742597 0.3 0.75 0.72967033 21 2023-12-31T23:00:03Z
38 37 80 37 0.4405 320 318 49898 1792 0.4375 304 22988 961 0.439 315.25 1153 0.4425 316.5 1148 77 26.88652879 51.95530726 3.23699422 0.24 0.48 0.763157895 22 2023-12-31T23:00:03Z
39 38 105 46 0.4345 322 306 44963 1223 0.43675 315.75 23358 742 0.437 305 768 0.443 303 1614 60 40.35693725 56.81818182 2.53776435 0.18 0.54 0.746067416 23 2023-12-31T23:00:03Z
40 39 90 27 0.4385 327 317 47454 1738 0.428 311.5 19098 794 0.4305 313.75 803 0.433 307.5 1488 73.83333333 32.71245634 59.65909091 2.247191011 0.31 0.45 0.648837209 22 2023-12-31T23:00:03Z
41 40 95 81 0.449 324 311 45574 1550 0.45325 326.75 23647 901 0.451 319.75 822 0.4475 320.5 1337 65.16666667 29.56326988 56.90607735 1.341531582 0.19 0.88 0.755707763 18 2023-12-31T23:00:03Z
42 41 98 100 0.4485 326 303 47744 1498 0.449 311.5 21959 852 0.449 307.5 772 0.451 313.5 1208 52.5 32.48195447 56.49717514 2.868391451 0.37 0.74 0.747826087 19 2023-12-31T23:00:04Z
43 42 104 60 0.4345 325 308 73536 1356 0.4335 307 19033 749 0.43075 310.75 758 0.4255 301.5 808 46.33333333 35.02331002 53.98773006 1.957186544 0.26 0.6 0.631929047 19 2023-12-31T23:00:04Z
44 43 98 98 0.42775 320 308 47069 1442 0.43375 304.75 22618 962 0.42925 301 726 0.4325 306 1183 58.33333333 29.34232715 47.20812183 1.960784314 0.34 0.57 0.665882353 19 2023-12-31T23:00:04Z
45 44 96 37 0.4385 322 308 48274 1530 0.4425 312.75 19837 662 0.43775 307.25 492 0.4375 305.5 1057 38.2 40.4935502 56.18556701 2.23838836 0.19 0.66 0.75 18 2023-12-31T23:00:04Z
46 45 92 27 0.424 320 303 45622 1547 0.42425 298.5 17860 733 0.4245 313 919 0.428 296.5 1250 60.83333333 26.10695802 53.63128492 1.887840089 0.28 0.68 0.69047619 20 2023-12-31T23:00:04Z
47 46 90 17 0.4345 322 314 49046 1416 0.43575 311.5 22763 707 0.43525 318 884 0.436 306.5 1302 67.56666667 23.93887946 42.32804233 2.727768685 0.35 0.7 0.638694639 20 2023-12-31T23:00:04Z
48 47 75 27 0.451 324 324 55492 1601 0.449 320.5 26412 900 0.4515 330.75 892 0.4475 317 1284 51.5 27.73681225 54.59459459 2.067464635 0.3 0.61 0.651612903 20 2023-12-31T23:00:04Z
49 48 101 78 0.43725 320 309 47582 1381 0.434 310.25 20576 898 0.43175 309.75 826 0.433 300 1036 53 33.40961098 60.79545455 2.504472272 0.21 0.68 0.835990888 19 2023-12-31T23:00:04Z
50 49 80 30 0.43125 320 308 48387 1750 0.43525 312.5 22586 915 0.433 309.25 817 0.427 298.5 836 62.5 30.20172911 44.50549451 1.6 0.27 0.67 0.593967517 20 2023-12-31T23:00:04Z
51 50 93 49 0.432 321 333 50200 1824 0.43275 339.75 21123 892 0.43125 323 1031 0.4335 310.5 875 55.16666667 32.25998807 55.0295858 1.343784994 0.34 0.67 0.759345794 20 2023-12-31T23:00:04Z
52 51 102 44 0.4415 320 315 50477 1437 0.44325 308.25 20560 611 0.4425 317.5 578 0.4465 314 882 41.31666667 36.02484472 77.90697674 2.279202279 0.39 0.92 0.787671233 20 2023-12-31T23:00:05Z
53 52 102 132 0.43725 322 313 46715 1255 0.4375 319 21606 621 0.43475 311.5 738 0.439 309.5 1127 55.18333333 31.49295775 48.40425532 1.048565121 0.37 0.7 0.692488263 19 2023-12-31T23:00:05Z
54 53 92 55 0.427 320 306 48242 1894 0.428 315.25 20657 898 0.42575 308 910 0.4345 308.5 924 78.5 26.5793967 49.72375691 1.086956522 0.27 0.64 0.593220339 20 2023-12-31T23:00:05Z
55 54 98 50 0.44275 320 316 53676 1517 0.438 311.75 17442 616 0.4435 310.25 768 0.4405 321 903 53.78333333 35.30415009 67.64705882 1.013333333 0.29 0.98 0.805429864 18 2023-12-31T23:00:05Z
56 55 95 45 0.42875 321 306 44882 1528 0.43175 305 19802 850 0.43175 307.25 735 0.435 306.5 896 62.5 34.63079565 60.46511628 2.249134948 0.4 0.87 0.711627907 20 2023-12-31T23:00:05Z
57 56 100 35 0.44 320 316 50493 1614 0.441 310 21862 817 0.4425 317.25 1004 0.447 311 1050 47.33333333 29.54285714 57.55813953 2.939375383 0.27 0.69 0.683146067 20 2023-12-31T23:00:05Z
58 57 62 131 0.43725 319 312 55654 1617 0.4345 299.5 19419 770 0.434 312.5 854 0.438 300.5 959 70.5 26.98768197 48.04469274 1.920903955 0.35 0.45 0.655737705 22 2023-12-31T23:00:05Z
59 58 90 30 0.43825 326 317 51200 1764 0.43925 306 22168 852 0.43775 309.75 779 0.444 312.5 1054 54 28.57142857 47.61904762 2.18579235 0.44 0.7 0.673423423 20 2023-12-31T23:00:05Z
60 59 90 90 0.43925 322 320 54512 1797 0.44 314.25 23486 831 0.44075 322 957 0.4415 328.5 854 72.33333333 26.39734366 45.91836735 1.092896175 0.32 0.7 0.638248848 30 2023-12-31T23:00:05Z
61 60 102 83 0.44525 321 306 44352 1393 0.44425 303 20384 656 0.448 305.75 702 0.45 314.5 840 49.88333333 35.34726143 75.88235294 1.455180442 0.39 0.69 0.754424779 19 2023-12-31T23:00:05Z
62 61 93 64 0.42975 319 320 49705 1648 0.433 316.75 22136 864 0.428 316.75 959 0.4345 314.5 1141 57 29.43925234 51.74418605 2.383863081 0.37 0.7 0.613793103 21 2023-12-31T23:00:06Z
63 62 94 81 0.43425 320 299 44480 1540 0.4365 298.25 19950 716 0.4335 297.5 779 0.4365 295 1326 63.5 31.66089965 64.02439024 1.690670006 0.32 0.83 0.595402299 20 2023-12-31T23:00:06Z
64 63 80 22 0.44275 326 312 50718 1718 0.44175 318.25 25672 1029 0.44125 311.5 894 0.4365 304.5 1088 61.5 29.731243 59.30232558 1.826974745 0.45 0.91 0.635103926 23 2023-12-31T23:00:06Z
65 64 85 45 0.451 319 326 48435 1587 0.44575 323.5 24772 691 0.45025 319.25 742 0.447 316 808 41.83333333 34.83398987 62.10526316 1.252041372 0.35 0.82 0.647186147 19 2023-12-31T23:00:06Z
66 65 84 32 0.44125 324 324 53596 1904 0.44275 307 22441 840 0.4365 317 854 0.444 312.5 844 54.83333333 37.93103448 66.4893617 1.83639399 0.44 0.55 0.566513761 20 2023-12-31T23:00:06Z
67 66 100 25 0.44975 323 308 48387 1362 0.44675 321.25 23084 721 0.4475 310.5 623 0.4505 312.5 581 37.43333333 48.1105471 91.62011173 2.633118783 0.4 0.7 0.714611872 20 2023-12-31T23:00:06Z
68 67 85 36 0.438 320 312 46301 1323 0.4305 301.25 23502 793 0.43125 301.25 600 0.431 317.5 1218 51.66666667 30.23255814 45.25139665 3.994927077 0.43 0.44 0.592592593 21 2023-12-31T23:00:06Z
69 68 86 30 0.44775 324 314 45890 1393 0.44525 312.25 22827 872 0.445 322.5 698 0.4455 312.5 595 49.33333333 43.92794887 69.61325967 1.662844037 0.46 0.83 0.824295011 22 2023-12-31T23:00:06Z
70 69 97 37 0.43175 319 310 44850 1400 0.433325 312.75 25512 831 0.43025 310.5 761 0.4305 300 777 37.33333333 33.86524823 61.36363636 2.210884354 0.36 0.7 0.731207289 20 2023-12-31T23:00:06Z
71 70 80 27 0.42225 320 307 42873 1220 0.42225 311.75 22023 679 0.42175 300.75 662 0.4215 303 1106 59.4 29.86935867 48.87640449 2.038369305 0.32 0.95 0.628841608 19 2023-12-31T23:00:06Z
72 71 85 16 0.434 320 306 43388 1202 0.4385 314.75 25158 808 0.4365 315.25 632 0.439 320.5 917 49.83333333 39.7964952 74.55621302 2.140672783 0.37 0.88 0.971830986 23 2023-12-31T23:00:07Z
73 72 94 99 0.43175 320 308 42391 1402 0.43075 301 19371 667 0.43275 303 595 0.4275 289.5 690 30 33.03886926 64.94252874 0.183823529 0.19 0.62 0.653579677 20 2023-12-31T23:00:07Z
74 73 100 30 0.43775 321 302 47760 1503 0.43675 306 20818 730 0.43825 305.5 789 0.4395 314.5 945 36.16666667 33.44827586 65 1.838440111 0.26 0.51 0.879120879 18 2023-12-31T23:00:07Z
75 74 100 42 0.43075 319 316 54399 1759 0.42725 305.25 21895 821 0.42925 316 896 0.437 324 777 36.83333333 24.39313203 53.93939394 2.320047591 0.35 0.22 0.534883721 18 2023-12-31T23:00:07Z
76 75 98 32 0.4335 318 312 51360 1642 0.431 303 22474 821 0.43175 304.75 929 0.436 304.5 945 45.16666667 28.22120867 56.52173913 3.243540407 0.17 0.68 0.625882353 19 2023-12-31T23:00:07Z
77 76 100 59 0.445 321 322 60484 1839 0.44325 314.5 22409 1029 0.44275 317.75 961 0.436 304.5 998 50.83333333 35.03981797 54.28571429 2.052597819 0.23 0.51 0.624719101 19 2023-12-31T23:00:07Z
78 77 92 35 0.44375 324 320 55800 1610 0.44525 315 23936 654 0.4465 319 856 0.445 314 639 34.16666667 32.69983231 64.94252874 2.899408284 0.17 0.51 0.484162896 20 2023-12-31T23:00:07Z
79 78 98 50 0.44875 320 325 53611 1479 0.4465 316.75 22152 609 0.4485 315.75 593 0.4495 307 784 38.05 43.83714445 64.21052632 2.378255946 0.3 0.56 0.671111111 20 2023-12-31T23:00:07Z
80 79 98 56 0.45475 320 323 53756 1648 0.455 316 23486 768 0.45175 324.75 894 0.457 323.5 1295 49.16666667 33.15305571 62.01117318 1.825013419 0.16 0.43 0.666666667 18 2023-12-31T23:00:07Z
81 80 102 129 0.449 322 324 53756 1440 0.45225 321.5 24226 786 0.451 311.5 562 0.4515 317 525 22.36666667 51.43165856 85.32608696 1.950659782 0.22 0.6 0.81797235 19 2023-12-31T23:00:07Z
82 81 101 71 0.4375 319 304 48226 1629 0.4405 316 23310 854 0.44025 308.75 887 0.438 312.5 984 49.16666667 32.20823799 58.82352941 1.886792453 0.38 0.56 0.773033708 19 2023-12-31T23:00:08Z
83 82 85 29 0.4385 319 314 49689 1535 0.44025 313.25 20496 777 0.43925 310.25 817 0.443 316.5 1190 65.16666667 25.55492316 60.22099448 2.272727273 0.38 0.62 0.801801802 20 2023-12-31T23:00:08Z
84 83 102 102 0.437 322 308 42262 1307 0.441 307.25 24612 1025 0.4445 315.5 905 0.445 306.5 844 45.33333333 45.79855314 84.81675393 2.019650655 0.46 0.67 0.707207207 23 2023-12-31T23:00:08Z
85 84 103 25 0.43675 320 317 44706 1351 0.4345 300.75 20802 695 0.44075 298.75 728 0.44 310.5 903 42.85 39.04542841 73.14285714 2.123672705 0.32 0.64 0.847161572 23 2023-12-31T23:00:08Z
86 85 102 112 0.4375 321 302 43146 1526 0.442 308.75 20400 714 0.43825 297 712 0.44 292.5 822 49.33333333 32.37934905 56.04395604 2.366863905 0.23 0.46 0.657210402 20 2023-12-31T23:00:08Z
87 86 100 42 0.442 321 324 53048 1519 0.4415 306.75 20239 662 0.436 312.75 642 0.443 313.5 784 37.45 33.6492891 58.92857143 1.720183486 0.31 0.8 0.681917211 20 2023-12-31T23:00:08Z
88 87 98 43 0.43175 323 308 48740 1542 0.42925 311.25 21959 840 0.43225 313.5 940 0.431 298 1001 62.16666667 25.94093804 45.40540541 2.18579235 0.26 0.64 0.630136986 20 2023-12-31T23:00:08Z
89 88 100 32 0.43925 323 314 48290 1430 0.4455 307.5 20480 656 0.44025 313.75 835 0.4515 324 1071 39.28333333 29.62750716 58.28571429 2.181400689 0.36 0.88 0.636155606 20 2023-12-31T23:00:08Z
90 89 98 52 0.437 321 322 49110 1631 0.43175 309.5 21300 723 0.435 306 802 0.4335 312.5 826 47.83333333 31.31991051 56.61375661 1.142857143 0.34 0.79 0.881642512 20 2023-12-31T23:00:08Z
91 90 88 71 0.4225 319 296 46233 1507 0.42125 300 18069 791 0.421 298 812 0.4265 299.5 1152 58.83333333 29.85865724 55.80110497 1.878453039 0.36 0.76 0.715294118 19 2023-12-31T23:00:08Z
92 91 104 31 0.455 321 318 48580 1533 0.4525 312 23310 819 0.45325 313.25 738 0.4525 324.5 934 37.33333333 36.26373626 58.79120879 1.117318436 0.31 0.67 0.642857143 20 2023-12-31T23:00:09Z
93 92 90 23 0.458 320 316 52052 1545 0.46025 315.5 25753 805 0.4595 320.5 763 0.462 318 652 37.16666667 43.72972973 90.39548023 2.985074627 0.36 0.68 0.815384615 23 2023-12-31T23:00:09Z
94 93 95 67 0.4345 321 312 54126 1684 0.43025 299.5 22650 774 0.434 310 831 0.437 305 976 43.75 38.07890223 49.43820225 1.208981002 0.42 0.66 0.662037037 20 2023-12-31T23:00:09Z
95 94 96 29 0.4425 320 316 52824 1671 0.4425 320.75 24933 940 0.442 323.75 920 0.445 323 1026 54.5 28.14982974 55.74712644 2.994011976 0.35 0.6 0.724373576 20 2023-12-31T23:00:09Z
96 95 98 142 0.435 320 307 46120 1334 0.4365 310 19966 751 0.44 309.5 732 0.439 311.5 609 44.33333333 27.67402377 46.84210526 2.688172043 0.38 0.57 0.728110599 20 2023-12-31T23:00:09Z
97 96 98 14 0.43975 322 312 50959 1482 0.43825 319.25 22184 679 0.43625 304 824 0.4405 311.5 777 44.85 38.04100228 64.40677966 3.306264501 0.47 0.57 0.661399549 20 2023-12-31T23:00:09Z
98 97 80 10 0.4455 320 326 58096 1852 0.45 315.5 21590 656 0.4455 324 1001 0.4485 328.5 980 42 27.07209686 59.47368421 2.673796791 0.22 0.65 0.66962306 20 2023-12-31T23:00:09Z
99 98 65 19 0.44775 321 318 50059 1454 0.449 321 21638 653 0.4465 308.25 719 0.444 310 938 54.45 22.68673356 52.97619048 2.485875706 0.34 0.64 0.539325843 21 2023-12-31T23:00:09Z
100 99 104 29 0.44575 319 312 54046 1264 0.4425 315.75 24129 704 0.44575 317.75 744 0.449 327.5 1141 44 40.77555817 68.04733728 3.695408735 0.29 0.58 0.62962963 19 2023-12-31T23:00:09Z
101 100 92 16 0.439 321 318 49898 1552 0.44325 315.5 22216 751 0.44075 317.25 924 0.4445 310.5 1078 51 28.90365449 61.05263158 2.173913043 0.32 0.84 0.753393665 20 2023-12-31T23:00:09Z
102 101 75 26 0.44975 326 328 57244 1853 0.44925 323.25 26508 985 0.44675 323.5 929 0.446 320.5 1344 64.5 19.20903955 48.55491329 1.694915254 0.35 0.7 0.615044248 20 2023-12-31T23:00:10Z
103 102 103 122 0.43325 318 303 45429 1407 0.42875 296 21300 866 0.442 300 639 0.4445 306 1022 47.33333333 35.86659377 79.76190476 2.839879154 0.28 0.62 0.587006961 21 2023-12-31T23:00:10Z
104 103 80 97 0.443 321 312 47808 1703 0.4405 301.25 25882 1062 0.43875 315.25 789 0.4385 306.5 718 45.5 30.58823529 58.06451613 2.824858757 0.35 0.61 0.531322506 20 2023-12-31T23:00:10Z
105 104 96 127 0.4445 320 313 48146 1656 0.45375 318.75 27216 1003 0.45075 312.5 779 0.45 302 766 40.33333333 35.32967033 65.43209877 1.807228916 0.32 0.62 0.981776765 22 2023-12-31T23:00:10Z
106 105 90 30 0.4385 321 314 52518 1699 0.435 308.25 23004 788 0.4375 317.25 805 0.4335 305.5 861 47.35 39.18690006 56.61375661 2.310803004 0.47 0.65 0.648401826 21 2023-12-31T23:00:10Z
107 106 94 30 0.4435 321 325 55267 1710 0.446 318 24354 998 0.445 314.75 756 0.451 322.5 819 45.66666667 24.87644152 56.52173913 2.310231023 0.37 0.56 0.875862069 20 2023-12-31T23:00:10Z
108 107 98 72 0.44 323 307 47262 1298 0.44 311 21557 639 0.438 308.25 695 0.4405 304 522 39.56666667 26.04049494 58.75706215 2.151755379 0.45 0.67 0.803652968 20 2023-12-31T23:00:10Z
109 108 88 32 0.42675 319 312 50396 1760 0.42625 312.75 23068 803 0.4245 310 903 0.422 304.5 1068 45 25.36873156 48.23529412 2.525832377 0.26 0.72 0.533333333 20 2023-12-31T23:00:10Z
110 109 85 29 0.43425 315 310 49673 1614 0.43425 298.5 23036 845 0.43325 297.25 784 0.4335 291 1113 53.16666667 22.49544627 42.39130435 2.367941712 0.33 0.75 0.635730858 21 2023-12-31T23:00:10Z
111 110 100 54 0.439 322 316 47374 1652 0.43975 306.5 21702 847 0.4405 321.75 836 0.4635 319 892 36.66666667 35.63799888 58.69565217 1.663090129 0.43 0.56 0.653594771 21 2023-12-31T23:00:10Z
112 111 94 77 0.43975 319 312 49223 1570 0.4385 315.5 19346 590 0.4385 313.75 818 0.443 311 966 49.83333333 33.86524823 59.28143713 2.361751152 0.18 0.71 0.690949227 20 2023-12-31T23:00:11Z
113 112 92 18 0.44475 321 318 54480 1479 0.44025 310.25 20496 570 0.4435 308.75 716 0.4475 312 1162 38.4 27.32331664 48.33333333 3.076923077 0.22 0.56 0.805936073 21 2023-12-31T23:00:11Z
114 113 88 46 0.437 321 312 45609 1465 0.4385 312 22586 819 0.43825 309 768 0.44 301 630 50.83333333 29.30153322 54.94505495 2.375565611 0.59 0.19 0.759637188 20 2023-12-31T23:00:11Z
115 114 90 93 0.439 320 318 54560 1437 0.436 302.5 21236 625 0.4365 318.25 728 0.438 304.5 536 40.65 17.6536943 47.42857143 0.161290323 0.2 0.56 0.774941995 20 2023-12-31T23:00:11Z
116 115 90 33 0.435 324 304 51280 1704 0.4335 303.25 21686 709 0.436 309.5 844 0.439 305 917 47.33333333 20.51282051 43.45238095 1.379310345 0.23 0.55 0.802352941 20 2023-12-31T23:00:11Z
117 116 75 18 0.4445 322 311 52808 1727 0.44575 317.25 23374 681 0.445 311.5 968 0.4465 310 1194 55.65 20.01124227 40.95744681 1.902173913 0.13 0.53 0.665148064 20 2023-12-31T23:00:11Z
118 117 82 82 0.436475 319 318 47583 1404 0.43875 314.25 22232 719 0.43825 315.5 604 0.4365 320 826 55.83333333 26.50115473 50.27624309 1.775147929 0.13 0.6 0.601830664 22 2023-12-31T23:00:11Z
119 118 80 18 0.441 319 315 48918 1647 0.44025 311.5 24017 814 0.44325 318.75 919 0.4385 305.5 1306 58 25.7918552 54.64480874 1.725163593 0.27 0.6 0.665148064 21 2023-12-31T23:00:11Z
120 119 70 25 0.4435 319 316 53113 1390 0.44475 305.25 20994 606 0.4425 309 653 0.441 315 1124 61.83333333 30.37330317 48.10810811 1.836969001 0.26 0.57 0.67114094 21 2023-12-31T23:00:11Z
121 120 90 36 0.443 322 316 49062 1577 0.433576 305.75 20593 765 0.44125 306.25 737 0.439 304 1001 50 42.33870968 63.58381503 1.697045883 0.29 0.76 0.85077951 20 2023-12-31T23:00:11Z
122 121 100 36 0.44925 322 320 51136 1547 0.444 309.5 23615 791 0.44575 317.5 698 0.882 616 630 37 29.79084228 65.69767442 3.03030303 0.35 0.63 0.749435666 20 2023-12-31T23:00:12Z
123 122 103 86 0.4395 321 317 49110 1414 0.434 311.75 20994 649 0.434 319.25 597 0.867 586 483 39.51666667 43.06818182 65.90909091 2.477876106 0.35 0.59 0.654205607 20 2023-12-31T23:00:12Z
124 123 104 34 0.436 324 316 53483 1521 0.44025 312.75 21638 579 0.438 312.5 607 0.44 306 700 35.6 27.13091922 54.14364641 0.634584876 0.25 0.43 0.775656325 20 2023-12-31T23:00:12Z
125 124 98 26 0.43475 318 317 50557 1545 0.43625 312.5 24081 912 0.437 307.5 709 0.433 307.5 948 44.66666667 29.21348315 55.61497326 1.324854266 0.29 0.58 0.808219178 20 2023-12-31T23:00:12Z
126 125 101 26 0.4305 320 312 46410 1608 0.438 305 23840 942 0.4325 303.75 796 0.438 298 802 40.83333333 29.9028016 59.21787709 2.5625 0.24 0.89 0.736238532 23 2023-12-31T23:00:12Z
127 126 102 81 0.4395 320 315 50204 1701 0.4395 311.5 22088 836 0.44175 317.75 842 0.441 315 878 46.83333333 35.83945732 63.04347826 2.527472527 0.17 0.72 0.64037123 20 2023-12-31T23:00:12Z
128 127 102 41 0.43775 323 312 44754 1362 0.43775 317.75 23325 940 0.4365 321.5 777 0.4415 312.5 700 39 33.97291196 61.29032258 2.177463255 0.31 0.77 0.814220183 20 2023-12-31T23:00:12Z
129 128 106 104 0.438 321 304 46233 1398 0.43675 313.25 21493 793 0.429 304.75 719 0.437 302 976 36.83333333 32.81875357 66.66666667 1.802325581 0.28 0.75 0.77383592 20 2023-12-31T23:00:12Z
130 129 104 19 0.43975 321 312 44095 1379 0.43925 301.25 18808 663 0.43875 301.25 740 0.444 300.5 480 36 32.84313725 56.61375661 2.389803505 0.29 0.72 0.897196262 18 2023-12-31T23:00:12Z
131 130 92 1 0.42375 319 305 45799 1500 0.41775 307.5 18808 684 0.42225 299 782 0.423 299.5 987 63.83333333 29.78723404 65.19337017 2.154195011 0.32 0.83 0.658653846 18 2023-12-31T23:00:12Z
132 131 96 42 0.45375 321 328 55317 1510 0.4575 323.25 23454 650 0.45475 322.25 831 0.4535 320 1071 51.83333333 38.92876864 52.12765957 1.479915433 0.37 0.92 0.543290043 18 2023-12-31T23:00:13Z
133 132 100 45 0.433 322 312 46426 1349 0.43225 302.25 19162 625 0.4325 308 660 0.4335 314 648 31.9 47.95127353 59.45945946 1.808634772 0.3 0.88 0.833723653 18 2023-12-31T23:00:13Z
134 133 104 23 0.441 321 326 53917 1829 0.44375 315 21991 719 0.43825 304 751 0.4435 305.5 822 49.5 40.7530454 65.95744681 0.818777293 0.39 0.67 0.712962963 18 2023-12-31T23:00:13Z
135 134 100 12 0.43125 320 310 53097 1410 0.42375 307.25 20592 614 0.428 306.5 592 0.433 305 882 36.43333333 39.22241281 66.47727273 1.567944251 0.27 0.59 0.710648148 18 2023-12-31T23:00:13Z
136 135 95 4 0.4365 324 316 48532 1484 0.43625 312 23181 744 0.433 306.25 640 0.4325 301.5 707 50.16666667 39.36170213 61.95652174 1.573033708 0.34 0.5 0.82983683 18 2023-12-31T23:00:13Z
137 136 80 34 0.41475 320 307 46024 1489 0.41075 308.25 17346 536 0.41425 303 749 0.4175 301 696 77.51666667 23.65721183 46.77419355 1.806588735 0.22 0.53 0.658767773 20 2023-12-31T23:00:13Z
138 137 90 26 0.4315 320 302 44513 1486 0.42975 307.25 22714 796 0.43075 307 779 0.431 311 900 50.5 26.65505226 60 2.51903925 0.23 0.5 0.745283019 20 2023-12-31T23:00:13Z
139 138 100 112 0.43575 321 314 49942 1664 0.4355 312.5 23647 924 0.43625 311 791 0.432 298.5 830 51.83333333 32.56855064 60.21505376 2.047592695 0.3 0.67 0.755760369 19 2023-12-31T23:00:13Z
140 139 98 118 0.42475 319 312 50284 1545 0.42325 311.75 20641 714 0.42525 307 712 0.4285 310.5 746 54.16666667 29.50437318 62.20930233 2.131336406 0.43 0.54 0.624708625 18 2023-12-31T23:00:13Z
141 140 100 19 0.436 324 300 44384 1339 0.44325 308 21943 803 0.43825 300.75 712 0.446 310 798 41.66666667 42.65815438 28.40236686 1.576182137 0.37 0.56 0.811494253 19 2023-12-31T23:00:13Z
142 141 97 31 0.43875 319 315 51763 1437 0.433 309 20528 598 0.44 309.5 800 0.441 311 938 51 30.01715266 64.44444444 2.356321839 0.29 0.72 0.597727273 20 2023-12-31T23:00:14Z
143 142 102 27 0.45425 323 320 52711 1393 0.4495 321.5 23744 662 0.4535 315.75 732 0.46 311.5 570 31.11666667 43.56545961 69.18604651 1.835405565 0.39 0.54 0.721238938 19 2023-12-31T23:00:14Z
144 143 98 23 0.44675 323 316 53370 1802 0.44275 314.75 22730 858 0.4425 316 849 0.444 322.5 1354 54.16666667 30.72118115 51.26903553 2.497398543 0.29 0.48 0.64380531 18 2023-12-31T23:00:14Z
145 144 102 95 0.4325 322 306 48275 1578 0.4285 307.75 20496 642 0.42975 308 850 0.4275 300 1015 58.26666667 31.10102157 59.5505618 1.861702128 0.4 0.65 0.687203791 19 2023-12-31T23:00:14Z
146 145 102 21 0.4415 322 315 45429 1407 0.43675 311.75 19805 662 0.438 311.25 733 0.4435 299 798 53.5 38.11936937 45.40540541 1.565120179 0.35 0.68 0.703196347 20 2023-12-31T23:00:14Z
147 146 92 53 0.439 322 309 49705 1554 0.44075 305.25 21766 710 0.44125 305 796 0.443 299 1081 45.5 29.43502825 58.23529412 1.776960784 0.36 0.7 0.636986301 20 2023-12-31T23:00:14Z
148 147 101 84 0.44175 318 315 47703 1680 0.4465 305.75 21204 824 0.4385 313 735 0.442 318.5 808 54.83333333 30.95505618 48.82352941 2.926525529 0.24 0.65 0.591836735 20 2023-12-31T23:00:14Z
149 148 100 23 0.42375 321 300 40944 1363 0.425 300.75 18840 688 0.4235 299.25 705 0.4185 292.5 749 36 35.85858586 63.48314607 2.209302326 0.26 0.73 0.909722222 20 2023-12-31T23:00:14Z
150 149 92 35 0.43 321 311 44738 1328 0.42975 301.5 21686 684 0.43 308.75 760 0.436 306.5 1071 53.28333333 32.33256351 50.81081081 2.570233114 0.31 0.67 0.76744186 20 2023-12-31T23:00:14Z
151 150 95 150 0.44825 323 320 48741 1550 0.43825 308.5 21991 704 0.4435 312.5 633 0.445 325 816 44.33333333 28.832951950000002 63.31360947 2.005730659 0.33 0.52 0.610599078 20 2023-12-31T23:00:14Z
152 151 100 141 0.4385 322 312 46940 1466 0.441 312 21798 728 0.4375 309 746 0.438 307 570 36.16666667 30.90705487 55.4973822 1.621621622 0.41 0.75 0.931034483 20 2023-12-31T23:00:15Z
153 152 90 22 0.4455 321 312 55176 1713 0.44225 313.25 21187 766 0.44525 311.75 854 0.4425 308.5 952 46.33333333 27.50434279 54.11764706 2.362669817 0.27 0.76 0.717391304 19 2023-12-31T23:00:15Z
154 153 88 70 0.433 321 301 39594 1129 0.42925 306 20303 749 0.43225 303 718 0.436 309.5 896 52.33333333 35.3314121 61.62162162 0.911039657 0.32 0.72 0.702576112 18 2023-12-31T23:00:15Z
155 154 92 35 0.437329 320 313 49416 1335 0.4345 311.25 22666 714 0.43425 313.25 744 0.436 309.5 732 40.21666667 37.16452742 58.24175824 1.893287435 0.32 0.8 0.717539863 19 2023-12-31T23:00:15Z
156 155 88 14 0.44275 320 315 48258 1421 0.43975 318.75 28984 872 0.4425 319.25 760 0.4465 313.5 707 49.23333333 31.90883191 50.88757396 2.092760181 0.2 0.51 0.681093394 20 2023-12-31T23:00:15Z
157 156 92 13 0.43475 319 308 45984 1218 0.436 319.25 22409 532 0.43725 303 499 0.4315 312.5 718 41 39.04542841 76.60818713 2.074927954 0.28 0.56 0.745920746 18 2023-12-31T23:00:15Z
158 157 92 121 0.42925 320 306 50300 1404 0.43575 304.75 21702 712 0.43075 304 654 0.441 287 513 37.5 33.16239316 68.86227545 1.993957704 0.25 0.66 0.945080092 21 2023-12-31T23:00:15Z
159 158 100 124 0.44225 320 323 54930 1704 0.44475 316.5 23036 842 0.44925 318.75 634 0.442 318 527 25.66666667 29.17831191 59.44444444 2.253032929 0.3 0.6 0.918367347 18 2023-12-31T23:00:15Z
160 159 98 92 0.44175 322 315 46024 1554 0.439 313.5 22220 742 0.44525 319.75 704 0.447 310 679 36.85 47.45075319 70.45454545 1.942926533 0.38 0.52 0.668903803 19 2023-12-31T23:00:15Z
161 160 98 74 0.426 320 309 47599 1309 0.4255 299.75 20255 681 0.43175 301.5 598 0.4235 298 672 53.46666667 38.0952381 88.34355828 2.038439138 0.3 0.89 0.832183908 19 2023-12-31T23:00:15Z
162 161 94 110 0.43 321 310 45976 1158 0.4285 297.5 22554 760 0.43575 305.5 677 0.428 290 518 38.01666667 22.78835386 47.02702703 4.134078212 0.36 0.53 0.629186603 20 2023-12-31T23:00:16Z
163 162 85 77 0.42775 321 307 44095 1390 0.428 310.5 20657 646 0.4275 309.5 747 0.4275 310 914 59.43333333 47.9006505 76.43678161 0.976450316 0.24 0.58 0.693023256 20 2023-12-31T23:00:16Z
164 163 100 45 0.4435 324 314 47085 1358 0.4465 327.75 24788 912 0.44675 322 900 0.4475 335 819 54.33333333 34.48464912 55.02392344 2.00927357 0.3 1.07 0.719457014 20 2023-12-31T23:00:16Z
165 164 96 15 0.43375 320 310 47438 1729 0.429 305.25 20368 807 0.43575 300.5 662 0.4355 314.5 774 55 29.9522673 70.58823529 2.558139535 0.41 0.84 0.940229885 21 2023-12-31T23:00:16Z
166 165 100 20 0.43125 320 304 43002 1507 0.4325 307.75 21396 892 0.433 309 700 0.444 327 644 40.16666667 27.68691589 48.82352941 2.915951973 0.42 0.75 0.630071599 20 2023-12-31T23:00:16Z
167 166 80 14 0.425 319 293 44223 1110 0.42525 294.75 19162 502 0.42625 301 665 0.4255 309.5 1252 53.33333333 33.67816092 61.45251397 1.712707182 0.25 0.65 0.745762712 20 2023-12-31T23:00:16Z
168 167 90 137 0.44325 322 314 52776 1498 0.4425 298 22698 668 0.4425 314.75 592 0.4515 312.5 504 35.23333333 38.66513234 67.93478261 2.614758861 0.4 0.76 0.733634312 20 2023-12-31T23:00:16Z
169 168 90 98 0.43775 318 320 50911 1552 0.438 308.75 27264 858 0.4365 316.25 639 0.4385 302 504 35.21666667 34.39093484 55.02645503 2.293064877 0.35 0.62 0.81498829 24 2023-12-31T23:00:16Z
170 169 88 96 0.4375 321 316 56360 1465 0.43525 309.75 20962 616 0.439 312.75 887 0.4415 309.5 724 41.28333333 29.79683973 57.60869565 2.190580504 0.2 0.71 0.75 18 2023-12-31T23:00:16Z
171 170 88 96 0.43275 320 319 56328 1500 0.434 310.75 22425 686 0.431 312.5 730 0.4335 321.5 872 41.4 27.40440324 51.61290323 2.159468439 0.27 0.64 0.712264151 18 2023-12-31T23:00:16Z
172 171 92 73 0.4265 320 311 45300 1816 0.4225 309.75 20384 789 0.426 307.5 754 0.424 314 945 66.16666667 26.60388464 54.11764706 1.471453796 0.35 0.72 0.778823529 19 2023-12-31T23:00:17Z
173 172 100 113 0.44275 325 313 45976 1265 0.448 313.25 22522 761 0.4425 315.75 525 0.44 316.5 665 38.16666667 40.90909091 71.26436782 1.68444694 0.25 0.75 0.902222222 18 2023-12-31T23:00:17Z
174 173 101 48 0.43925 321 320 49712 1640 0.4335 318 23695 718 0.4375 307.25 693 0.435 296.5 763 39.36666667 30.01138952 65.14285714 2.479338843 0.23 0.72 0.826879271 18 2023-12-31T23:00:17Z
175 174 103 74 0.44675 319 315 47969 1742 0.44675 315.5 24354 863 0.44325 316 864 0.4425 312 931 40.66666667 36.53738055 58.24175824 4.021289178 0.33 0.57 0.683257919 20 2023-12-31T23:00:17Z
176 175 92 12 0.4455 323 323 52984 1824 0.4455 314 24194 910 0.4495 312.5 800 0.4485 302 846 41.65 36.54178674 55.30726257 2.34375 0.36 0.6 0.68220339 20 2023-12-31T23:00:17Z
177 176 100 47 0.44275 321 322 57936 1944 0.43975 315.75 21991 807 0.441 318.5 744 0.4395 317.5 784 40.16666667 30.07432819 58.42696629 2.535832415 0.28 0.57 0.727477477 20 2023-12-31T23:00:17Z
178 177 88 59 0.43025 320 305 46265 1580 0.432 306.5 20271 642 0.4315 303.75 821 0.4325 309 1211 58.66666667 32.03214696 50.81967213 2.015411974 0.3 0.6 0.848623853 19 2023-12-31T23:00:17Z
179 178 104 66 0.43775 323 315 49305 1680 0.4375 322 21895 744 0.43975 311 724 0.434 305 780 42.83333333 37.00234192 59.52380952 1.44092219 0.24 0.9 0.85778781 18 2023-12-31T23:00:17Z
180 179 102 33 0.4355 319 320 54270 1647 0.43475 317.25 23342 618 0.44215 319.5 676 0.441 332.5 836 53.5 32.25083987 59.21787709 2.111111111 0.26 0.82 0.613839286 17 2023-12-31T23:00:17Z
181 180 100 23 0.43075 319 313 49512 1646 0.4355 318.25 24354 676 0.431 311.5 861 0.4275 300 1092 45 38.52889667 59.3220339 2.485549133 0.25 0.86 0.661214953 18 2023-12-31T23:00:17Z
182 181 104 81 0.44075 319 308 49608 1500 0.4315 297.75 19680 712 0.43775 305.25 665 0.4405 295.5 570 29.83333333 35.39358601 65.49707602 2.29226361 0.31 0.66 0.722222222 20 2023-12-31T23:00:18Z
183 182 103 153 0.43025 321 302 45831 1433 0.4285 299 20818 730 0.42775 304 691 0.428 298 714 42.66666667 36.67439166 70.83333333 2.202380952 0.27 0.65 0.917620137 20 2023-12-31T23:00:18Z
184 183 98 30 0.43375 319 308 48435 1638 0.43075 304.25 23752 639 0.43225 304.25 672 0.4385 313.5 1113 41 40.13040901 51.14942529 2.173913043 0.39 0.63 0.648275862 21 2023-12-31T23:00:18Z
185 184 102 16 0.432 323 312 51152 1505 0.43 308 22296 744 0.42775 304 728 0.43 302 518 36.23333333 32.12589074 71.42857143 2.58780037 0.21 0.87 0.816091954 20 2023-12-31T23:00:18Z
186 185 102 21 0.44175 322 318 51827 1456 0.44 309 25286 861 0.44425 322.25 550 0.447 322.5 486 37.98333333 35.06044905 56.52173913 2.121390689 0.31 0.91 0.764044944 20 2023-12-31T23:00:18Z
187 186 102 153 0.4365 323 320 52647 1818 0.43225 315 22377 794 0.4375 314.75 768 0.442 319 651 46 29.63604853 58.52272727 2.024539877 0.29 0.73 0.754022989 19 2023-12-31T23:00:18Z
188 187 102 24 0.437 322 317 48886 1533 0.44 310.75 24688 872 0.44025 315 666 0.45 312.5 479 44.83333333 33.29564726 54.4973545 2.248454188 0.35 0.72 0.95045045 19 2023-12-31T23:00:18Z
189 188 105 150 0.44425 322 316 50782 1535 0.437 310.75 21091 724 0.44425 318 649 0.4415 323.5 514 31.33333333 42.09039548 71.42857143 1.594802126 0.24 0.84 NULL 20 2023-12-31T23:00:18Z
190 189 101 32 0.44225 319 304 50911 1323 0.4395 306.25 21525 537 0.441 308.25 690 0.4445 306.5 805 36 19.87435751 39.20454545 2.005730659 0.35 0.68 0.657407407 20 2023-12-31T23:00:18Z
191 190 102 63 0.441 321 308 50252 1542 0.4405 308.5 23502 796 0.44225 306 623 0.4475 316.5 581 32.83333333 34.93571828 62.23404255 2.370689655 0.36 0.81 0.700460829 21 2023-12-31T23:00:18Z
192 191 104 17 0.42725 319 307 48757 1387 0.425 315.5 22940 606 0.42875 308.25 656 0.4295 312 640 37.83333333 39.19860627 50.27027027 2.5 0.17 0.82 0.645539906 18 2023-12-31T23:00:19Z
193 192 105 94 0.43125 320 317 49480 1610 0.4365 309.5 21364 733 0.431 314.5 602 0.437 308 534 31.28333333 42.85714286 60.54054054 2.347161572 0.35 0.67 0.889952153 20 2023-12-31T23:00:19Z
194 193 102 40 0.43425 323 325 52422 1629 0.43425 309.75 19676 565 0.43325 326 775 0.439 318 784 34.36666667 42.41573034 68.7150838 2.586206897 0.2 0.68 0.678082192 20 2023-12-31T23:00:19Z
195 194 102 98 0.42775 321 306 45204 1367 0.42875 303.25 19226 653 0.4255 300.5 663 0.427 310 623 37.33333333 29.31844888 59.52380952 1.649746193 0.26 0.68 0.788235294 20 2023-12-31T23:00:19Z
196 195 100 61 0.43325 322 318 50766 1558 0.431 310 21782 793 0.434 308.25 788 0.4365 302.5 1054 56.33333333 27.7998863 53.63128492 2.575587906 0.21 0.67 0.698823529 19 2023-12-31T23:00:19Z
197 196 100 111 0.43575 322 311 48596 1500 0.436 301 19130 744 0.43875 299 756 0.442 307.5 1200 46.33333333 41.10465116 59.23913043 1.851851852 0.22 0.6 0.659090909 18 2023-12-31T23:00:19Z
198 197 102 10 0.43525 320 329 56344 1890 0.43525 324 25479 914 0.43625 327.5 793 0.434 310.5 802 58.66666667 28.61789514 50 3.128621089 0.41 0.81 0.725118483 20 2023-12-31T23:00:19Z
199 198 96 20 0.43725 319 323 54496 1550 0.4425 320.25 27682 831 0.4395 320.25 789 0.44465 317.5 882 44 30.05714286 52.84090909 3.428571429 0.25 0.66 0.570114943 22 2023-12-31T23:00:19Z
200 199 100 142 0.4355 323 312 38244 1127 0.43875 317.5 22345 858 0.436 316.5 768 0.438 310 973 51.66666667 29.44162437 54.83870968 1.065989848 0.44 0.55 0.747706422 20 2023-12-31T23:00:19Z
201 200 100 87 0.431 321 304 46217 1325 0.4315 294 18840 690 0.43075 307.25 780 0.4385 310 1186 49.83333333 33.14285714 61.875 1.483171706 0.35 0.92 0.777777778 19 2023-12-31T23:00:19Z
202 201 100 44 0.435 321 314 56280 1759 0.434 320 23647 814 0.43575 303.5 705 0.439 324 1348 51.61666667 33.18129989 50.84745763 2.68378063 0.32 0.82 0.623501199 20 2023-12-31T23:00:20Z
203 202 102 16 0.44675 322 320 51618 1302 0.43925 327.75 21621 602 0.443 313.75 537 0.442 324 476 28.15 47.21906924 58.52272727 1.860202931 0.43 0.78 0.755196305 21 2023-12-31T23:00:20Z
204 203 95 2 0.42825 323 310 46876 1561 0.425 317.75 22345 798 0.43025 317.75 576 0.43 318.5 766 47.61666667 30.57996485 52.74725275 0.8 0.31 0.6 0.623556582 21 2023-12-31T23:00:20Z
205 204 98 6 0.442 323 318 50380 1194 0.44325 318.75 23663 709 0.4395 315 705 0.4465 315 1057 57 32.43553009 42.39130435 0.275330396 0.27 0.41 0.769574944 21 2023-12-31T23:00:20Z
206 205 70 1 0.43725 319 309 47937 1447 0.43825 306.25 26099 950 0.437 309.25 694 0.4345 327 651 54.26666667 32.58362168 44.44444444 2.540937324 0.3 0.7 0.493181818 21 2023-12-31T23:00:20Z
207 206 104 32 0.439 321 314 51088 1659 0.4365 318.5 23567 793 0.4415 325 800 0.4445 317.5 998 49.61666667 37.74985722 48.38709677 3.07424594 0.3 0.5 0.703539823 21 2023-12-31T23:00:20Z
208 207 95 42 0.43925 324 314 50557 1794 0.439 311.5 25029 906 0.434 319 821 0.435 311.5 1102 73.33333333 25.17281106 48.31460674 2.708933718 0.31 0.64 0.798657718 21 2023-12-31T23:00:20Z
209 208 84 35 0.4255 320 305 46924 1407 0.42925 306 21268 663 0.4235 305.75 822 0.427 311.5 906 66.15 26.60388464 47.25274725 2.464985994 0.34 0.63 0.637647059 20 2023-12-31T23:00:20Z
210 209 100 64 0.43525 423 316 46313 1384 0.4345 322.5 20528 891 0.4345 308.25 704 0.432 315 990 48.66666667 37.06253586 62.85714286 2.301369863 0.24 0.62 0.523041475 18 2023-12-31T23:00:20Z
211 210 102 27 0.4335 319 317 54372 1686 0.43225 303.5 23164 672 0.43275 324 684 0.4335 310 987 58.16666667 31.875 57.37704918 3.337236534 0.32 0.89 0.823943662 22 2023-12-31T23:00:20Z
212 211 99 18 0.44275 323 318 60508 1626 0.4395 315.75 23358 693 0.444 317.75 763 0.45 342 914 38.7 35.11576626 53.73134328 3.396809058 0.37 0.73 0.782909931 20 2023-12-31T23:00:21Z
213 212 100 32 0.432 324 314 49978 1608 0.43375 312 22246 828 0.4365 315.25 1012 0.442 321.5 1015 63.33333333 27.23138147 51.47928994 2.716763006 0.4 0.74 0.661137441 20 2023-12-31T23:00:21Z
214 213 100 46 0.43175 323 318 45044 1508 0.427 314 20576 719 0.4305 318.75 728 0.428 302.5 970 51.11666667 40.11560694 52.30769231 2.132312739 0.43 0.79 0.68321513 20 2023-12-31T23:00:21Z
215 214 98 27 0.433 322 311 48837 1656 0.4355 319 21171 761 0.436 316 822 0.4375 317 1208 57 37.06015891 57.78894472 2.638664513 0.3 0.78 0.998842593 22 2023-12-31T23:00:21Z
216 215 104 79 0.4355 320 310 47165 1540 0.438 314 22634 892 0.4365 309.25 746 0.444 325.5 1250 50.33333333 38.71693866 61.17021277 2.785838654 0.29 0.69 0.840546697 20 2023-12-31T23:00:21Z
217 216 102 30 0.452 319 326 57630 1617 0.44675 328.25 28293 828 0.448 318.25 782 0.447 1800 931 51.33333333 42.56410256 46.44808743 0.171722954 0.22 0.5 0.737931034 21 2023-12-31T23:00:21Z
218 217 102 50 0.44 319 344 61303 1864 0.438 314.25 25176 721 0.4445 328 840 0.4335 319 1130 59.83333333 24.66063348 48.63387978 3.723404255 0.24 0.79 0.660592255 20 2023-12-31T23:00:21Z
219 218 102 64 0.4445 323 321 52952 1516 0.44725 327.75 22666 777 0.4435 316.75 791 0.444 319 994 41.66666667 34.92957746 52.17391304 2.866593164 0.15 0.62 0.745495495 20 2023-12-31T23:00:21Z
220 219 100 37 0.4355 323 316 48966 1566 0.4305 315 18406 721 0.4325 316.75 754 0.43 313.5 984 61.83333333 27.49262537 54.03726708 2.327005511 0.23 0.65 0.84494382 20 2023-12-31T23:00:21Z
221 220 105 30 0.43475 324 325 52727 1729 0.43575 323 23744 824 0.4325 311.75 737 0.436 310.5 861 45.01666667 35.68985177 51.12359551 3.18627451 0.27 1.51 0.853080569 20 2023-12-31T23:00:21Z
222 221 103 47 0.4295 322 312 43548 1402 0.42675 308 19323 707 0.42925 305.75 714 0.436 319 1186 59.33333333 35.71844095 63.06818182 2.19017094 0.31 0.63 0.769784173 20 2023-12-31T23:00:22Z
223 222 104 16 0.42875 321 301 45349 1577 0.429 307.75 20962 662 0.43425 321 735 0.437 312 896 44.7 34.20899008 33.33333333 2.827466821 0.35 0.78 0.773148148 21 2023-12-31T23:00:22Z
224 223 104 92 0.4445 319 326 53129 1575 0.45025 324 26010 677 0.44725 324.5 676 0.4425 319 840 34 22.39641657 52.12121212 1.149425287 0.46 0.82 0.657471264 20 2023-12-31T23:00:22Z
225 224 108 29 0.43225 319 324 54274 1564 0.43375 317.5 21396 628 0.4355 324.5 808 0.4405 328.5 1218 53.33333333 30.00573723 45.40540541 3.294797688 0.37 0.62 0.662068966 20 2023-12-31T23:00:22Z
226 225 98 43 0.447 322 304 48339 1288 0.4475 312.25 20673 763 0.4465 310 670 0.4545 326 1253 35 34.54947485 54.54545455 1.767955801 0.45 0.88 0.733924612 19 2023-12-31T23:00:22Z
227 226 104 38 0.43425 324 323 52100 1768 0.42825 307.75 20207 822 0.435 322 1040 0.433 313 1166 66.16666667 38.08724832 55.55555556 2.517162471 0.29 0.85 0.776978417 20 2023-12-31T23:00:22Z
228 227 103 57 0.43025 321 315 49239 1950 0.4285 315.25 22474 901 0.4295 314.5 779 0.44 323.5 1054 41.55 32.21320973 49.45652174 2.549246813 0.38 0.62 0.694252874 21 2023-12-31T23:00:22Z
229 228 109 41 0.438 320 306 47438 1530 0.43575 304.25 20440 782 0.44125 309 840 0.4395 307 1326 49.33333333 43.93939394 67.0212766 2.863559798 0.38 0.86 0.868965517 20 2023-12-31T23:00:22Z
230 229 108 26 0.43375 323 306 48274 1398 0.43 308.25 23084 716 0.434 307.5 628 0.437 309 662 38.11666667 39.39220183 56.98324022 2.920560748 0.27 0.74 0.739030023 21 2023-12-31T23:00:22Z
231 230 108 39 0.4445 321 320 48660 1608 0.445 321.5 21396 712 0.4425 320.25 668 0.437 317 654 37.45 28.66741321 58.38150289 3.00982801 0.28 0.55 0.862790698 20 2023-12-31T23:00:22Z
232 231 102 35 0.433 319 320 50750 1587 0.43525 320.5 26573 788 0.43325 313.5 770 0.4365 320 1354 69.83333333 23.31969608 46.11111111 3.442340792 0.32 0.56 0.693548387 20 2023-12-31T23:00:23Z
233 232 108 31 0.436 322 314 48602 1692 0.43025 310 21622 808 0.43575 311.5 826 0.4385 309 816 33.33333333 44.70655926 57.62711864 3.352601156 0.31 0.67 0.924137931 22 2023-12-31T23:00:23Z
234 233 108 87 0.44825 323 313 49673 1377 0.44375 320.5 20512 623 0.4495 314.25 821 0.45 310 802 43.1 37.40661686 60.86956522 2.761550717 0.42 0.97 0.943262411 20 2023-12-31T23:00:23Z
235 234 98 50 0.4305 323 312 46201 1432 0.42875 303.75 19387 618 0.4285 308.25 606 0.433 325.5 1092 52.18333333 23.9906378 40.33149171 2.390670554 0.39 0.86 0.796296296 20 2023-12-31T23:00:23Z
236 235 106 19 0.43475 319 318 51272 1320 0.43525 307.25 20690 632 0.44275 317.25 723 0.4395 320 906 47.66666667 40.67121729 66.86046512 3.183962264 0.38 0.87 0.692307692 20 2023-12-31T23:00:23Z
237 236 101 117 0.438 319 318 49110 1526 0.436 311.5 21589 864 0.43875 317.5 878 0.438 311.5 1032 54.16666667 37.03703704 54.65116279 2.790697674 0.36 0.79 0.712643678 19 2023-12-31T23:00:23Z
238 237 100 50 0.427 319 316 53419 1572 0.42325 307.5 22666 684 0.42525 307 582 0.427 310.5 868 64.78333333 27.84810127 44.91017964 3.273809524 0.4 0.66 0.612903226 19 2023-12-31T23:00:23Z
239 238 105 56 0.42125 321 305 42439 1312 0.42175 303.5 18326 648 0.41575 291.5 724 0.418 302.5 732 47.83333333 36.20791494 61.45251397 2.837290098 0.31 0.69 0.788732394 18 2023-12-31T23:00:23Z
240 239 102 47 0.42575 321 310 41732 1506 0.425 305.75 19628 791 0.566333333 409.3333333 716 0.4305 303 850 53.5 40.47619048 62.3655914 2.705882353 0.41 0.66 0.813364055 20 2023-12-31T23:00:23Z
241 240 102 16 0.43025 323 308 42310 1330 0.42925 315.5 21686 758 0.4285 306.5 800 0.4285 301.5 819 58.83333333 40.0234055 54.18994413 2.900232019 0.39 0.71 0.845454545 20 2023-12-31T23:00:23Z
242 241 107 71 0.4495 320 318 49384 1692 0.449 327.5 25962 842 0.45075 316.5 761 0.453 326.5 994 48.5 28.7394958 49.7382199 3.174603175 0.4 0.74 0.827956989 20 2023-12-31T23:00:24Z
243 242 104 40 0.45525 328 324 51875 1813 0.45725 320.5 24177 861 0.46 324 898 0.463 316.5 1088 53.83333333 34.01950163 60.82474227 3.249475891 0.42 0.94 0.633832976 20 2023-12-31T23:00:24Z
244 243 107 15 0.43025 324 313 46008 1526 0.42275 297.5 20657 775 0.43325 308.75 754 0.4325 307.5 1238 55.2 30.50749712 56.81818182 3.550295858 0.31 0.36 0.874709977 20 2023-12-31T23:00:24Z
245 244 106 30 0.44675 319 323 55839 1703 0.44325 318.5 23245 674 0.44975 325.75 679 0.4555 331.5 1144 49.33333333 33.60210538 63.07692308 4.371584699 0.38 0.71 0.623287671 22 2023-12-31T23:00:24Z
246 245 105 92 0.4365 325 317 46097 1522 0.4305 306 20866 905 0.42675 309 752 0.423 304.5 882 47.66666667 33.19977104 47.84946237 2.591283863 0.35 0.74 0.705882353 21 2023-12-31T23:00:24Z
247 246 80 21 0.435 319 310 46056 1330 0.43225 313.75 22490 672 0.43575 305.5 690 0.44 310 1246 54.66666667 28.26086957 53.55191257 2.688486265 0.25 0.83 0.630841121 19 2023-12-31T23:00:24Z
248 247 106 52 0.418 320 312 48853 1573 0.4215 303.5 20464 686 0.42 308.5 802 0.427 317 1306 55 30.75571178 54.18994413 3.275862069 0.33 0.61 0.7470726 22 2023-12-31T23:00:24Z
249 248 108 37 0.4265745 324 316 52342 1736 0.42825 313.5 21059 793 0.4295 322.25 1020 0.428 319 1026 74 30.58280439 59.89010989 3.333333333 0.35 0.74 0.683333333 20 2023-12-31T23:00:24Z
250 249 106 43 0.44225 322 320 47840 1616 0.4445 309.75 22522 950 0.43925 312.5 774 0.446 319.5 1008 50.16666667 40.75144509 43.24324324 2.923076923 0.46 0.76 0.731707317 20 2023-12-31T23:00:24Z
251 250 109 70 0.4345 321 306 47760 1498 0.43875 314.5 19451 698 0.434 308.75 735 0.4405 312.5 770 45.83333333 35.18621456 61.05263158 3.191489362 0.23 0.73 0.953917051 18 2023-12-31T23:00:24Z
252 251 108 51 0.439 322 307 48821 1596 0.435 309.25 19805 763 0.4415 311 718 0.4485 326 606 52.16666667 43.82955174 67.20430108 3.852596315 0.35 0.85 0.941724942 19 2023-12-31T23:00:25Z
253 252 104 39 0.4325 321 314 43998 1424 0.43325 314.5 18712 782 0.43275 310.25 705 0.441 318 644 58.66666667 42.84064665 68.64864865 2.415966387 0.23 0.73 0.967592593 20 2023-12-31T23:00:25Z
254 253 100 46 0.42475 321 311 47985 1577 0.419 308.25 18744 738 0.42925 313.75 826 0.4265 301.5 1116 59.66666667 30.7735426 49.72972973 2.824267782 0.39 0.96 0.70521542 19 2023-12-31T23:00:25Z
255 254 95 15 0.44675 319 309 46088 1176 0.448 302.75 22602 665 0.44675 308.75 648 0.446 299 1127 66.5 32.13483146 54.54545455 2.419808666 0.4 0.9 0.587973274 21 2023-12-31T23:00:25Z
256 255 103 108 0.4185 320 312 46040 1628 0.4225 309.75 17908 814 0.422 302.25 819 0.42 286.5 1155 61.16666667 33.03834808 50.85714286 2.34939759 0.38 1.01 0.624676242 18 2023-12-31T23:00:25Z
257 256 106 35 0.4345 320 315 47937 1384 0.43925 306 21992 761 0.437 312.5 847 0.4455 178.5 749 54.16666667 32.94930876 58.01104972 2.958579882 0.46 0.9 0.922897196 18 2023-12-31T23:00:25Z
258 257 104 45 0.43675 320 310 47503 1400 0.43625 308.25 19644 644 0.43575 310.75 789 0.441 314.5 952 50.08333333 28.30613393 52.68817204 2.888503755 0.38 0.79 0.944567627 19 2023-12-31T23:00:25Z
259 258 104 16 0.44525 320 314 44995 1502 0.44525 318.25 21460 866 0.44175 315 816 0.4475 320 980 58.16666667 38.18696884 50.50505051 2.717391304 0.42 0.93 0.769230769 20 2023-12-31T23:00:25Z
260 259 102 39 0.44175 324 310 46410 1484 0.44425 310.75 19194 714 0.4375 317.75 847 0.4405 326 906 37.83333333 33.03964758 56.31578947 2.905982906 0.33 0.8 0.751662971 19 2023-12-31T23:00:25Z
261 260 106 24 0.43675 319 305 49609 1656 0.43875 314.25 23326 665 0.433 304.25 779 0.4345 302.5 1071 46 27.9478458 52.84090909 3.05997552 0.32 0.79 0.618721461 20 2023-12-31T23:00:25Z
262 261 104 31 0.44225 325 313 48773 1580 0.594 426.6666667 21948 866 0.4435 313.5 849 0.4405 307.5 889 52.33333333 41.57923799 62.37113402 2.936549554 0.35 0.64 0.730088496 19 2023-12-31T23:00:26Z
263 262 103 47 0.43275 319 316 48902 1563 0.4265 314.75 22490 873 0.4325 321 868 0.4355 310 1144 57 34.20902342 65 3.406466513 0.26 0.61 0.650574713 20 2023-12-31T23:00:26Z
264 263 106 37 0.441 322 306 46972 1575 0.4345 305.75 22634 842 0.43625 307 828 0.436 311.5 637 46.83333333 35.31122746 60.97560976 3.105590062 0.34 0.64 0.862302483 20 2023-12-31T23:00:26Z
265 264 102 37 0.4245 322 307 48419 1514 0.422 297.75 20158 726 0.42725 309.75 875 0.4255 321 1036 54.16666667 33.60137852 55.11363636 2.89017341 0.2 0.75 0.82038835 20 2023-12-31T23:00:26Z
266 265 106 64 0.4485 324 324 54239 1876 0.4475 322.75 25656 1031 0.4525 328.75 828 0.4575 326.5 1043 65.5 31.82308522 54.27135678 3.157894737 0.2 0.63 0.956018519 20 2023-12-31T23:00:26Z
267 266 107 29 0.433 324 302 47551 1654 0.43375 302 20158 835 0.42975 295 779 0.4315 308 1239 57 42.25988701 56.31578947 1.685393258 0.21 0.67 0.72985782 19 2023-12-31T23:00:26Z
268 267 103 90 0.4435 319 308 50187 1414 0.443 312.75 21749 658 0.44375 309.5 728 0.443 305.5 886 59.33333333 29.92081448 21.10552764 3.067484663 0.31 0.63 0.609865471 20 2023-12-31T23:00:26Z
269 268 100 42 0.4585 320 312 47069 1404 0.456 309.5 21043 747 0.4555 304.25 698 0.457 307.5 984 31 39.06926407 67.77777778 3.409090909 0.32 0.78 0.986754967 21 2023-12-31T23:00:26Z
270 269 108 32 0.454 319 306 48387 1410 0.45075 319.25 27062 859 0.4495 314.25 681 0.4575 1774 1400 34.66666667 33.98656215 51.35135135 3.431101273 0.35 0.66 0.611353712 20 2023-12-31T23:00:26Z
271 270 102 27 0.437 320 310 50300 1687 0.43575 317 24852 1040 0.4325 315.75 798 0.43 304.5 819 62.16666667 29.42857143 40.11299435 2.98136646 0.31 0.75 0.748267898 20 2023-12-31T23:00:26Z
272 271 108 40 0.428 323 302 49271 1293 0.42475 304.5 21412 784 0.42425 301.75 686 0.436 312 910 52.18333333 33.80447585 49.06832298 2.841918295 0.36 0.65 0.758949881 20 2023-12-31T23:00:27Z
273 272 109 23 0.43125 322 316 48242 1479 0.432075 306.5 22522 704 0.43525 318.75 760 0.434 315.5 794 57.03333333 34.0546697 55.97826087 2.603613177 0.28 0.63 0.723809524 20 2023-12-31T23:00:27Z
274 273 109 79 0.45 321 327 56248 1549 0.446 326 25480 774 0.441 319 863 0.4395 309 1004 48.68333333 31.90770962 62.42774566 2.923331495 0.24 0.69 0.749425287 20 2023-12-31T23:00:27Z
275 274 104 92 0.4395 317 315 47607 1496 0.436 301.5 23792 660 0.444 317.25 814 0.4445 312 1060 58.16666667 24.06892718 49.45054945 2.023608769 0.38 0.76 0.670533643 20 2023-12-31T23:00:27Z
276 275 104 111 0.42475 321 316 46088 1586 0.42325 295 19049 868 0.42375 305.75 672 0.428 310 760 63 33.55184744 50 2.869518138 0.23 0.88 0.545673077 19 2023-12-31T23:00:27Z
277 276 103 26 0.452 319 316 48907 1578 0.4455 313.75 23004 726 0.45125 326 866 0.451 310.5 931 61.5 38.35242771 60.33519553 3.152173913 0.31 0.88 0.61790393 20 2023-12-31T23:00:27Z
278 277 105 136 0.4343335 319 316 50702 1488 0.431 313.5 23470 752 0.4385 327 840 0.441 303 861 65.83333333 26.22196665 45.76271186 2.824858757 0.18 0.67 0.662870159 20 2023-12-31T23:00:27Z
279 278 104 30 0.4485 324 309 50091 1536 0.4495 321.5 24531 929 0.44825 317.25 943 0.4555 310 752 62.66666667 27.42474916 56.21621622 3.136629452 0.46 0.74 0.958997722 20 2023-12-31T23:00:27Z
280 279 106 128 0.42725 324 308 45831 1631 0.429 309.75 20271 763 0.42875 301 912 0.4275 310 819 56.16666667 31.84421535 57.37704918 2.521008403 0.34 0.74 0.858513189 20 2023-12-31T23:00:27Z
281 280 102 96 0.432 321 309 52744 1592 0.4335 309.75 20158 612 0.43825 304.25 724 0.445 319.5 1127 51.55 31.10465116 50.57471264 3.419811321 0.37 0.66 0.871853547 20 2023-12-31T23:00:27Z
282 281 102 149 0.43775 321 310 48821 1640 0.43875 309 21396 803 0.43675 312 684 0.4405 304 990 50.26666667 38.50354997 54.78723404 3.517877739 0.32 0.94 0.995305164 23 2023-12-31T23:00:28Z
283 282 104 60 0.44075 320 310 49882 1712 0.4375 302.5 22650 861 0.44375 316.5 840 0.4505 311 956 69.83333333 25.04145937 53.67231638 2.824858757 0.34 0.73 0.744186047 20 2023-12-31T23:00:28Z
284 283 103 20 0.43025 324 316 52302 1549 0.43075 319.25 22795 802 0.4315 309.5 732 0.436 304 1652 69.11666667 33.48623853 57.22222222 3.058280439 0.61 0.59 0.836065574 23 2023-12-31T23:00:28Z
285 284 108 103 0.44 320 306 43975 1435 0.43625 310.75 20754 668 0.4395 306.75 814 0.443 314 1354 54.98333333 33.29519451 50.86705202 2.728285078 0.41 0.98 0.81264637 20 2023-12-31T23:00:28Z
286 285 105 23 0.432 319 304 46394 1774 0.43025 306.75 21155 882 0.4295 298.5 817 0.4295 311.5 959 62.83333333 30.4246655 55.23255814 3.548574753 0.3 0.93 0.744186047 20 2023-12-31T23:00:28Z
287 286 108 125 0.43925 319 304 46635 1120 0.43975 308 21766 817 0.44125 303.75 598 0.437 304 1088 59.66666667 31.99320498 53.47593583 2.75175644 0.25 0.71 0.670588235 20 2023-12-31T23:00:28Z
288 287 107 35 0.43825 319 300 51790 1528 0.4315 305.25 25801 1004 0.43525 306.25 866 0.437 305.5 978 66.16666667 28.30080367 45.05494505 3.866128102 0.24 0.76 0.581589958 20 2023-12-31T23:00:28Z
289 288 106 110 0.41525 319 295 54994 1815 0.4165 303.5 20753 751 0.41825 305 751 0.422 311.5 1082 70 25.33883324 46.59090909 3.244837758 0.32 0.67 0.717761557 19 2023-12-31T23:00:28Z
290 289 105 100 0.42275 322 302 47567 1617 0.42375 311.25 20882 940 0.42375 299 719 0.419 286 812 59.5 28.04129794 50.84745763 2.978723404 0.31 0.79 0.70990566 20 2023-12-31T23:00:28Z
291 290 90 133 0.4425 319 318 52132 1694 0.4475 302.5 24274 756 0.445 316.75 1020 0.443 306.5 724 64.5 31.76996092 42.47311828 2.547065338 0.3 0.57 0.74049217 20 2023-12-31T23:00:28Z
292 291 105 21 0.425 321 308 50959 1832 0.42425 306.25 24081 1186 0.42075 300.5 973 0.426 306 938 72.5 28.74423963 48.91304348 3.093922652 0.29 0.61 0.822323462 22 2023-12-31T23:00:29Z
293 292 98 72 0.43125 322 313 49078 1768 0.4335 312.25 25302 1055 0.43575 309.5 845 0.445 322 1082 71.5 27.73841962 55.67567568 3.989361702 0.4 0.61 0.623093682 20 2023-12-31T23:00:29Z
294 293 101 28 0.439 319 312 45092 1498 0.439 314.75 20528 686 0.43875 309 635 0.437 305.5 808 54.5 35.06721216 63.27683616 1.776504298 0.18 0.46 0.768888889 22 2023-12-31T23:00:29Z
295 294 102 17 0.4435 323 313 52551 1687 0.4435 305.75 20464 772 0.4425 314 721 0.4495 308.5 802 61.71666667 28.5304248 56.41025641 2.997601918 0.28 0.78 0.903153153 23 2023-12-31T23:00:29Z
296 295 108 71 0.4475 323 306 49239 1564 0.4475 304 19676 721 0.451 306 768 0.4545 313 1088 58.16666667 37.49309774 65.0273224 2.18579235 0.34 0.73 0.662921348 18 2023-12-31T23:00:29Z
297 296 101 28 0.436 320 318 53836 1785 0.43525 318.5 23679 775 0.43225 313.25 796 0.4355 322 1208 57.31666667 26.86397268 47.72727273 3.394255875 0.26 0.68 0.832167832 18 2023-12-31T23:00:29Z
298 297 107 45 0.4325 323 312 45478 1502 0.44075 318.25 23920 950 0.43675 303.25 718 0.4375 307.5 1197 59.66666667 26.98504028 50.56179775 2.7479092 0.3 0.74 0.827586207 20 2023-12-31T23:00:29Z
299 298 104 113 0.44925 327 313 45895 1654 0.44325 315.5 25415 935 0.4555 315 709 0.456 329 1340 58.16666667 35.20494104 63.97849462 2.699530516 0.3 0.6 0.796338673 25 2023-12-31T23:00:29Z
300 299 105 38 0.42725 325 301 48066 1696 0.42475 304.75 20422 763 0.4235 302 756 0.432 307 1281 60.33333333 33.29473075 51.95530726 3.282399547 0.22 0.55 0.915331808 20 2023-12-31T23:00:29Z
301 300 105 130 0.45175 318 318 51859 1638 0.4455 311.5 23936 709 0.4495 322.75 766 0.453 312.5 1264 56 33.22072072 60.79545455 2.795208214 0.22 0.75 0.629711752 22 2023-12-31T23:00:29Z
302 301 90 104 0.4295 317 322 52406 1549 0.4285 319.75 22104 722 0.4375 339.5 718 0.42 333 1372 48.33333333 20.58993638 40.55555556 2.728285078 0.38 0.94 0.655502392 22 2023-12-31T23:00:30Z
303 302 96 17 0.43475 317 326 51522 1547 0.429 317.5 22988 678 0.4355 320.75 817 0.451 337.5 1141 75.66666667 26.18368511 47.72727273 2.66591038 0.24 0.74 0.675862069 20 2023-12-31T23:00:30Z
304 303 104 73 0.4445 320 317 47808 1552 0.44575 324.25 29225 962 0.446 318.25 700 0.454 316.5 1400 75 34.83941208 52.87958115 3.664921466 0.31 0.81 0.607843137 20 2023-12-31T23:00:30Z
305 304 95 64 0.44075 325 311 52468 1626 0.438 312.5 19950 637 0.44375 315.25 784 0.446 317.5 1106 57.16666667 32.43395166 45.94594595 3.395784543 0.4 0.9 0.641891892 20 2023-12-31T23:00:30Z
306 305 106 125 0.43225 321 299 48692 1519 0.4335 299.25 19756 642 0.42925 295.75 726 0.43 298.5 718 55.28333333 37.621498 53.33333333 3.142536476 0.34 0.85 0.829383886 21 2023-12-31T23:00:30Z
307 306 98 115 0.442 322 322 52518 1727 0.44525 321 23647 976 0.444 314 976 0.4445 320.5 1092 66.83333333 28.35400225 51.1627907 2.469135802 0.2 0.46 0.67816092 22 2023-12-31T23:00:30Z
308 307 95 43 0.4375 322 312 53499 1519 0.435 305 21010 768 0.43675 309.5 754 0.445 315.5 756 65.38333333 32.58426966 48.40425532 2.249598286 0.3 0.57 0.762352941 20 2023-12-31T23:00:30Z
309 308 88 103 0.445 320 312 54512 1913 0.43725 313 21380 696 0.4425 311.75 877 0.4505 326 1197 68.25 25.97844583 48.82352941 2.305159166 0.27 0.55 0.694382022 20 2023-12-31T23:00:30Z
310 309 104 36 0.437 323 309 44529 1426 0.44075 311.75 21775 884 0.4375 303.5 780 0.4475 315.5 760 70 35.54046406 63.44086022 3.064066852 0.22 0.51 0.807962529 22 2023-12-31T23:00:30Z
311 310 100 96 0.43675 322 320 53852 1976 0.44 318.5 26605 1122 0.438 304.25 877 0.4405 313 864 68.5 25.27901786 38.79781421 4.340175953 0.24 0.68 0.680434783 25 2023-12-31T23:00:30Z
312 311 102 40 0.44 319 311 52438 1648 0.43875 312.75 24161 774 0.44 306.25 766 0.438 307.5 1116 61 32.92682927 50 4.284037559 0.38 0.99 0.704651163 20 2023-12-31T23:00:31Z
313 312 108 24 0.42825 321 308 43902 1477 0.426 305 20432 761 0.4315 311 732 0.4275 312.5 746 38.5 37.66233766 58.88888889 3.546099291 0.36 0.86 0.790754258 20 2023-12-31T23:00:31Z
314 313 106 118 0.44025 323 310 50509 1746 0.44175 308.25 23502 886 0.438 314.75 751 0.445 309.5 878 41.66666667 38.69148336 56.08465608 2.991944764 0.41 0.57 0.737668161 21 2023-12-31T23:00:31Z
315 314 100 54 0.4305 324 314 47937 1556 0.43 308.25 19403 882 0.43125 312.75 796 0.4285 303 1320 57 38.08695652 61.4973262 2.857142857 0.25 0.5 0.877880184 20 2023-12-31T23:00:31Z
316 315 102 122 0.43475 323 314 48708 1703 0.43725 309.5 22490 910 0.4385 309 758 0.4455 312 704 60.83333333 31.38357705 56.38297872 2.777777778 0.31 0.61 0.76056338 20 2023-12-31T23:00:31Z
317 316 98 26 0.43675 321 315 49834 1521 0.43075 313 22200 735 0.4375 310.75 688 0.441 311.5 1078 51.35 30.01132503 45.55555556 2.98102981 0.4 0.58 0.708333333 19 2023-12-31T23:00:31Z
318 317 106 97 0.441 324 324 55251 2039 0.4395 324.25 23015 980 0.449 320.25 987 0.4545 309 1018 60.83333333 28.11135371 56.32183908 3.770197487 0.11 0.53 0.776315789 20 2023-12-31T23:00:31Z
319 318 87 55 0.4085 321 312 46740 1648 0.40775 311.75 17683 802 0.41075 311 835 0.4115 300.5 844 54.5 23.70458606 41.30434783 2.218524681 0.15 0.41 0.680387409 19 2023-12-31T23:00:31Z
320 319 88 152 0.4345 322 320 50654 1508 0.42875 315.75 17812 744 0.43 307.5 732 0.4305 321 847 60.83333333 26.27070246 46.44808743 1.912568306 0.025 0.57 0.756818182 19 2023-12-31T23:00:31Z
321 320 103 25 0.4265 319 294 46780 1507 0.424625 305.25 22136 779 0.42425 306.75 765 0.428 311.5 1295 58.5 24.52830189 48.35164835 3.436018957 0.29 0.59 0.699769053 20 2023-12-31T23:00:31Z
322 321 83 103 0.44075 319 314 48926 1701 0.44425 317.75 25762 660 0.44375 311.5 714 0.453 326.5 1057 57.16666667 24.5883021 36.55913978 3.470588235 0.36 0.65 0.730088496 20 2023-12-31T23:00:32Z
323 322 90 26 0.578333333 318 411 57936 1932 0.4335 313.75 22843 940 0.43025 299 863 0.433 316 1228 69.33333333 24.61273666 49.04458599 2.746893394 0.31 0.58 0.740909091 19 2023-12-31T23:00:32Z
324 323 99 22 0.44525 319 321 47969 1500 0.454 316.75 23920 738 0.4525 310.75 716 0.437 316.5 1400 52.33333333 33.0255296 55.37634409 3.327877796 0.3 0.8 0.839622642 20 2023-12-31T23:00:32Z
325 324 106 77 0.445 317 314 49271 1656 0.43925 304.5 23197 733 0.44625 309.25 859 0.453 311.5 1330 48.16666667 37.62827822 76.78571429 3.052064632 0.23 0.72 0.941309255 20 2023-12-31T23:00:32Z
326 325 100 35 0.4385 320 306 51297 1587 0.44275 301 23197 807 0.445 315.5 887 0.446 317.5 1166 54.83333333 30.98987627 58.42696629 3.65630713 0.49 0.75 0.716553288 19 2023-12-31T23:00:32Z
327 326 108 77 0.432275 319 305 47390 1508 0.42875 426.25 20087 716 0.42725 300.5 749 0.4285 306.5 938 40.66666667 44.77521264 66.25 2.727272727 0.15 0.94 0.633333333 20 2023-12-31T23:00:32Z
328 327 108 19 0.4355 319 305 49516 1475 0.42925 309.5 22908 730 0.42925 303.5 688 0.4335 294.5 1064 61 39.68521641 55.97826087 2.544378698 0.25 0.89 0.674584323 20 2023-12-31T23:00:32Z
329 328 98 129 0.4355 320 320 50606 1750 0.439 313 23518 821 0.43675 315 882 0.437 305.5 917 52.83333333 35.2072686 63.27683616 3.057757644 0.41 0.77 0.977011494 20 2023-12-31T23:00:32Z
330 329 88 28 0.43225 320 309 51988 1764 0.4295 304.25 21750 863 0.434 307.75 723 0.4365 312.5 812 51.95 26.81924883 42.69662921 2.169869808 0.35 0.65 0.687782805 19 2023-12-31T23:00:32Z
331 330 107 104 0.427 320 300 47197 1600 0.42625 298.75 22200 840 0.42575 295.5 688 0.4295 300 1074 47.81666667 36.63024727 55.0802139 2.750275028 0.29 0.7 0.712962963 21 2023-12-31T23:00:32Z
332 331 90 25 0.4315 320 310 51972 1566 0.4325 318.75 22215 822 0.43475 320 950 0.4385 322.5 987 68 25.84841629 50.26455026 3.246376812 0.3 0.79 0.954022989 18 2023-12-31T23:00:33Z
333 332 104 109 0.4575 322 325 58000 1773 0.45475 343.25 30238 1060 0.4535 328.25 880 0.4665 334 1096 52.76666667 31.97316937 55.78947368 3.395585739 0.24 0.68 0.88172043 20 2023-12-31T23:00:33Z
334 333 109 44 0.41725 318 306 42150 1524 0.42075 302.25 20930 775 0.4175 303 541 0.417 316 668 42.16666667 44.24242424 55.74712644 2.631578947 0.33 0.7 0.825775656 19 2023-12-31T23:00:33Z
335 334 108 112 0.445 319 322 60476 1748 0.442 317.5 25263 795 0.44575 314.5 635 0.458 311 679 35.9 29.59912136 51.61290323 4.154809334 0.36 0.78 0.895591647 19 2023-12-31T23:00:33Z
336 335 67 44 0.453 320 317 60202 1953 0.44975 306.25 25190 943 0.45125 310.25 961 0.4565 327.5 1312 49.83333333 22.49718785 44.31818182 2.490096208 0.24 0.71 0.582417582 20 2023-12-31T23:00:33Z
337 336 102 11 0.429 317 308 48982 1598 0.422 310.5 27457 840 0.43025 308.75 761 0.4445 310.5 1064 66.83333333 30.65268065 54.80225989 3.701492537 0.32 0.7 0.634482759 22 2023-12-31T23:00:33Z
338 337 99 103 0.43825 319 310 49962 1535 0.438 309 25238 852 0.4435 317.25 664 0.4415 328.5 1544 69.5 37.78647289 57.80346821 3.795284646 0.29 0.7 0.667447307 22 2023-12-31T23:00:33Z
339 338 95 26 0.44725 319 324 57052 2044 0.444875 325.75 24708 1017 0.44775 324 990 0.4475 327.5 1270 64.33333333 33.29652126 54.89130435 3.218645949 0.44 0.83 0.80778032 20 2023-12-31T23:00:33Z
340 339 104 38 0.4385 321 319 50975 1631 0.43825 320.5 22104 833 0.43775 315 824 0.441 302 1306 58.21666667 33.5864486 55.81395349 2.97691373 0.2 0.61 0.706546275 20 2023-12-31T23:00:33Z
341 340 108 105 0.45175 319 322 56537 1774 0.45325 318.5 26187 793 0.454 327.25 859 0.4615 312.5 844 36.45 38.58607663 53.36787565 3.303471445 0.35 0.71 0.848214286 22 2023-12-31T23:00:33Z
342 341 104 54 0.43825 320 312 50139 1788 0.436 319.75 22457 887 0.437 316.5 908 0.4335 318.5 1036 53.83333333 34.49419569 57.07070707 2.985074627 0.44 0.73 0.860986547 20 2023-12-31T23:00:34Z
343 342 90 50 0.43175 321 312 49898 1605 0.43 306 22474 872 0.4355 310 738 0.4255 299.5 1309 53.9 29.87238979 44 2.505827506 0.05 0.28 0.589201878 20 2023-12-31T23:00:34Z
344 343 108 96 0.4445 323 322 49207 1356 0.443 316.75 21284 793 0.44425 317.75 749 0.4405 318 875 51.78333333 46.36015326 55.02645503 2.49031544 0.332 0.78 0.779775281 20 2023-12-31T23:00:34Z
345 344 100 15 0.43975 321 319 53547 1804 0.4405 317 21943 826 0.4385 312.5 863 0.4415 307 1285 62.33333333 28.39931153 59.25925926 2.367242482 0.3 0.7 0.857471264 20 2023-12-31T23:00:34Z
346 345 104 17 0.4385 321 313 47101 1503 0.4385 312 19498 707 0.43925 313 833 0.4355 309.5 1170 52.7 28.92423366 46.85714286 2.8713418 0.26 0.7 0.776523702 20 2023-12-31T23:00:34Z
347 346 109 88 0.42 320 312 45027 1636 0.41625 313 18776 735 0.41725 310.5 872 0.4255 322.5 1774 63.78333333 31.37026239 58.52272727 2.764423077 0.23 0.69 0.694581281 20 2023-12-31T23:00:34Z
348 347 106 27 0.436 NULL 312 53579 1771 0.4335 309.5 20448 670 0.431 305.25 877 0.4365 310 1421 54.5 33.06497987 49.41176471 3.416149068 0.4 0.72 0.670644391 20 2023-12-31T23:00:34Z
349 348 108 141 0.443 319 320 53692 1762 0.44175 309.5 24451 740 0.44175 308.75 768 0.445 307.5 1502 54.5 27.08449916 56.4516129 3.341013825 0.39 0.61 0.6 21 2023-12-31T23:00:34Z
350 349 88 21 0.43075 322 312 55332 1843 0.4305 317.25 22779 1034 0.4275 312.75 800 0.4455 315.5 1106 74 32.04407208 50 3.185035389 0.32 0.64 0.689252336 20 2023-12-31T23:00:34Z
351 350 96 98 0.43875 321 319 54672 1769 0.44 305.25 22264 990 0.442 324.75 1040 0.4475 304 1106 61.83333333 26.53867871 57.89473684 3.426791277 0.43 0.65 0.70521542 20 2023-12-31T23:00:34Z
352 351 98 22 0.431 321 314 48564 1690 0.4385 308.5 25268 943 0.437 318.75 898 0.447 321.5 1334 57 36.35860542 61.2745098 3.270564916 0.36 0.69 0.774580336 21 2023-12-31T23:00:35Z
353 352 108 50 0.445 321 322 55412 1846 0.4445 328.25 25705 1046 0.44625 325.5 901 0.443 315 1057 64.83333333 27.01181767 47.87878788 3.520691785 0.35 0.54 0.557017544 23 2023-12-31T23:00:35Z
354 353 104 21 0.4485 318 298 48998 1522 0.4535 313.25 28373 959 0.4485 306.5 808 0.458 315.5 844 46.66666667 23.87562465 51.74418605 3.703703704 0.36 0.64 0.785714286 20 2023-12-31T23:00:35Z
355 354 109 126 0.441 320 308 45558 1339 0.43825 314 19692 644 0.4425 305.75 780 0.445 309.5 1302 47.33333333 35.23700742 50.9202454 2.907328892 0.32 0.84 0.751677852 19 2023-12-31T23:00:35Z
356 355 85 13 0.439 318 318 52454 1703 0.43775 307.5 20464 744 0.4435 324.25 774 0.441 311.5 1302 56.65 23.81747357 43.02325581 3.59212051 0.36 0.68 0.820930233 18 2023-12-31T23:00:35Z
357 356 109 42 0.429 320 314 53901 1656 0.43025 315.25 21862 733 0.432 318.25 830 0.4375 314 1194 60.65 21.84971098 48.73417722 2.962962963 0.29 0.82 0.823113208 20 2023-12-31T23:00:35Z
358 357 109 95 0.4345 319 314 49737 1412 0.4355 316.25 21830 742 0.43975 323.5 922 0.437 316 1242 58.86666667 32.4141812 56.83060109 3.185437998 0.29 0.76 0.804651163 20 2023-12-31T23:00:35Z
359 358 109 17 0.44275 318 312 52824 1653 0.445 317.25 22506 684 0.44275 306.75 645 0.4475 320 1158 56.33333333 26.06741573 42.42424242 2.781136638 0.35 0.69 0.617777778 20 2023-12-31T23:00:35Z
360 359 105 59 0.43525 320 310 50268 1656 0.43275 313.25 27424 1139 0.43025 310.25 791 0.446 314 1326 59 26.17255356 49.45652174 3.002309469 0.39 0.67 0.639908257 22 2023-12-31T23:00:35Z
361 360 109 28 0.436 317 315 52302 1682 0.44275 309.75 25576 746 0.4455 307.5 805 0.443 294.5 651 55.66666667 26.54320988 44.76744186 3.064066852 0.44 0.81 0.623831776 20 2023-12-31T23:00:35Z
362 361 105 81 0.43475 321 320 51522 1852 0.437 312.75 28196 957 0.43425 302.75 716 0.437 316.5 948 49.66666667 28.25191289 51.1627907 3.353293413 0.28 0.95 0.70917226 25 2023-12-31T23:00:36Z
363 362 103 30 0.44425 321 315 55312 1643 0.44825 321.25 26846 934 0.45175 315.75 906 0.4595 327.5 896 47.06666667 28.04597701 54.74860335 2.964959569 0.3 0.96 0.741935484 24 2023-12-31T23:00:36Z
364 363 98 126 0.425 320 302 47326 1684 0.42275 306 18503 681 0.424 310.25 822 0.4225 299.5 826 56.26666667 34.06976744 53.71428571 2.55648038 0.29 0.93 0.565320665 21 2023-12-31T23:00:36Z
365 364 104 48 0.446 319 319 48403 1787 0.448 311.75 21573 875 0.44525 318 849 0.4505 317.5 1572 53.5 30.31973539 58.79120879 3.03030303 0.47 0.94 0.709006928 25 2023-12-31T23:00:36Z
366 365 109 112 0.441 321 302 48274 1731 0.43975 302 21525 833 0.44225 308 830 0.446 308.5 1288 38.66666667 31.49915778 65.14285714 2.808988764 0.38 0.7 0.939252336 25 2023-12-31T23:00:36Z
367 366 98 29 0.44125 318 297 48290 1516 0.4405 315 20691 732 0.44675 310.75 800 0.4555 316.5 1278 47.51666667 26.41615255 55.43478261 2.915291529 0.45 0.96 0.663615561 22 2023-12-31T23:00:36Z
368 367 90 98 0.43925 321 310 52357 1687 0.43625 314 22956 730 0.437 311.75 906 0.449 306.5 976 62.8 20.99603848 46.02272727 2.845982143 0.3 1.08 0.570071259 21 2023-12-31T23:00:36Z
369 368 104 17 0.43525 321 311 52031 1659 0.43325 305.75 25882 938 0.441 311.75 819 0.4415 312.5 1547 51.33333333 25.85915493 50.56179775 2.848101266 0.31 0.64 0.653206651 25 2023-12-31T23:00:36Z
370 369 100 109 0.4375 319 320 53290 1703 0.445 311.75 23904 952 0.44 312.5 901 0.4485 314 1428 61.83333333 21.82539683 61.25 2.923976608 0.3 0.92 0.674364896 20 2023-12-31T23:00:36Z
371 370 92 44 0.44075 320 314 58000 2014 0.44825 308 24660 980 0.445 312.75 914 0.447 318.5 1687 63 17.4904943 37.05583756 3.404924044 0.22 0.98 0.570093458 21 2023-12-31T23:00:36Z
372 371 108 116 0.439 320 320 55653 1824 0.44425 320 22522 878 0.4415 317 826 0.447 314.5 1274 54.66666667 27.78088317 56.91489362 2.988378528 0.28 0.73 0.729119639 21 2023-12-31T23:00:37Z
373 372 104 34 0.4235 318 298 44690 1524 0.42425 298.25 21879 957 0.4225 296.75 982 0.4285 300.5 1309 47.5 26.36729994 50.85714286 3.130434783 0.33 0.83 0.622171946 23 2023-12-31T23:00:37Z
374 373 102 114 0.43775 322 308 49223 1701 0.43675 305 25553 905 0.44 310.5 796 0.447 307 1204 45.33333333 26.88290269 57.06521739 3.494467094 0.33 0.81 0.75877193 25 2023-12-31T23:00:37Z
375 374 88 59 0.434 318 303 49078 1638 0.445 312.25 23422 889 0.445 313.75 1026 0.4495 309.5 1526 54 32.56616801 47.97687861 2.719033233 0.34 0.67 0.762124711 20 2023-12-31T23:00:37Z
376 375 102 26 0.429 316 302 49094 1750 0.43425 312.25 21910 914 0.43425 310.5 903 0.4375 293.5 760 49 42.86542923 71.0982659 2.863961814 0.39 0.58 0.495348837 21 2023-12-31T23:00:37Z
377 376 105 75 0.42675 319 306 47165 1680 0.4255 303.25 21380 870 0.42875 304.5 742 0.443 302.5 872 46.83333333 34.31372549 60.11235955 3.592814371 0.37 0.68 0.665178571 21 2023-12-31T23:00:37Z
378 377 104 21 0.4325 323 318 49850 1530 0.42925 307.75 21461 734 0.4335 311 854 0.4475 316 868 43.61666667 34.99152063 50.81081081 3.050847458 0.38 0.66 0.610849057 19 2023-12-31T23:00:37Z
379 378 108 122 0.43875 321 309 53338 1843 0.43775 311 21911 782 0.43425 305 712 0.4395 308 1071 44.31666667 41.41531323 64.04494382 2.444570779 0.3 0.63 0.774336283 22 2023-12-31T23:00:37Z
380 379 106 69 0.4325 322 316 53322 1843 0.4375 317 21911 908 0.4365 315.75 962 0.4365 311 1386 48.16666667 37.44292237 64 2.162162162 0.37 0.71 0.726190476 22 2023-12-31T23:00:37Z
381 380 95 130 0.429 322 312 46956 1594 0.431 297 22458 940 0.4335 308.25 878 0.4325 314 1407 53.66666667 30.65735893 57.22222222 2.352941176 0.38 0.69 0.607981221 20 2023-12-31T23:00:37Z
382 381 94 17 0.439 320 318 56232 2007 0.4425 315 28630 1048 0.445 315.25 978 0.4455 314 1228 54 23.20601852 49.09090909 4.242424242 0.44 0.67 0.587006961 23 2023-12-31T23:00:38Z
383 382 104 126 0.44975 321 314 49448 2030 0.449 313 24467 1090 0.44825 317 1020 0.454 316.5 1228 45.73333333 32.57661748 49.16201117 3.183962264 0.4 0.62 0.735099338 20 2023-12-31T23:00:38Z
384 383 108 28 0.448 321 315 43709 1596 0.449 317.5 24499 985 0.4465 315.25 1069 0.4515 314 1382 55.5 32.25985564 59.45945946 3.081232493 0.37 0.57 0.730337079 20 2023-12-31T23:00:38Z
385 384 109 56 0.4525 320 315 54528 1685 0.45075 312.75 24531 970 0.44975 317.25 970 0.4555 317.5 1712 49.66666667 32.4668435 59.68586387 2.798708288 0.4 0.58 0.870748299 23 2023-12-31T23:00:38Z
386 385 106 42 0.426 318 299 45863 1704 0.42225 300.5 20770 920 0.4235 306.5 875 0.424 293.5 1148 37.16666667 25.56390977 52.60115607 2.643948296 0.34 0.69 0.722477064 21 2023-12-31T23:00:38Z
387 386 107 74 0.424 318 304 46458 1577 0.424 315.25 20770 920 0.42425 302.75 898 0.4195 295.5 1186 54 31.49107657 55.24861878 2.766333137 0.25 0.46 0.752808989 22 2023-12-31T23:00:38Z
388 387 104 30 0.432 319 307 46876 1267 0.42975 313.5 22778 707 0.43325 314 749 0.4385 319 1292 51.16666667 38.32650673 80 2.944640754 0.41 0.67 0.639344262 21 2023-12-31T23:00:38Z
389 388 106 84 0.439 319 310 50589 1379 0.439 318.5 24097 777 0.44325 312.5 751 0.44 304 1281 47.16666667 40.63384267 70.65217391 3.114186851 0.33 0.74 0.619489559 22 2023-12-31T23:00:38Z
390 389 106 26 0.4175 316 296 44610 1368 0.41775 294.75 19789 658 0.4155 297.25 768 0.4185 303.5 987 38.66666667 38.6869871 59.53757225 2.386634845 0.27 0.58 0.714285714 23 2023-12-31T23:00:38Z
391 390 108 120 0.44675 317 300 45751 1440 0.44775 313.5 23342 817 0.44525 314.25 726 0.4495 302.5 864 34.66666667 29.50437318 52.87356322 2.55648038 0.41 0.61 0.693181818 21 2023-12-31T23:00:38Z
392 391 82 25 0.441 317 312 53531 1522 0.439 308.5 29402 980 0.439 312.25 788 0.441 285.5 1309 52 15.17010597 40.76086957 2.696629213 0.32 0.9 0.648401826 22 2023-12-31T23:00:39Z
393 392 82 75 0.4425 319 302 55669 1804 0.44075 304.5 25030 732 0.443 307 807 0.4505 311.5 1054 53.66666667 23.02962549 49.19786096 3.163841808 0.36 0.61 0.58276644 23 2023-12-31T23:00:39Z
394 393 104 23 0.433 321 305 48307 1503 0.43275 310 20271 702 0.43275 311.25 856 0.434 298.5 994 36.15 41.14942529 69.94219653 2.997737557 0.41 0.83 0.826388889 25 2023-12-31T23:00:39Z
395 394 105 26 0.4455 321 320 54785 1992 0.447 328.75 25576 1022 0.4505 323 915 0.4565 314 987 40 25.56723852 58.60215054 2.857142857 0.27 0.58 0.890868597 23 2023-12-31T23:00:39Z
396 395 110 68 0.433 321 304 46634 1549 0.43725 309.25 21412 793 0.43575 310.75 849 0.444 310 1337 43 30.67520373 58.68263473 3.048780488 0.28 0.82 0.896162528 23 2023-12-31T23:00:39Z
397 396 96 77 0.436 320 311 52534 1895 0.43325 310.5 25592 1068 0.437 310 952 0.4295 297.5 1148 55.83333333 24.78729438 54.44444444 2.732240437 0.27 0.831 0.733021077 20 2023-12-31T23:00:39Z
398 397 98 27 0.44225 321 309 54464 1852 0.44375 304.75 24113 964 0.442 308.75 810 0.443 300.5 910 41.5 29.23752057 53.19148936 2.694786175 0.31 0.78 0.781659389 21 2023-12-31T23:00:39Z
399 398 102 84 0.41925 317 298 45670 1568 0.42375 298 19307 794 0.42175 301.25 856 0.428 303 1152 43.83333333 23.28847279 54.54545455 2.756141402 0.27 0.66 0.730593607 19 2023-12-31T23:00:39Z
400 399 108 10 0.4495 317 321 57743 1652 0.45175 322.5 25946 905 0.45025 325.75 746 0.461 321 952 37.33333333 32.62527233 69.83240223 3.510696654 0.18 0.72 0.534934498 20 2023-12-31T23:00:39Z
401 400 106 41 0.443 318 305 52390 1748 0.441 307.75 26106 934 0.43475 302 805 0.4365 307.5 1278 42.83333333 26.21195039 44.57142857 3.773584906 0.33 0.54 0.575555556 22 2023-12-31T23:00:39Z
402 401 108 80 0.4255 319 309 48146 1516 0.42525 303.25 23254 786 0.4245 305.25 768 0.428 320.5 1477 46.83333333 29.67853042 69.23076923 2.670623145 0.15 0.68 0.639269406 20 2023-12-31T23:00:40Z
403 402 107 45 0.439 321 317 53113 1512 0.44175 319.75 26637 922 0.4395 316.75 938 0.4385 310 1110 48.33333333 30.40540541 52.84090909 3.692674211 0.29 0.56 0.717647059 22 2023-12-31T23:00:40Z
404 403 108 82 0.44825 319 310 55653 1561 0.448 310.25 26348 780 0.44925 315.75 870 0.4545 313.5 679 36.83333333 30.22346369 52.17391304 2.558139535 0.22 0.66 0.612200436 22 2023-12-31T23:00:40Z
405 404 92 7 0.452 321 322 51762 1805 0.4455 311.25 26926 987 0.45275 328 1015 0.4565 315 984 43.78333333 27.03723691 47.2826087 3.517877739 0.23 0.52 0.70754717 24 2023-12-31T23:00:40Z
406 405 105 128 0.43225 320 319 57020 1841 0.427 303 23952 810 0.435 311.25 1020 0.435 310 662 49.81666667 35.85014409 48.40425532 2.707692308 0.23 0.74 0.781818182 21 2023-12-31T23:00:40Z
407 406 105 121 0.4415 318 310 45124 1564 0.44425 307.5 23245 875 0.44375 310 723 0.444 302 1172 38.16666667 33.07943417 59.375 3.372093023 0.28 0.67 0.793023256 23 2023-12-31T23:00:40Z
408 407 108 22 0.44275 320 317 52020 1662 0.4425 323.25 23149 746 0.44825 324.75 896 0.4545 317 1134 40.51666667 27.82415136 53.15789474 3.167185877 0.27 0.77 0.856179775 24 2023-12-31T23:00:40Z
409 408 100 97 0.44725 321 311 44786 1253 0.4485 313.25 24177 733 0.4475 319.75 836 0.4505 330 1340 49.43333333 41.15720524 74 2.671755725 0.35 0.55 0.707762557 23 2023-12-31T23:00:40Z
410 409 102 20 0.4215 315 300 45928 1592 0.421 297.25 21702 772 0.41825 290.25 738 0.426 294 1046 39.5 33.7334934 67.87878788 3.023516237 0.39 0.6 0.788235294 23 2023-12-31T23:00:40Z
411 410 101 36 0.444 315 327 65346 1866 0.4415 321.75 29273 875 0.43925 323.25 738 0.4445 336 1477 33.33333333 24.87016734 65.6626506 3.513996426 0.21 0.78 0.47716895 22 2023-12-31T23:00:40Z
412 411 98 52 0.45075 320 325 54608 1720 0.45125 324.5 24788 808 0.4505 322 898 0.4575 333.5 1505 42.16666667 44.58705357 59.01639344 3.193960511 0.17 0.48 0.545454545 20 2023-12-31T23:00:41Z
413 412 75 75 0.44425 317 320 65266 1801 0.447 317.25 23744 704 0.44475 326.25 931 0.4505 331.5 1712 57.5 24.09972299 39.3258427 2.941176471 0.35 1.03 0.554524362 21 2023-12-31T23:00:41Z
414 413 98 15 0.423 318 302 42326 1208 0.42325 301.5 21196 707 0.42475 309.25 914 0.4325 311 1099 59.3 28.24925816 42.94478528 2.766798419 0.38 0.97 0.746445498 23 2023-12-31T23:00:41Z
415 414 108 102 0.44975 320 317 56264 1956 0.44075 302.5 26332 861 0.441 307 892 0.449 306 946 30.63333333 25.37900056 42.54143646 3.828002098 0.51 0.68 0.581818182 26 2023-12-31T23:00:41Z
416 415 100 30 0.44325 322 319 50814 1699 0.448 330 27730 1029 0.4435 315.5 726 0.447 319 665 57.76666667 14.3812709 42.85714286 4.052573932 0.49 0.84 0.610047847 25 2023-12-31T23:00:41Z
417 416 108 108 0.435 319 305 47920 1549 0.439 323.5 24017 800 0.43725 315.25 688 0.434 317 812 56.88333333 30.42492918 51.91256831 3.563084112 0.4 0.82 0.69751693 20 2023-12-31T23:00:41Z
418 417 107 31 0.448 319 308 47165 1543 0.4445 319.75 25496 996 0.4445 314.5 826 0.4465 318 1158 34.95 42.13451918 65.2173913 3.653250774 0.33 0.75 0.612612613 20 2023-12-31T23:00:41Z
419 418 105 42 0.44975 320 308 51056 1488 0.45075 319.5 24434 821 0.44775 312.25 894 0.4485 306.5 1141 49.35 31.40360459 53.92670157 2.852441031 0.31 0.89 0.689342404 21 2023-12-31T23:00:41Z
420 419 109 69 0.4405 317 300 48724 1430 0.44175 307 23132 700 0.44075 296.25 831 0.449 288 2232 53.9 28.66894198 56.36363636 2.324195471 0.39 0.68 0.671171171 24 2023-12-31T23:00:41Z
421 420 98 81 0.43625 317 315 45574 1533 0.4335 308.25 21895 830 0.43225 318.25 665 0.4345 334.5 1218 57.16666667 38.66362079 61.2565445 2.630106323 0.62 0.7 0.57918552 21 2023-12-31T23:00:41Z
422 421 98 56 0.42425 316 300 48773 1694 0.4215 305 24612 1015 0.425 309 877 0.4295 315 1533 76.5 22.51184834 42.85714286 2.992220227 0.23 0.65 0.644705882 22 2023-12-31T23:00:42Z
423 422 94 97 0.4275 316 331 48242 1470 0.4315 302.25 23358 971 0.4295 304 901 0.4385 303.5 1498 59.66666667 19.58121109 40.90909091 3.483870968 0.27 0.8 0.504524887 25 2023-12-31T23:00:42Z
424 423 100 18 0.434 319 309 47503 1507 0.43325 306.5 22618 718 0.43225 312.75 666 0.4365 324 1211 59.33333333 25.74031891 54.18994413 2.983293556 0.43 0.64 0.630841121 25 2023-12-31T23:00:42Z
425 424 96 62 0.442 318 316 60508 1682 0.44175 309.5 25882 737 0.44075 313.5 920 0.444 302.5 1040 56.33333333 22.52873563 51.76470588 2.53164557 0.35 0.76 0.637583893 20 2023-12-31T23:00:42Z
426 425 92 23 0.444 317 322 54062 1535 0.43775 318 25464 884 0.438 308.25 803 0.444 247.5 1281 73.33333333 26.11111111 44.86486486 3.624078624 0.41 0.79 0.589073634 22 2023-12-31T23:00:42Z
427 426 102 65 0.4235 319 309 45059 1619 0.4265 300 25013 1001 0.42225 305 858 0.419 313.5 1362 62.5 31.45400593 52.69461078 3.276622558 0.39 0.8 0.694638695 23 2023-12-31T23:00:42Z
428 427 87 122 0.438 320 317 52164 1802 0.43075 299.25 24210 920 0.43575 309.25 886 0.4425 315 1256 62.16666667 31.99534613 39.20454545 2.678062678 0.38 0.6 0.746575342 23 2023-12-31T23:00:42Z
429 428 95 44 0.418 317 299 47937 1794 0.41925 304.25 23277 921 0.4145 299.75 758 0.418 304 1001 59.33333333 28.55450237 37.28813559 2.5 0.18 0.78 0.767058824 20 2023-12-31T23:00:42Z
430 429 88 103 0.445 319 314 51457 1526 0.4425 300 20014 893 0.445 307.25 738 0.449 305 1228 63.66666667 28.07881773 52.15053763 3.324099723 0.28 0.66 0.729216152 20 2023-12-31T23:00:42Z
431 430 94 33 0.44025 321 312 53017 1575 0.44225 311.25 24596 887 0.44675 316.75 956 0.4395 298 1234 55.95 32.44853738 48.64864865 2.920560748 0.5 0.74 0.768518519 22 2023-12-31T23:00:42Z
432 431 107 91 0.44625 321 323 59351 1941 0.44375 323.5 26540 789 0.44575 314 912 0.453 322 1379 48.03333333 29.55421024 47.82608696 3.718535469 0.38 0.84 0.801843318 23 2023-12-31T23:00:43Z
433 432 108 23 0.436 319 306 44749 1351 0.43675 310 24338 789 0.43675 306 751 0.447 309.5 1225 53.08333333 24.30011198 51.12359551 3.436018957 0.49 0.84 0.567307692 22 2023-12-31T23:00:43Z
434 433 109 74 0.45075 321 322 59578 1818 0.44675 316.5 27409 934 0.45475 321.75 1116 0.459 334 1624 47.4 27.97586396 54.05405405 3.27689787 0.39 0.71 0.818807339 21 2023-12-31T23:00:43Z
435 434 104 64 0.4415 318 320 61167 1992 0.44175 325.25 26540 1034 0.44075 320.75 1080 0.444 321.5 1176 52.5 29.57264957 50.83798883 2.712060012 0.35 0.74 0.665943601 19 2023-12-31T23:00:43Z
436 435 102 100 0.43925 317 298 53016 1780 0.438 308 24000 1004 0.43925 302.25 948 0.449 305 1242 51.83333333 28.26815642 62.06896552 3.303684879 0.31 0.8 0.544217687 22 2023-12-31T23:00:43Z
437 436 98 28 0.42675 317 301 52551 1636 0.4275 294.5 21187 641 0.428 313 987 0.436 303 1410 79.5 27.7499709 45 5.460662526 0.3 0.85 0.676814988 24 2023-12-31T23:00:43Z
438 437 95 65 0.4505 318 323 57839 1990 0.45125 328 27521 1172 0.44775 318.5 1017 0.4545 331 1512 50 25.9529148 49.13294798 0.982800983 0.19 0.52 0.603982301 21 2023-12-31T23:00:43Z
439 438 105 36 0.4405 314 312 57325 1545 0.444 301.5 23583 718 0.443 314.75 880 0.451 311 1250 39.83333333 32.30593607 60.60606061 3.210175651 0.35 0.57 0.788990826 20 2023-12-31T23:00:43Z
440 439 104 87 0.44025 318 302 46554 1530 0.4435 303.75 23984 896 0.44 301.5 872 0.4495 1862.5 1060 49.5 34.8581355 57.77777778 3.042959427 0.35 0.8 0.69751693 24 2023-12-31T23:00:43Z
441 440 75 56 0.45475 322 328 59752 1834 0.45775 316.5 24820 810 0.458 328.5 898 0.4585 319 766 44.05 23.70804475 38.02083333 4.255319149 0.35 0.72 0.630289532 23 2023-12-31T23:00:43Z
442 441 98 111 0.44725 320 313 52148 1550 0.442 298 21991 686 0.44675 314.25 938 0.4525 307.5 788 57.2 31.35639758 50 2.858809802 0.34 0.66 0.749435666 23 2023-12-31T23:00:44Z
443 442 75 12 0.431 317 313 52936 1743 0.428 306.75 24033 929 0.43375 309.25 864 0.4285 303.5 830 68.83333333 36.44595359 53.64583333 2.422680412 0.35 0.65 0.670644391 20 2023-12-31T23:00:44Z
444 443 108 112 0.4375 317 304 43034 1272 0.4345 307.75 22409 791 0.43725 311.75 716 0.4385 309.5 1068 52.83333333 29.79942693 61.5819209 2.915951973 0.4 0.71 0.813364055 20 2023-12-31T23:00:44Z
445 444 80 14 0.42575 318 305 46586 1675 0.423 307.5 20962 714 0.4265 300 794 0.425 310 1197 70.26666667 22.58630778 38.37837838 3.057553957 0.39 0.72 0.649411765 21 2023-12-31T23:00:44Z
446 445 96 9 0.43825 321 320 52792 1839 0.43975 321.5 24386 875 0.44025 322.75 929 0.437 324 1533 59.33333333 26.36054422 50.80213904 2.362204724 0.28 0.59 0.791762014 20 2023-12-31T23:00:44Z
447 446 101 33 0.4235 317 304 47905 1650 0.42325 302.25 22940 749 0.425 309 934 0.4305 314.5 2009 73.16666667 26.07398568 35.91160221 2.386495925 0.22 0.62 0.687943262 20 2023-12-31T23:00:44Z
448 447 106 34 0.449 317 323 52262 1741 0.44525 312.5 25930 886 0.4515 314.75 774 0.456 319.5 1320 53.53333333 25.91380251 43.33333333 4.756575266 0.35 0.91 0.635321101 23 2023-12-31T23:00:44Z
449 448 106 84 0.442 317 310 51313 1542 0.436 308 24489 1024 0.44275 315.5 1068 0.4525 303.5 1631 55.65 25.72074618 44.18604651 4.606060606 0.38 0.78 0.686936937 22 2023-12-31T23:00:44Z
450 449 106 26 0.44225 318 317 56087 1486 0.4435 320.5 24804 826 0.44425 317 1022 0.454 324 1466 57.28333333 33.55592654 42.32804233 3.181336161 0.34 0.58 0.695749441 23 2023-12-31T23:00:44Z
451 450 109 120 0.44425 320 310 52204 1671 0.44175 310.25 24000 868 0.4435 315 1006 0.4355 307.5 1418 50.98333333 35.64189189 56.66666667 2.576489533 0.36 0.69 0.876355748 22 2023-12-31T23:00:44Z
452 451 102 9 0.437 318 310 49400 1654 0.44375 316.75 25464 947 0.43875 316.5 992 0.4385 311 1365 63.16666667 40.96989967 58.15217391 2.312138728 0.42 0.81 0.707093822 22 2023-12-31T23:00:45Z
453 452 104 14 0.43525 318 317 46554 1608 0.4315 313.25 24917 929 0.438 315.25 819 0.438 315 784 51.33333333 23.98843931 41.37931034 3.658536585 0.42 0.45 0.69212963 24 2023-12-31T23:00:45Z
454 453 102 65 0.44025 318 306 47310 1750 0.44575 312.5 27103 1116 0.4455 314 1057 0.458 316.5 1530 57.66666667 26.23922414 53.2967033 3.391684902 0.36 0.71 0.599045346 26 2023-12-31T23:00:45Z
455 454 106 34 0.443 323 298 53596 1754 0.44525 311 23566 962 0.4405 301.25 868 0.4465 298 1274 57.83333333 32.65421619 65.51724138 3.143960287 0.31 0.65 0.713302752 24 2023-12-31T23:00:45Z
456 455 108 73 0.453 320 322 57426 2135 0.45125 312.5 26417 1024 0.457 321 1026 0.457 318 1684 59.66666667 31.36830719 69.94219653 2.81447444 0.32 0.63 0.767653759 23 2023-12-31T23:00:45Z
457 456 92 46 0.4435 316 318 53933 1830 0.44325 309.5 31250 1183 0.443 321 1136 0.4415 304 2264 62.16666667 20.34559643 44 3.00245098 0.37 0.68 0.514606742 22 2023-12-31T23:00:45Z
458 457 108 77 0.446 316 317 49030 1930 0.446 316.75 27553 1085 0.452 321.25 970 0.4485 310 990 56.83333333 31.59609121 53.80434783 4.355400697 0.43 0.65 0.653579677 22 2023-12-31T23:00:45Z
459 458 92 51 0.432 318 310 49448 1932 0.4345 314 24933 1036 0.4385 318.25 985 0.436 296 1050 61 21.51968941 41.84782609 3.473389356 0.23 0.6 0.55971897 24 2023-12-31T23:00:45Z
460 459 102 86 0.4455 318 309 48998 1680 0.44825 320.5 27344 1148 0.4465 311 803 0.4475 312 1407 52 25.68704431 55.15151515 2.826217679 0.32 0.5 0.725446429 24 2023-12-31T23:00:45Z
461 460 109 46 0.451 326 322 54769 1853 0.45175 301 24965 816 0.452 325.5 934 0.4595 304 1124 35.83333333 32.85714286 63.44086022 3.728813559 0.39 0.9 0.831509847 25 2023-12-31T23:00:45Z
462 461 106 141 0.4425 319 315 54059 1852 0.44025 313.5 25978 1017 0.4435 310.75 1057 0.443 299.5 1064 62 25.20413718 44.38502674 3.770491803 0.4 0.8 0.568445476 23 2023-12-31T23:00:46Z
463 462 102 32 0.42925 318 306 47889 1675 0.435 312.5 21911 968 0.43175 303.5 898 0.4345 309.5 1204 65.16666667 27.81232335 46.875 2.777777778 0.39 0.85 0.727688787 23 2023-12-31T23:00:46Z
464 463 104 122 0.444 318 311 55235 1754 0.44775 311.5 25014 878 0.43875 312 826 0.442 300 1064 62.5 24.94382022 43.09392265 NULL 0.43 0.8 0.86199095 22 2023-12-31T23:00:46Z
465 464 104 34 0.4525 318 318 51699 1698 0.45275 310.25 24015 931 0.452 314.25 873 0.455 308 1344 52.83333333 38.5331144 58.33333333 2.465753425 0.33 0.86 0.689189189 20 2023-12-31T23:00:46Z
466 465 103 146 0.432 318 303 42809 1465 0.4275 307 23116 906 0.4305 306.75 766 0.43 303.5 1477 58.16666667 33.73842593 57.05882353 2.786377709 0.45 1.21 0.721153846 20 2023-12-31T23:00:46Z
467 466 109 97 0.437 320 299 45526 1544 0.43875 301.25 20882 796 0.43775 306.25 872 0.44 302 1278 49.66666667 33.88666285 62.65060241 3.055721989 0.3 0.77 0.698412698 20 2023-12-31T23:00:46Z
468 467 103 53 0.43375 320 322 55396 1995 0.43825 328.25 23004 926 0.43175 318.25 982 0.444 305 1144 62.5 21.56976744 48.14814815 3.039158387 0.28 0.76 0.632054176 19 2023-12-31T23:00:46Z
469 468 98 81 0.43225 319 312 46298 1902 0.42625 304.75 20930 948 0.429 314.5 900 0.4325 306.5 1533 67 24.11594203 51.38121547 2.812687014 0.37 0.7 0.748251748 22 2023-12-31T23:00:46Z
470 469 83 29 0.4355 315 306 50477 1908 0.43475 304 21638 936 0.432 310.5 1027 0.436 297 1365 68.66666667 30.00580383 60.12269939 2.166476625 0.39 0.64 0.666666667 22 2023-12-31T23:00:46Z
471 470 106 92 0.44525 321 305 46988 1589 0.4445 307.5 21059 989 0.44125 316 970 0.438 309.5 1256 51.66666667 40.91671325 65.36312849 3.065355697 0.4 0.81 0.840182648 22 2023-12-31T23:00:46Z
472 471 101 67 0.42975 316 291 41169 1295 0.433 299.25 23534 931 0.43425 288.5 770 0.4345 290.5 1172 50.66666667 30.49199085 62.2754491 2.120141343 0.43 0.63 0.538641686 23 2023-12-31T23:00:47Z
473 472 105 46 0.433 320 302 47251 1577 0.432 298.75 22329 1029 0.4345 307.5 906 0.443 312.5 1337 69.33333333 29.06032483 50.56179775 2.796352584 0.29 0.66 0.494252874 22 2023-12-31T23:00:47Z
474 473 99 73 0.44 320 320 50557 1844 0.436 314 24724 1097 0.4425 321 1036 0.441 302.5 1148 60.16666667 24.8600224 45.21276596 2.736842105 0.2 0.69 0.534988713 22 2023-12-31T23:00:47Z
475 474 88 25 0.438 319 307 48130 1787 0.43725 313.75 28196 1172 0.437 312 919 0.436 311 1456 59 23.3995585 43.42857143 3.327495622 0.44 0.79 0.535307517 25 2023-12-31T23:00:47Z
476 475 102 119 0.42625 319 309 47953 1857 0.42625 300.5 21878 1026 0.425 307 824 0.425 292 1148 47.66666667 36.34782609 51.36612022 3.176341731 0.3 0.48 0.724465558 22 2023-12-31T23:00:47Z
477 476 94 24 0.445 318 316 53515 1692 0.45225 314.75 29434 1143 0.45325 319.25 957 0.452 313.5 1393 60 29.88950276 56.04395604 3.468208092 0.32 0.82 0.605568445 22 2023-12-31T23:00:47Z
478 477 102 20 0.446 323 328 56972 1832 0.437 314.5 24032 858 0.444 327.75 770 0.4425 324.5 774 28.56666667 45.84050488 63.00578035 2.181208054 0.48 0.68 0.70917226 21 2023-12-31T23:00:47Z
479 478 108 72 0.4555 320 318 56328 1886 0.45525 315 21686 772 0.4565 318.25 880 0.461 323.5 1239 30.23333333 45.51835853 61.46341463 3.100775194 0.43 0.76 0.734782609 23 2023-12-31T23:00:47Z
480 479 106 20 0.449 320 312 46683 1776 0.4415 313.25 19194 866 0.45 314 733 0.4445 311 1071 45.16666667 39.24914676 66.12903226 2.973568282 0.4 0.87 0.567928731 20 2023-12-31T23:00:47Z
481 480 109 71 0.45925 320 317 42714 1472 0.4575 318.5 21627 875 0.45075 314 679 0.4575 310 1043 26.33333333 28.14042787 54.85714286 2.88184438 0.33 0.65 0.769230769 21 2023-12-31T23:00:47Z
482 481 105 87 0.43375 319 312 45176 1585 0.43525 306.5 21975 882 0.43275 296.75 588 0.4405 306.5 1120 34.65 31.16438356 50.82872928 2.227171492 0.42 0.68 0.813953488 21 2023-12-31T23:00:48Z
483 482 104 25 0.45275 320 309 53354 1696 0.458 310 25110 915 0.451 303 922 0.455 313 1288 34.5 23.59234234 49.13294798 2.824551874 0.32 0.69 0.622362869 20 2023-12-31T23:00:48Z
484 483 96 31 0.45 320 321 62887 2053 0.45175 335 27650 1099 0.44925 311 1054 0.4545 309.5 1225 76.16666667 25.16129032 47.80487805 3.111814346 0.34 1.12 0.786995516 21 2023-12-31T23:00:48Z
485 484 100 87 0.441 321 302 48724 1596 0.4485 299.25 25190 1004 0.43825 295.25 737 0.4415 283 1046 57.66666667 24.68856172 66.45962733 3.636363636 0.25 0.63 0.585972851 23 2023-12-31T23:00:48Z
486 485 103 24 0.42275 317 303 41780 1466 0.4295 306.25 22809 1069 0.425 303.25 882 0.424 296.5 980 62.66666667 41.41904184 64.1509434 2.421924793 0.39 0.87 0.910138249 21 2023-12-31T23:00:48Z
487 486 85 93 0.43025 322 306 43789 1549 0.42425 296.5 21316 1031 0.4235 307.5 803 0.4315 304.5 872 57 42.3880597 58.75706215 2.142857143 0.26 0.64 0.792626728 23 2023-12-31T23:00:48Z
488 487 98 118 0.43075 318 320 52550 1362 0.42875 313 23888 864 0.4305 311.75 807 0.4355 313.5 1550 52.48333333 28.86480319 43.25842697 3.126843658 0.35 0.87 0.618705036 20 2023-12-31T23:00:48Z
489 488 88 35 0.43525 321 316 47872 1642 0.44 317.25 20384 782 0.43675 325.25 750 0.4395 327.5 1281 67.31666667 20.85924251 38.62433862 3.139269406 0.29 0.7 0.607888631 20 2023-12-31T23:00:48Z
490 489 106 78 0.4385 320 314 47889 1642 0.45 315.5 23936 878 0.43975 313 933 0.4485 303 914 61.45 32.95774648 51.39664804 3.163841808 0.39 0.78 0.709302326 23 2023-12-31T23:00:48Z
491 490 100 83 0.425 320 316 48808 1617 0.426 317.25 22361 828 0.42725 312.5 947 0.424 301.5 906 63.56666667 26.27070246 44.08602151 2.160318363 0.38 0.49 0.630170316 20 2023-12-31T23:00:48Z
492 491 100 122 0.43775 318 311 45510 1444 0.44625 318.5 21846 770 0.44425 316.25 900 0.443 319 1270 53.71666667 25.93210907 50.25906736 2.211874272 0.26 0.73 0.719178082 21 2023-12-31T23:00:49Z
493 492 98 4 0.424 318 305 47598 1342 0.42825 292.75 20946 707 0.431 308.25 868 0.4325 292 1438 54.36666667 24.23188406 54.9132948 2.522421525 0.49 0.77 0.751184834 24 2023-12-31T23:00:49Z
494 493 98 35 0.4315 320 320 51248 1820 0.432 316.5 22602 802 0.434 316.25 1015 0.4415 317 1894 49.46666667 32.11678832 56.4516129 2.282377919 0.4 0.73 0.793764988 23 2023-12-31T23:00:49Z
495 494 102 18 0.4425 320 316 49207 1620 0.43975 313 22088 849 0.4415 320.5 994 0.4405 314 1256 62.83333333 28.60335196 52.22222222 2.370689655 0.32 0.64 0.588235294 20 2023-12-31T23:00:49Z
496 495 83 29 0.44475 318 323 55058 1636 0.44375 310.5 27634 770 0.4405 313.75 814 0.447 313 794 67.16666667 14.3575419 36.81318681 3.941176471 0.44 0.72 0.67816092 25 2023-12-31T23:00:49Z
497 496 97 38 0.443 316 310 50007 1820 0.4355 306.75 25808 1078 0.43925 314.5 942 0.4285 296.5 1124 64.4 30.09491904 49.44444444 3.463203463 0.43 0.82 0.464285714 23 2023-12-31T23:00:49Z
498 497 105 79 0.4325 319 321 56216 1839 0.433 310.25 23454 756 0.43175 317 875 0.4365 319.5 878 63.45 25.26193248 37.83783784 1.53937241 0.45 0.83 0.626450116 23 2023-12-31T23:00:49Z
499 498 105 43 0.44625 318 321 52920 1897 0.4445 316 26396 1150 0.44625 316.5 1057 0.45 325.5 928 57.5 21.47138965 53 3.867403315 0.54 0.78 0.630841121 23 2023-12-31T23:00:49Z
500 499 100 25 0.45675 318 312 49834 1766 0.45125 306.5 23599 915 0.4535 303.75 961 0.4565 315.5 1414 59.66666667 33.08470964 53.40314136 3.52303523 0.48 0.84 0.69837587 22 2023-12-31T23:00:49Z
501 500 90 98 0.4455 321 315 49593 1614 0.4395 315.75 19914 914 0.44725 319.75 882 0.446 1808 1292 60.83333333 35.69372481 60.11560694 2.266124346 0.48 0.5 0.493421053 20 2023-12-31T23:00:49Z
502 501 94 34 0.44175 321 310 52245 1886 0.4395 319.25 26106 1052 0.4445 324.25 1088 0.444 317 1662 57.16666667 18.87755102 35.51912568 3.724928367 0.55 0.81 0.712328767 22 2023-12-31T23:00:50Z
503 502 94 52 0.4505 319 323 56039 1962 0.451 316.75 25158 1057 0.45125 323 884 0.4555 329 1726 61.16666667 20.54495913 39.57219251 4.043126685 0.45 0.68 0.590909091 22 2023-12-31T23:00:50Z
504 503 109 135 0.443 321 312 46699 1594 0.439 313.25 24644 784 0.44 319.25 700 0.4365 326 990 39.65 53.1587934 89.14285714 3.757225434 0.48 0.92 0.891891892 23 2023-12-31T23:00:50Z
505 504 92 24 0.4395 318 308 47438 1846 0.441 305 22345 931 0.446 317.75 957 0.4465 304.5 1036 61.16666667 20.88036117 45.40229885 3.273137698 0.19 1.04 0.598173516 20 2023-12-31T23:00:50Z
506 505 96 64 0.441 317 302 45027 1610 0.43875 306 19548 850 0.44325 311.5 928 0.4475 311.5 1214 66.83333333 23.3163554 48.5380117 3.052064632 0.25 0.83 0.675174014 20 2023-12-31T23:00:50Z
507 506 100 81 0.43025 323 302 46136 1626 0.4265 305.5 20866 854 0.425 306.75 873 0.4295 315.5 1330 63.66666667 33.50846468 44.38202247 3.106682298 0.43 0.68 0.719817768 19 2023-12-31T23:00:50Z
508 507 96 21 0.433 323 311 45092 1582 0.43225 310 19178 833 0.433 306.75 749 0.4395 307 966 49.33333333 27.3255814 49.70760234 2.614379085 0.36 0.65 0.903669725 18 2023-12-31T23:00:50Z
509 508 106 82 0.4345 318 318 50862 1934 0.4455 321.25 26187 1092 0.44 311.5 1078 0.442 296.5 1088 77.16666667 21.22425629 39.13043478 2.840909091 0.38 0.93 0.793721973 20 2023-12-31T23:00:50Z
510 509 105 8 0.4395 318 302 51200 1746 0.43925 306.75 23132 805 0.442 305 796 0.4445 301 1032 51.61666667 21.64477441 44 2.719546742 0.29 0.66 0.822988506 22 2023-12-31T23:00:50Z
511 510 105 8 0.43675 318 308 51602 1426 0.4365 302.75 21477 634 0.43725 296.5 830 0.4415 289 826 52.95 24.17519909 50.5952381 3.174603175 0.26 0.73 0.812641084 22 2023-12-31T23:00:50Z
512 511 105 8 0.4305 318 305 49071 1606 0.43325 303.75 22827 850 0.43 305.5 754 0.44 304 910 NULL 23.84189463 46.19565217 3.339296363 0.4 0.52 0.828235294 22 2023-12-31T23:00:51Z
513 512 105 38 0.435 320 312 47776 1463 0.433 304.75 23148 796 0.43475 309 1026 0.442 304 1026 54 22.84408909 47.70114943 3.038674033 0.29 0.66 0.655889145 20 2023-12-31T23:00:51Z
514 513 105 38 0.446 317 318 50605 1503 0.44975 321 22602 686 0.4485 318.75 945 0.449 302.5 900 49.35 23.74378796 52.04678363 3.045977011 0.33 0.63 0.619047619 20 2023-12-31T23:00:51Z
515 514 105 38 0.444 317 316 54158 1766 0.4505 321 25448 910 0.445 320.5 990 0.4515 321.5 980 60.85 27.25770925 53.26086957 2.891844997 0.25 0.55 0.71954023 20 2023-12-31T23:00:51Z
516 515 106 59 0.435 319 309 47390 1762 0.43475 308.25 21220 864 0.43325 304.25 817 0.435 298.5 1236 51.83333333 36.15886189 58.62068966 2.293862368 0.36 0.7 0.742081448 20 2023-12-31T23:00:51Z
517 516 104 96 0.42775 319 304 44561 1542 0.429 299 19081 835 0.42675 302.75 889 0.4285 305 1435 54.16666667 30.22170362 57.22222222 2.094240838 0.28 0.75 0.717647059 20 2023-12-31T23:00:51Z
518 517 101 38 0.4535 318 317 56167 1787 0.4495 318.5 23149 864 0.453 317.75 805 0.4555 317 1064 43.5 27.97586396 52.43243243 2.77324633 0.4 0.68 0.885964912 20 2023-12-31T23:00:51Z
519 518 98 116 0.432 317 303 42359 1463 0.435 315 25672 976 0.43575 308.5 794 0.4395 330.5 1390 67.5 29.86651835 53.43915344 2.714932127 0.37 0.86 0.599088838 22 2023-12-31T23:00:51Z
520 519 100 18 0.43675 320 305 42841 1416 0.43975 310.25 21846 970 0.43525 302 672 0.433 313 1096 50.83333333 39.58927553 56.80473373 2.798400914 0.31 0.72 0.931034483 22 2023-12-31T23:00:51Z
521 520 102 45 0.43425 322 318 52856 1771 0.43325 324 27923 1118 0.4345 316.5 942 0.4405 306.5 1256 53.33333333 34.77508651 53.33333333 3.556609366 0.31 0.58 0.594405594 23 2023-12-31T23:00:51Z
522 521 102 94 0.444 318 297 50107 1788 0.43825 314 27553 955 0.43925 302.5 856 0.448 300.5 1124 57.33333333 25.01411632 50.57471264 3.544450901 0.36 0.7 0.725663717 23 2023-12-31T23:00:52Z
523 522 103 71 0.43575 318 315 52277 1566 0.437 308.75 23984 760 0.43975 322 1017 0.446 300.5 1295 64.98333333 26.93181818 40.8839779 2.482929857 0.41 0.52 0.637413395 21 2023-12-31T23:00:52Z
524 523 103 119 0.4545 324 315 50589 1614 0.452 319.75 26814 917 0.456 324 964 0.4625 323.5 1396 55.03333333 35.21667581 51.32275132 2.795573675 0.39 0.6 0.689277899 21 2023-12-31T23:00:52Z
525 524 100 37 0.4435 324 311 50621 1864 0.4505 318.75 25946 1158 0.44775 309.5 961 0.45 309 1082 69.5 25.02780868 50 3.314917127 0.4 0.83 0.628959276 22 2023-12-31T23:00:52Z
526 525 96 36 0.425 318 299 47229 1558 0.4295 295.75 19644 833 0.4255 305.25 959 0.433 314 1631 56.2 28.78787879 37.5 2.787068004 0.35 0.74 0.793981481 22 2023-12-31T23:00:52Z
527 526 106 44 0.458 320 322 53242 1815 0.4525 323.75 27264 976 0.45675 322 992 0.4505 303.5 1043 41.76666667 31.93420306 58.72093023 3.428571429 0.35 1.89 0.796536797 24 2023-12-31T23:00:52Z
528 527 106 94 0.4475 321 313 51474 1706 0.44175 319.75 23261 858 0.44425 308.75 877 0.451 321.5 1446 48.31666667 36.87214612 64.73988439 3.244166192 0.42 0.77 0.608695652 23 2023-12-31T23:00:52Z
529 528 106 104 0.4435 322 316 46780 1638 0.44 305.25 21123 816 0.43475 314.75 886 0.4525 325 1648 57 40.51509577 66.48648649 2.906976744 0.4 0.5 0.7695962 20 2023-12-31T23:00:52Z
530 529 95 24 0.4275 316 302 46281 1603 0.43225 306.5 23310 873 0.42925 304.25 889 0.429 299.5 1085 60.83333333 23.6645606 60.97560976 3.272498427 0.26 0.48 0.584295612 23 2023-12-31T23:00:52Z
531 530 103 89 0.44175 318 312 45140 1886 0.43925 305 22329 976 0.43525 314 985 0.443 306.5 1376 55.83333333 34.93424814 56.47058824 3.227699531 0.28 0.69 0.702078522 24 2023-12-31T23:00:52Z
532 531 103 130 0.4265 322 297 40012 1318 0.43 294 20994 914 0.4335 306.5 833 0.4365 293.5 1428 51.51666667 32.53747918 54.14364641 3.468208092 0.33 0.68 0.644859813 23 2023-12-31T23:00:53Z
533 532 103 19 0.4225 317 300 45429 1561 0.43125 303.25 20624 934 0.42625 305 1004 0.432 296.5 1337 47.83333333 31.7571512 45.50898204 2.979274611 0.44 0.6 0.645833333 20 2023-12-31T23:00:53Z
534 533 103 30 0.44375 320 314 45879 1734 0.4395 312.75 20464 1012 0.44125 306.25 938 0.4485 324 1074 50.78333333 57.79816514 63.38797814 2.45398773 0.44 0.52 0.769574944 23 2023-12-31T23:00:53Z
535 534 101 97 0.437 321 314 44063 1713 0.43475 312 21590 928 0.43625 309 821 0.436 302 788 70 47.34463277 55 1.612903226 0.29 0.42 0.631336406 22 2023-12-31T23:00:53Z
536 535 106 66 0.433 320 307 44625 1255 0.43625 313.25 25029 849 0.4305 309.5 858 0.428 302 872 45.81666667 46.27277747 69.23076923 2.442827443 0.2 0.56 0.746411483 21 2023-12-31T23:00:53Z
537 536 106 81 0.42525 317 311 46538 1325 0.4195 310.25 24515 970 0.42725 307.75 740 0.4355 310 777 57.6 41.21863799 65.14285714 3.047404063 0.26 0.76 0.684085511 22 2023-12-31T23:00:53Z
538 537 103 37 0.443 313 312 48701 1628 0.44225 320 24692 850 0.444 315.25 822 0.4465 310 917 58.98333333 31.39140271 60.57142857 2.691867125 0.51 0.82 0.941834452 21 2023-12-31T23:00:53Z
539 538 80 22 0.43975 323 321 50959 1654 0.4335 316.25 24901 1045 0.43825 322.5 1092 0.434 309.5 1158 65.5 23.83654938 45.74468085 2.521008403 0.38 0.6 0.754022989 22 2023-12-31T23:00:53Z
540 539 90 66 0.42775 312 309 42954 1505 0.42075 306.5 22361 900 0.42925 313.25 882 0.424 314.5 1134 78 32.48993675 60.84656085 2.412868633 0.32 0.55 0.754761905 22 2023-12-31T23:00:53Z
541 540 96 34 0.42875 324 321 52872 1678 0.42825 317.75 20480 812 0.427 321.5 859 0.4265 309 1246 50.66666667 31.30733945 60.33519553 1.991150442 0.25 0.62 0.734741784 20 2023-12-31T23:00:53Z
542 541 103 96 0.4295 318 304 49994 1668 0.43425 305.25 22425 882 0.43225 308.5 985 0.434 304.5 1522 62.66666667 25.26564345 53.65853659 2.704257768 0.31 0.86 0.601769912 22 2023-12-31T23:00:54Z
543 542 105 108 0.42425 313 316 47583 1741 0.4235 313.75 22457 852 0.424 304.75 780 0.424 322.5 1656 47.66666667 40.28021016 61.57894737 3.418339664 0.33 0.57 0.839243499 25 2023-12-31T23:00:54Z
544 543 106 44 0.42775 316 311 49930 1715 0.426 315 23856 954 0.4295 302.5 936 0.4345 311.5 1295 62.5 28.81257276 40.8839779 2.838557067 0.17 0.57 0.569506726 22 2023-12-31T23:00:54Z
545 544 107 127 0.4455 312 316 53885 1892 0.4485 304.25 25930 931 0.44175 312.25 882 0.4545 301 976 52.66666667 32.39823982 53.51351351 3.201396973 0.31 0.42 0.747747748 22 2023-12-31T23:00:54Z
546 545 102 45 0.43125 313 311 48934 1349 0.43375 311 22409 793 0.43325 312 788 0.4375 308.5 1162 60.83333333 40.39238315 57.86516854 3.204047218 0.1 0.47 0.631205674 25 2023-12-31T23:00:54Z
547 546 103 80 0.433 319 307 46731 1536 0.438 305.75 21027 800 0.4345 307.75 780 0.44 312 1498 49.9 39.62795941 56.59340659 2.78223649 0.38 0.75 0.795823666 21 2023-12-31T23:00:54Z
548 547 109 98 0.45175 315 319 53017 1766 0.45225 323.75 25720 747 0.4535 313.25 922 0.459 314 1484 41.01666667 39.15431082 47.44897959 2.536640361 0.49 0.86 0.695259594 22 2023-12-31T23:00:54Z
549 548 109 138 0.4575 317 320 51216 1740 0.45325 323 24354 800 0.45575 328.75 798 0.4515 348 1533 38.98333333 47.14285714 70.32967033 1.873278237 0.42 0.84 0.641255605 21 2023-12-31T23:00:54Z
550 549 97 103 0.43075 312 318 61440 2070 0.43275 307 24482 954 0.4365 308.25 901 0.4355 305.5 1088 60.5 24.91620112 42.85714286 4.656577416 0.25 0.48 0.589164786 21 2023-12-31T23:00:54Z
551 550 85 32 0.4375 312 308 54094 1871 0.43925 303.25 21589 858 0.439 311 780 0.439 308 1362 58.83333333 18.20744081 30.21978022 3.719008264 0.14 0.42 0.651376147 20 2023-12-31T23:00:54Z
552 551 105 180 0.42775 313 301 45172 1484 0.4295 309.5 20368 936 0.4315 311.25 819 0.4325 305 1180 51.83333333 34.98273878 58.79120879 2.5769956 0.25 0.59 0.793981481 22 2023-12-31T23:00:55Z
553 552 105 215 0.4215 312 350 43918 1556 0.4235 302.75 19676 872 0.42275 302 537 0.4225 299 1180 56.5 31.1023622 66.06060606 2.496798976 0.37 0.55 0.867298578 21 2023-12-31T23:00:55Z
554 553 102 29 0.44625 313 298 47872 1456 0.587333333 411.6666667 24494 758 0.447 307.25 742 0.4625 308.5 1253 59 26.02631875 50.88757396 3.300733496 0.29 0.52 0.65 23 2023-12-31T23:00:55Z
555 554 106 130 0.434 314 313 47503 1549 0.43475 313.5 21477 718 0.43425 305.5 772 0.43 283.5 920 51.16666667 24.81375358 54.11764706 2.965864578 0.25 0.67 0.876168224 20 2023-12-31T23:00:55Z
556 555 108 30 0.456 317 322 57646 1771 0.452 315.25 24997 826 0.454 321.25 956 0.46 326 1446 40.48333333 38.6951631 61.79775281 2.228571429 0.31 0.48 0.830107527 20 2023-12-31T23:00:55Z
557 556 108 96 0.4325 316 311 52100 1764 0.432 310.5 21380 766 0.44025 319.75 1012 0.4385 310.5 1544 52.18333333 34.93699885 48.33333333 2.191464821 0.23 0.72 0.801843318 20 2023-12-31T23:00:55Z
558 557 106 78 0.44075 312 302 42696 1461 0.442 306.75 20480 968 0.4415 310.25 892 0.4405 319.5 1244 43.66666667 35.13209668 62.94117647 2.249134948 0.3 0.49 0.684684685 20 2023-12-31T23:00:55Z
559 558 109 34 0.42925 316 311 48338 1362 0.42975 316.75 20753 679 0.43075 316.5 936 0.428 308.5 1589 43.91666667 31.20365088 55.93220339 2.744425386 0.28 0.25 0.752403846 21 2023-12-31T23:00:55Z
560 559 109 82 0.441 318 304 49190 1540 0.44 316 21927 649 0.44275 305.75 730 0.456 333.5 1806 41.58333333 32.13665316 60.81871345 2.533172497 0.31 0.57 0.736238532 22 2023-12-31T23:00:55Z
561 560 105 35 0.42825 312 295 42873 1438 0.4345 312 22506 901 0.42675 307 838 0.432 309.5 1466 42.66666667 36.81225184 54.4973545 2.368265246 0.39 0.55 0.73364486 20 2023-12-31T23:00:55Z
562 561 70 56 0.435 312 294 47214 1676 0.43075 302 25303 1200 0.43375 293.75 877 0.437 357.5 1631 68.16666667 14.36814772 33.33333333 2.66357846 0.2 0.42 0.586363636 21 2023-12-31T23:00:56Z
563 562 104 138 0.43225 317 316 52052 1657 0.429 301.75 20239 793 0.43425 300.75 838 0.4385 317 1340 70 36.05248146 60 2.026666667 0.23 0.43 0.662707838 23 2023-12-31T23:00:56Z
564 563 104 101 0.43275 312 316 49239 1843 0.424 317 24226 896 0.42625 309.25 840 0.426 299 1204 52.16666667 34.31430253 45.34883721 2.880184332 0.25 0.8 0.671264368 25 2023-12-31T23:00:56Z
565 564 104 27 0.43 316 310 50428 1740 0.4345 313.5 24467 1036 0.436 310.75 926 0.439 308.5 1022 47.66666667 37.48571429 54.34782609 3.112391931 0.27 0.49 0.689814815 25 2023-12-31T23:00:56Z
566 565 106 137 0.441 318 316 44931 1586 0.43875 306.75 19853 830 0.443 319.75 861 0.438 307 1288 49.33333333 49.29017604 78.57142857 2.624531334 0.39 0.57 0.767123288 25 2023-12-31T23:00:56Z
567 566 90 86 0.45775 321 315 47728 1461 0.45675 323.25 23261 740 0.456 312.5 726 0.4535 310 1141 47.35 35.54959786 59.89304813 2.218614719 0.5 0.84 0.710467706 21 2023-12-31T23:00:56Z
568 567 105 129 0.4465 316 318 52534 1852 0.44325 309.25 20223 756 0.44175 314 845 0.443 312.5 1242 45.06666667 44.65909091 67.0212766 2.373417722 0.26 0.88 0.760964912 23 2023-12-31T23:00:56Z
569 568 107 73 0.4395 317 315 51522 1866 0.43125 308.25 18840 698 0.43625 316 870 0.439 335.5 1522 50.71666667 34.19838524 64.59627329 2.96969697 0.31 0.92 0.410377358 25 2023-12-31T23:00:56Z
570 569 106 47 0.4295 312 317 52068 1760 0.42775 320.75 27778 1031 0.425 310.25 924 0.4355 318.5 1158 46.33333333 32.21590909 56.75675676 3.105263158 0.38 0.62 0.772300469 27 2023-12-31T23:00:56Z
571 570 108 87 0.4405 314 311 48483 1533 0.4405 309.25 27200 1074 0.44275 311 1003 0.4545 308 1666 50 39.96728462 67.55319149 2.959240648 0.37 0.54 0.770419426 25 2023-12-31T23:00:56Z
572 571 106 41 0.44725 312 308 53226 1787 0.4475 306.75 24467 1015 0.44875 313.5 810 0.4505 320.5 1382 56.5 34.55555556 51.79487179 2.891844997 0.38 0.66 0.507865169 23 2023-12-31T23:00:57Z
573 572 106 156 0.42175 312 288 42037 1345 0.42025 288.5 19226 728 0.4225 290.5 740 0.4285 299.5 1134 56.66666667 29.24807578 55.88235294 2.90237467 0.37 0.63 0.760095012 26 2023-12-31T23:00:57Z
574 573 98 128 0.41775 313 296 44320 1521 0.408 284 17168 728 0.4133 296.75 830 0.417 292 962 65.33333333 26.13095238 46.9273743 2.489866821 0.25 0.36 0.520383693 25 2023-12-31T23:00:57Z
575 574 108 48 0.43425 312 301 47856 1439 0.43475 304.25 22859 864 0.44075 313.25 933 0.445 299 752 52.66666667 33.35208099 57.06214689 3.287981859 0.19 0.43 0.713625866 32 2023-12-31T23:00:57Z
576 575 106 164 0.43175 312 299 46780 1564 0.43325 306.25 22248 971 0.43775 304.75 889 0.437 299 1158 62.83333333 29.84988453 60.47904192 2.43902439 0.22 0.86 0.738636364 25 2023-12-31T23:00:57Z
577 576 104 24 0.43 312 298 52599 1778 0.43175 306.25 23904 870 0.433 304 905 0.436 316 1414 63.56666667 30.89430894 54.94505495 2.593818985 0.21 1.05 0.872727273 27 2023-12-31T23:00:57Z
578 577 108 92 0.43375 312 308 53901 1759 0.42775 302.25 21075 774 0.43325 308 889 0.4365 297 1085 55.56666667 40.76834862 63.18681319 2.592165899 0.19 0.82 0.781990521 23 2023-12-31T23:00:57Z
579 578 108 17 0.45225 316 323 55267 1897 0.4505 312.75 24612 744 0.4565 317.25 868 0.4585 329.5 1442 40.1 28.96825397 50.84745763 3.171856978 0.4 0.77 0.645089286 21 2023-12-31T23:00:57Z
580 579 106 94 0.45325 322 311 47198 1521 0.45125 319.25 24547 987 0.45075 309 765 0.4555 308 1152 53.33333333 36.42384106 56.54450262 3.010033445 0.22 0.52 0.697986577 20 2023-12-31T23:00:57Z
581 580 93 18 0.4255 313 308 44963 1701 0.425 306.5 19532 804 0.426 307.5 1020 0.429 312 1330 62.16666667 32.73672055 56.98924731 2.382302893 0.23 0.4 0.662763466 25 2023-12-31T23:00:57Z
582 581 104 95 0.418 312 305 44658 1547 0.421 304.75 21509 868 0.42375 300.75 833 0.431 309.5 1970 68.83333333 31.74984967 54.23728814 3.141993958 0.36 0.48 0.689903846 25 2023-12-31T23:00:58Z
583 582 106 25 0.43925 312 317 54432 1811 0.445 322.25 28587 948 0.441 310 990 0.437 306 1298 67.16666667 25.78125 54.02298851 3.692115144 0.33 0.62 0.712962963 21 2023-12-31T23:00:58Z
584 583 104 47 0.4485 315 325 54142 1934 0.44875 326.25 27055 1169 0.45325 324 962 0.4555 312.5 1382 53.16666667 37.43315508 55.44554455 3.99573788 0.43 0.65 0.719817768 22 2023-12-31T23:00:58Z
585 584 108 42 0.4425 315 309 47149 1620 0.44825 328 26332 1104 0.44975 317 903 0.446 323 1253 40.66666667 39.34977578 72.52747253 3.376906318 0.23 0.4 0.77293578 23 2023-12-31T23:00:58Z
586 585 106 38 0.4525 316 316 55572 1746 0.44725 308.5 22104 872 0.45025 319.25 901 0.457 322 1060 48 28.66449511 53.80434783 3.553299492 0.24 0.25 0.70246085 24 2023-12-31T23:00:58Z
587 586 95 106 0.44225 319 308 48628 1624 0.4415 313.75 22168 936 0.4405 311.25 831 0.4425 302 1082 45.83333333 30.91537133 55.08982036 2.595051298 0.31 0.62 0.659142212 24 2023-12-31T23:00:58Z
588 587 109 83 0.44575 319 310 47117 1493 0.45575 323.75 22554 905 0.451 313.75 742 0.4485 321.5 1407 37.66666667 38.27092511 68.61702128 2.542841349 0.2 0.52 0.794642857 20 2023-12-31T23:00:58Z
589 588 108 40 0.4505 313 325 50590 1738 0.463 323.75 24612 990 0.4535 330.75 980 0.454 310.5 1110 42.16666667 32.67273701 60.77348066 2.448775612 0.4 0.96 0.652968037 21 2023-12-31T23:00:58Z
590 589 108 98 0.44 313 310 58965 1899 0.44425 307.5 20657 896 0.44075 315 900 0.4385 311 970 45.16666667 34.5890411 68.42105263 2.608695652 0.31 0.63 0.671232877 20 2023-12-31T23:00:58Z
591 590 108 37 0.43475 312 316 51972 1785 0.42375 313.75 22811 882 0.4255 311.25 998 0.4265 307 1036 47.66666667 25.35294118 10.75697211 3.107344633 0.21 0.68 0.751162791 23 2023-12-31T23:00:58Z
592 591 106 81 0.44325 312 308 48210 1564 0.43825 304.5 21541 856 0.447 306.25 863 0.45 309.5 1204 54.16666667 31.80515759 68.18181818 2.994011976 0.4 0.41 0.630044843 23 2023-12-31T23:00:59Z
593 592 98 113 0.435 316 306 51788 1421 0.435325 312 28196 959 0.431 316.5 766 0.445 329 1488 51.66666667 29.67479675 56.32183908 3.317535545 0.31 0.68 0.645833333 26 2023-12-31T23:00:59Z
594 593 109 90 0.44775 315 318 51554 1804 0.4435 313.25 19436 780 0.448 322.5 1169 0.444 322.5 1575 55 30.73420603 62.94117647 2.229299363 0.31 0.56 0.756818182 24 2023-12-31T23:00:59Z
595 594 106 128 0.43 315 324 48178 1642 0.437 314 21252 817 0.43475 325.75 896 0.4305 316.5 1026 56.33333333 47.47126437 71.72774869 2.561183836 0.29 0.82 0.757719715 20 2023-12-31T23:00:59Z
596 595 72 28 0.44175 315 314 49770 1577 0.43525 308 21573 788 0.43975 310.25 956 0.438 305.5 1054 69.16666667 23.52610893 42.85714286 1.905311778 0.41 0.58 0.657407407 20 2023-12-31T23:00:59Z
597 596 109 45 0.45375 317 317 54801 1746 0.456 311.5 22859 821 0.45875 318.75 894 0.466 311 1292 46.66666667 32.31347289 56.59340659 2.850877193 0.35 1.04 0.586363636 20 2023-12-31T23:00:59Z
598 597 108 140 0.443 316 310 48596 1521 0.438 306 17796 693 0.4454 309.5 905 0.4505 305 1246 36 37.9640045 66.10169492 2.652200121 0.27 0.89 0.774774775 20 2023-12-31T23:00:59Z
599 598 105 61 0.44275 312 320 51779 1687 0.44225 310 23213 849 0.43775 312.25 852 0.4425 310.5 1312 40 31.84892897 63.0952381 3.229527105 0.34 0.85 0.727472527 20 2023-12-31T23:00:59Z
600 599 106 43 0.44925 315 320 48226 1920 0.442 302.75 19821 850 0.4545 314.5 961 0.4535 314 1407 47.5 27.84448256 55.62130178 3.310430981 0.37 0.95 0.838074398 27 2023-12-31T23:00:59Z
601 600 108 107 0.43925 313 311 51297 1846 0.44475 318.75 25125 970 0.442 318 934 0.449 307 1568 58.33333333 26.55016911 56.21621622 3.496503497 0.26 0.82 0.836689038 23 2023-12-31T23:00:59Z
602 601 109 141 0.43358 319 320 49046 1906 0.43375 314.75 22104 970 0.43475 313.25 905 0.442 318 1494 52.83333333 29.68568102 57.64705882 2.972651605 0.29 0.46 0.743764172 22 2023-12-31T23:01:00Z
603 602 108 106 0.436 314 312 47294 1619 0.44075 313 23406 971 0.442 310 830 0.447 311.5 1180 41.48333333 39.32960894 62.16216216 3.06122449 0.29 0.57 0.581018519 22 2023-12-31T23:01:00Z
604 603 108 32 0.45 313 311 49834 1456 0.443 313 23470 896 0.4455 306.5 896 0.439 303 1046 42.33333333 22.41758242 45.65217391 2.25921522 0.27 0.58 0.507042254 22 2023-12-31T23:01:00Z
605 604 108 101 0.4375 313 307 43088 1497 0.433 306 19098 919 0.4385 304.5 761 0.4455 314.5 984 56.33333333 33.39050886 61.32596685 4.318181818 0.21 0.62 0.784269663 21 2023-12-31T23:01:00Z
606 605 102 31 0.463 317 323 58836 2034 0.45675 313.75 24885 1004 0.463 316.5 896 0.4715 317.5 1295 37.83333333 31.44618834 61.40350877 3.87409201 0.28 0.5 0.617521368 25 2023-12-31T23:01:00Z
607 606 108 58 0.455 316 315 43902 1586 0.4455 317.25 21011 912 0.4465 319.75 800 0.457 317 1281 47.16666667 33.29639889 59.01639344 3.165298945 0.42 0.76 0.768018018 22 2023-12-31T23:01:00Z
608 607 105 33 0.437 314 320 49721 1678 0.42875 305 19468 761 0.436 315.75 1001 0.4435 313.5 1533 47.66666667 32.58491652 57.06214689 2.826855124 0.23 0.72 0.724137931 25 2023-12-31T23:01:00Z
609 608 103 39 0.4345 313 295 44111 1720 0.433 304 20239 844 0.44 300.75 808 0.451 312.5 1785 61.66666667 38.69688385 71.83908046 2.915451895 0.24 0.69 0.771167048 23 2023-12-31T23:01:00Z
610 609 106 95 0.4515 316 318 54334 1918 0.44775 316.5 21428 877 0.4465 328 1087 0.4485 311 1656 50.16666667 38.71706758 74.70588235 2.241594022 0.29 0.84 0.736842105 20 2023-12-31T23:01:00Z
611 610 80 59 0.43825 312 310 44336 1418 0.43025 304.5 22136 794 0.42875 322.75 880 0.434 318.5 1435 50.16666667 38.54282536 57.51295337 1.938187533 0.21 0.43 0.741935484 21 2023-12-31T23:01:00Z
612 611 106 26 0.42875 316 296 43998 1582 0.4305 305 21541 802 0.43075 299.25 642 0.437 303 1176 45.33333333 31.60046729 49.0797546 3.823529412 0.32 0.45 0.692307692 22 2023-12-31T23:01:01Z
613 612 108 12 0.4445 315 312 47953 1549 0.4465 325 28309 978 0.45645 319.5 900 0.455 317.5 1508 56.16666667 40.43047941 56.98324022 3.105590062 0.31 0.63 0.606334842 21 2023-12-31T23:01:01Z
614 613 106 55 0.45125 313 323 48387 1923 0.45475 326.5 20376 966 0.45325 328.5 852 0.4635 330.5 1183 47.16666667 36.29873696 58.73015873 3.504928806 0.18 0.53 0.644396552 20 2023-12-31T23:01:01Z
615 614 98 96 0.4365 313 317 55621 2174 0.436 314.25 26878 1040 0.4375 325.5 1057 0.448 326.5 1642 64.83333333 20.83798883 52.43243243 3.479177649 0.24 0.63 0.604651163 20 2023-12-31T23:01:01Z
616 615 100 14 0.439 316 322 47891 1657 0.44 302.75 21622 1003 0.44 318.75 1064 0.442 320 1606 41.66666667 37.01007839 63.63636364 3.732162459 0.32 0.44 0.750572082 20 2023-12-31T23:01:01Z
617 616 102 32 0.43925 313 317 50782 1458 0.4485 311 22602 696 0.4375 315.5 1027 0.4445 310.5 1155 61 32.93378995 65.29411765 2.967898243 0.3 0.75 0.727688787 21 2023-12-31T23:01:01Z
618 617 106 95 0.43675 316 328 52631 1981 0.432 313.25 25399 1080 0.42975 316.75 901 0.4375 310 1600 56.33333333 29.64244521 56.90607735 4.337202199 0.37 0.68 0.585648148 20 2023-12-31T23:01:01Z
619 618 80 48 0.44725 320 334 54383 1783 0.44975 323 30093 998 0.4505 332.5 1134 0.445 330 2002 69.13333333 18.61495845 34.5 6.568516421 0.15 0.3 0.583333333 22 2023-12-31T23:01:01Z
620 619 104 63 0.44 314 321 48757 1550 0.4335 316 22634 1024 0.4385 323 924 0.4375 313 1516 57.5 33.10810811 57.83783784 2.618384401 0.29 0.72 0.881006865 20 2023-12-31T23:01:01Z
621 620 108 119 0.42875 313 317 48564 1880 0.423 305.75 21059 877 0.41875 303.25 894 0.432 299 1155 53.83333333 30.1183432 58.43373494 3.29807094 0.36 0.6 0.838337182 23 2023-12-31T23:01:01Z
622 621 106 26 0.44375 313 316 48001 1568 0.4405 310 23322 945 0.43975 307.25 950 0.444 306 1382 46.16666667 33.78995434 83.95061728 2.977232925 0.37 0.79 0.656750572 23 2023-12-31T23:01:02Z
623 622 120 33 0.40975 306 302 46956 1790 0.4125 304.75 25174 1076 0.41025 306.25 824 0.426 313 1200 61.83333333 25.627554 54.49438202 4.171779141 0.34 0.56 0.725925926 11 2023-12-31T23:01:02Z
624 623 90 57 0.43875 314 321 51924 1684 0.44525 315 18519 870 0.438 303.5 845 0.444 303 1558 56.16666667 39.41441441 54.45026178 2.259887006 0.21 0.56 0.662131519 20 2023-12-31T23:01:02Z
625 624 95 104 0.42825 312 309 46780 1633 0.426 302.5 19612 842 0.428 310.25 910 0.4335 315.5 1362 54.83333333 29.16666667 61.17647059 2.315562736 0.48 0.48 0.738317757 20 2023-12-31T23:01:02Z
626 625 106 79 0.4435 315 313 46506 1568 0.441 306.5 21702 926 0.43775 318 922 0.433 307 1365 58.18333333 35.38979248 66.28571429 3.357817419 0.29 0.61 0.702517162 23 2023-12-31T23:01:02Z
627 626 102 22 0.44175 317 320 56328 2116 0.44325 320 27103 1101 0.443 321.5 1076 0.439 304.5 1222 64.56666667 32.97692741 69.78021978 3.896103896 0.41 0.65 0.690045249 25 2023-12-31T23:01:02Z
628 627 98 48 0.42375 315 306 42150 1470 0.42575 313.5 19499 901 0.42475 308.5 897 0.4335 323.5 1813 60.16666667 26.96365768 1387.428571 3.179364127 0.35 0.64 0.779342723 20 2023-12-31T23:01:02Z
629 628 102 166 0.43425 313 314 45590 1446 0.42875 304.5 18117 696 0.4335 309.75 751 0.4365 309 1060 45.83333333 34.15898618 59.1160221 2.20214568 0.28 0.8 0.728971963 20 2023-12-31T23:01:02Z
630 629 102 11 0.4290525 315 307 52310 1687 0.43625 300.5 22731 796 0.43075 304.25 826 0.43 316.5 1250 39 35.98442714 63.33333333 3.382789318 0.23 0.56 0.557177616 22 2023-12-31T23:01:02Z
631 630 98 21 0.4295 316 314 48644 1722 0.571333333 417.6666667 22420 833 0.43075 313.5 1015 0.4285 313 1572 63.66666667 38.08156232 50.53763441 1.714285714 0.33 0.57 0.779859485 20 2023-12-31T23:01:02Z
632 631 100 41 0.4555 314 315 48580 1419 0.455 303.5 22296 772 0.4575 308.75 786 0.4535 293.5 886 51.5 33.53624792 62.5 1.97330238 0.41 0.79 0.655701754 20 2023-12-31T23:01:03Z
633 632 100 87 0.4355 316 305 43548 1423 0.437 299.75 19483 807 0.439 307.5 882 0.434 299.5 1568 49 30.04587156 61.84971098 2.502910361 0.31 0.62 0.553287982 23 2023-12-31T23:01:03Z
634 633 94 97 0.4215 312 297 43580 1516 0.424 298.5 20384 940 0.42425 307.5 887 0.428 299.5 1264 57 27.65196663 54.03726708 2.582582583 0.34 0.62 0.649411765 21 2023-12-31T23:01:03Z
635 634 108 125 0.445 314 312 48371 1568 0.44425 305 21750 891 0.44375 313.5 887 0.4425 312 1040 47.83333333 26.51428571 54.11764706 3.085714286 0.44 0.68 0.838137472 20 2023-12-31T23:01:03Z
636 635 110 128 0.44625 314 317 47664 1594 0.4505 315.5 22811 884 0.4395 322.25 905 0.4555 322.5 1064 40.33333333 26.23220153 62.29508197 2.625298329 0.44 0.83 0.789587852 21 2023-12-31T23:01:03Z
637 636 96 75 0.43525 311 314 45494 1620 0.43475 311.25 20512 966 0.43875 306.75 943 0.438 305.5 1631 54.16666667 35.93450028 69.02173913 2.464985994 0.32 0.5 0.826789838 21 2023-12-31T23:01:03Z
638 637 92 34 0.438 316 311 52100 1724 0.43825 306 23438 770 0.43775 311.75 688 0.4415 314 1841 56.5 26.19324796 56.21301775 3.669190448 0.31 0.8 0.592255125 20 2023-12-31T23:01:03Z
639 638 95 85 0.44625 314 334 59334 2170 0.4455 316.25 25094 912 0.447 330.25 994 0.443 322 1470 66.16666667 23.63936229 52.54237288 2.956225128 0.32 0.5 0.606334842 20 2023-12-31T23:01:03Z
640 639 104 106 0.4425 314 316 48258 1799 0.444 326 22795 989 0.44475 316.25 919 0.444 314 1421 53.33333333 38.73925501 62.30366492 2.514619883 0.38 0.66 0.965292842 20 2023-12-31T23:01:03Z
641 640 104 92 0.43025 313 310 49126 1526 0.43025 311.75 24418 1003 0.4305 303.25 931 0.4295 300 1197 56.33333333 26.87981054 51.80722892 3.473945409 0.18 0.61 0.686363636 20 2023-12-31T23:01:03Z
642 641 106 40 0.4465 315 309 47053 1668 0.44725 316.75 19050 761 0.45225 313.75 884 0.454 321 1558 33.16666667 32.25446429 63.12849162 3.429504627 0.41 0.5 0.827740492 22 2023-12-31T23:01:04Z
643 642 105 97 0.43975 314 298 45638 1517 0.44225 309.5 21380 854 0.4425 313.25 810 0.4555 315 1190 35.66666667 24.8603352 49.46236559 4.332344214 0.37 0.77 0.919354839 20 2023-12-31T23:01:04Z
644 643 102 36 0.4205 313 310 47374 1769 0.42125 299 19516 863 0.4215 306.5 873 0.4305 315 1554 37.83333333 27.27272727 55.75757576 3.013530135 0.31 0.74 0.847575058 21 2023-12-31T23:01:04Z
645 644 105 27 0.437 311 311 46522 1678 0.4355 300 18214 842 0.44325 316.5 749 0.441 317 1158 48.5 33.66164542 62.20930233 2.537231109 0.33 0.6 0.647727273 20 2023-12-31T23:01:04Z
646 645 98 23 0.432 313 302 43146 1382 0.42925 297.75 18551 747 0.434 310.5 901 0.432 295.5 1060 47.66666667 24.85448196 57.05882353 2.274052478 0.27 0.85 0.792147806 21 2023-12-31T23:01:04Z
647 646 100 16 0.42925 314 308 46274 1519 0.43475 321.75 27682 1018 0.42875 310.5 850 0.4305 318 1180 69.5 20.92074592 53.33333333 3.341584158 0.36 0.76 0.642523364 19 2023-12-31T23:01:04Z
648 647 100 66 0.423 312 298 44208 1608 0.42525 304.75 23690 980 0.42275 296.5 751 0.422 286.5 1316 68.16666667 27.34693878 53.59116022 2.89017341 0.38 0.6 0.557177616 22 2023-12-31T23:01:04Z
649 648 102 19 0.42525 314 308 47245 1535 0.4185 311.25 24611 984 0.419 304.5 814 0.419 301.5 998 51.66666667 35.36299766 60.98901099 2.524630542 0.31 0.71 0.623287671 22 2023-12-31T23:01:04Z
650 649 98 32 0.46625 312 315 50139 1561 0.467 314.25 23904 910 0.46525 316.5 838 0.467 304 1152 35.83333333 47.32662785 60.52631579 1.797752809 0.48 0.65 0.667396061 25 2023-12-31T23:01:04Z
651 650 98 121 0.432 312 314 51747 1549 0.43525 312.75 26510 872 0.433 315.75 964 0.443 317.5 1113 56.25 32.49266862 49.7005988 2.857142857 0.5 0.22 0.824601367 21 2023-12-31T23:01:04Z
652 651 98 25 0.424 315 306 42278 1433 0.424 307.25 19901 854 0.426 307.5 709 0.431 304 1046 61.68333333 37.33955659 68.13186813 2.923976608 0.27 0.69 0.700471698 22 2023-12-31T23:01:05Z
653 652 88 17 0.44425 318 314 50548 1496 0.4435 311.75 24853 864 0.4465 315.25 772 0.4475 313 1330 47.5 26.15384615 54.54545455 3.281334051 0.46 0.91 0.74715262 20 2023-12-31T23:01:05Z
654 653 90 95 0.42675 311 296 42970 1354 0.4245 294.25 19676 770 0.427 301 691 0.4275 287.5 1040 52.5 31.88073394 56.81818182 2.099580084 0.49 0.8 0.555288462 19 2023-12-31T23:01:05Z

282
data/transactions.csv Normal file
View File

@ -0,0 +1,282 @@
date,amount,category
2020-01-01,89.92,groceries
2020-01-01,48.74,entertainment
2020-01-01,39.08,groceries
2020-01-01,48.36,groceries
2020-01-01,77.36,groceries
2020-01-01,73.46,groceries
2020-01-01,57.16,groceries
2020-01-01,75.94,groceries
2020-02-01,76.29,healthcare
2020-02-01,16.09,entertainment
2020-02-01,82.62,groceries
2020-02-01,21.61,utilities
2020-02-01,43.55,entertainment
2020-02-01,28.57,car
2020-02-01,86.28,groceries
2020-02-01,43.51,housing
2020-02-01,7.93,car
2020-03-01,51.83,groceries
2020-03-01,48.8,travel
2020-03-01,30.33,groceries
2020-03-01,85.14,groceries
2020-03-01,96.06,groceries
2020-03-01,66.16,housing
2020-03-01,53.73,groceries
2020-03-01,64.25,healthcare
2020-03-01,94.17,groceries
2020-04-01,65.61,housing
2020-04-01,11.49,travel
2020-04-01,88.06,groceries
2020-04-01,58.63,groceries
2020-04-01,28.14,groceries
2020-04-01,32.49,utilities
2020-04-01,6.55,groceries
2020-04-01,94.11,groceries
2020-05-01,1.19,groceries
2020-05-01,56.66,groceries
2020-05-01,49.05,entertainment
2020-05-01,41.46,healthcare
2020-05-01,71.48,entertainment
2020-05-01,32.84,groceries
2020-05-01,78.47,entertainment
2020-05-01,29.33,groceries
2020-06-01,87.67,groceries
2020-06-01,44.3,housing
2020-06-01,56.0,entertainment
2020-06-01,66.25,travel
2020-06-01,97.5,healthcare
2020-06-01,29.02,groceries
2020-06-01,97.86,groceries
2020-07-01,47.77,housing
2020-07-01,80.89,groceries
2020-07-01,21.09,utilities
2020-07-01,4.62,car
2020-07-01,96.13,utilities
2020-07-01,12.53,groceries
2020-07-01,35.77,entertainment
2020-08-01,82.73,healthcare
2020-08-01,47.77,groceries
2020-08-01,74.13,groceries
2020-08-01,38.33,entertainment
2020-08-01,65.55,housing
2020-08-01,6.29,groceries
2020-08-01,25.23,groceries
2020-09-01,49.51,travel
2020-09-01,17.92,entertainment
2020-09-01,74.69,travel
2020-09-01,89.4,groceries
2020-09-01,55.0,travel
2020-09-01,81.93,utilities
2020-09-01,57.69,healthcare
2020-09-01,22.22,entertainment
2020-09-01,13.22,entertainment
2020-09-01,77.76,groceries
2020-09-01,13.22,groceries
2020-10-01,57.58,groceries
2020-10-01,4.0,car
2020-10-01,20.48,utilities
2020-10-01,15.74,utilities
2020-10-01,59.31,entertainment
2020-10-01,15.31,groceries
2020-10-01,96.55,groceries
2020-10-01,91.65,entertainment
2020-10-01,50.04,groceries
2020-10-01,80.78,groceries
2020-11-01,71.81,groceries
2020-11-01,24.68,housing
2020-11-01,69.69,healthcare
2020-11-01,56.34,groceries
2020-12-01,66.58,entertainment
2020-12-01,76.24,utilities
2020-12-01,81.17,groceries
2020-12-01,47.01,car
2020-12-01,71.57,groceries
2020-12-01,73.81,utilities
2020-12-01,9.22,healthcare
2020-12-01,32.22,travel
2020-12-01,5.72,entertainment
2020-12-01,73.53,groceries
2021-01-01,70.84,entertainment
2021-01-01,99.42,entertainment
2021-01-01,37.04,healthcare
2021-01-01,90.98,healthcare
2021-01-01,58.67,healthcare
2021-01-01,92.68,groceries
2021-01-01,65.82,groceries
2021-01-01,99.58,groceries
2021-01-01,16.65,healthcare
2021-01-01,10.93,groceries
2021-02-01,33.45,groceries
2021-02-01,70.84,travel
2021-02-01,34.73,entertainment
2021-02-01,46.42,groceries
2021-02-01,91.4,healthcare
2021-02-01,71.29,travel
2021-02-01,21.49,entertainment
2021-02-01,18.48,groceries
2021-02-01,55.53,healthcare
2021-02-01,77.15,groceries
2021-03-01,43.56,groceries
2021-03-01,83.79,healthcare
2021-03-01,84.38,travel
2021-03-01,24.06,groceries
2021-03-01,56.91,groceries
2021-03-01,9.95,travel
2021-03-01,17.04,housing
2021-03-01,65.6,entertainment
2021-03-01,48.31,housing
2021-03-01,53.55,healthcare
2021-04-01,85.99,car
2021-04-01,59.48,travel
2021-04-01,1.1,travel
2021-04-01,54.48,groceries
2021-04-01,14.25,car
2021-04-01,24.01,groceries
2021-04-01,66.32,healthcare
2021-04-01,38.34,healthcare
2021-04-01,62.12,groceries
2021-04-01,14.14,housing
2021-04-01,64.07,groceries
2021-04-01,97.5,housing
2021-04-01,97.26,entertainment
2021-04-01,90.99,entertainment
2021-05-01,64.94,car
2021-05-01,36.64,groceries
2021-05-01,70.0,groceries
2021-05-01,90.62,groceries
2021-05-01,92.65,groceries
2021-05-01,77.18,groceries
2021-05-01,57.91,groceries
2021-05-01,43.15,housing
2021-06-01,83.8,groceries
2021-06-01,49.62,entertainment
2021-06-01,71.06,groceries
2021-06-01,33.25,groceries
2021-06-01,53.4,groceries
2021-06-01,4.61,entertainment
2021-06-01,2.51,utilities
2021-06-01,56.95,entertainment
2021-06-01,82.12,travel
2021-06-01,29.88,entertainment
2021-06-01,1.36,utilities
2021-07-01,40.01,housing
2021-07-01,47.98,groceries
2021-07-01,45.75,groceries
2021-07-01,95.4,groceries
2021-07-01,90.35,groceries
2021-07-01,82.36,groceries
2021-07-01,92.92,car
2021-07-01,16.85,entertainment
2021-07-01,82.77,groceries
2021-07-01,63.85,utilities
2021-07-01,10.82,entertainment
2021-08-01,42.11,groceries
2021-08-01,10.76,groceries
2021-08-01,49.48,entertainment
2021-08-01,53.11,groceries
2021-08-01,51.99,groceries
2021-08-01,75.16,utilities
2021-08-01,53.6,groceries
2021-08-01,37.27,groceries
2021-08-01,11.23,groceries
2021-09-01,45.43,groceries
2021-09-01,73.96,groceries
2021-09-01,45.1,groceries
2021-09-01,25.35,groceries
2021-09-01,68.04,groceries
2021-09-01,62.09,groceries
2021-09-01,66.98,utilities
2021-09-01,32.28,groceries
2021-09-01,19.8,entertainment
2021-09-01,69.23,groceries
2021-10-01,56.28,healthcare
2021-10-01,2.16,entertainment
2021-10-01,59.04,groceries
2021-10-01,89.95,groceries
2021-10-01,35.4,groceries
2021-10-01,75.07,entertainment
2021-10-01,34.26,groceries
2021-11-01,95.83,groceries
2021-11-01,9.02,utilities
2021-11-01,85.69,healthcare
2021-11-01,24.64,healthcare
2021-11-01,49.18,healthcare
2021-11-01,53.08,entertainment
2021-11-01,29.73,travel
2021-11-01,17.31,groceries
2021-11-01,76.38,groceries
2021-11-01,89.54,groceries
2021-12-01,53.16,groceries
2021-12-01,53.25,entertainment
2021-12-01,91.38,car
2021-12-01,77.33,entertainment
2021-12-01,85.64,groceries
2021-12-01,61.59,entertainment
2021-12-01,43.79,car
2021-12-01,44.01,travel
2021-12-01,13.41,healthcare
2022-01-01,96.68,housing
2022-01-01,18.45,groceries
2022-01-01,78.89,groceries
2022-01-01,6.87,healthcare
2022-01-01,56.18,entertainment
2022-01-01,63.06,groceries
2022-01-01,15.97,groceries
2022-01-01,50.25,groceries
2022-01-01,58.76,groceries
2022-01-01,24.09,groceries
2022-01-01,31.04,groceries
2022-01-01,70.04,groceries
2022-01-01,25.06,groceries
2022-01-01,61.61,travel
2022-01-01,39.21,groceries
2022-01-01,11.46,groceries
2022-02-01,14.8,housing
2022-02-01,81.78,healthcare
2022-02-01,12.49,entertainment
2022-02-01,68.73,utilities
2022-02-01,30.66,groceries
2022-02-01,56.6,groceries
2022-02-01,73.0,entertainment
2022-02-01,7.76,travel
2022-03-01,22.03,groceries
2022-03-01,74.89,groceries
2022-03-01,27.95,groceries
2022-03-01,97.88,travel
2022-03-01,29.95,entertainment
2022-03-01,33.46,entertainment
2022-03-01,11.64,entertainment
2022-03-01,28.7,groceries
2022-03-01,84.11,groceries
2022-03-01,65.94,healthcare
2022-03-01,68.89,groceries
2022-03-01,99.26,car
2022-03-01,19.47,car
2022-03-01,79.93,entertainment
2022-04-01,81.24,groceries
2022-04-01,32.05,utilities
2022-04-01,74.43,utilities
2022-04-01,92.54,entertainment
2022-04-01,67.87,entertainment
2022-04-01,49.54,groceries
2022-04-01,72.31,entertainment
2022-04-01,74.85,groceries
2022-04-01,56.05,groceries
2022-04-01,69.44,travel
2022-04-01,85.56,groceries
2022-05-01,14.99,healthcare
2022-05-01,29.46,groceries
2022-05-01,17.41,groceries
2022-05-01,83.34,groceries
2022-05-01,40.07,groceries
2022-05-01,78.19,entertainment
2022-05-01,32.96,housing
2022-05-01,89.92,entertainment
2022-06-01,86.82,groceries
2022-06-01,69.78,entertainment
2022-06-01,66.43,groceries
2022-06-01,58.21,groceries
2022-06-01,73.24,groceries
2022-06-01,19.85,groceries
2022-06-01,47.97,housing
1 date amount category
2 2020-01-01 89.92 groceries
3 2020-01-01 48.74 entertainment
4 2020-01-01 39.08 groceries
5 2020-01-01 48.36 groceries
6 2020-01-01 77.36 groceries
7 2020-01-01 73.46 groceries
8 2020-01-01 57.16 groceries
9 2020-01-01 75.94 groceries
10 2020-02-01 76.29 healthcare
11 2020-02-01 16.09 entertainment
12 2020-02-01 82.62 groceries
13 2020-02-01 21.61 utilities
14 2020-02-01 43.55 entertainment
15 2020-02-01 28.57 car
16 2020-02-01 86.28 groceries
17 2020-02-01 43.51 housing
18 2020-02-01 7.93 car
19 2020-03-01 51.83 groceries
20 2020-03-01 48.8 travel
21 2020-03-01 30.33 groceries
22 2020-03-01 85.14 groceries
23 2020-03-01 96.06 groceries
24 2020-03-01 66.16 housing
25 2020-03-01 53.73 groceries
26 2020-03-01 64.25 healthcare
27 2020-03-01 94.17 groceries
28 2020-04-01 65.61 housing
29 2020-04-01 11.49 travel
30 2020-04-01 88.06 groceries
31 2020-04-01 58.63 groceries
32 2020-04-01 28.14 groceries
33 2020-04-01 32.49 utilities
34 2020-04-01 6.55 groceries
35 2020-04-01 94.11 groceries
36 2020-05-01 1.19 groceries
37 2020-05-01 56.66 groceries
38 2020-05-01 49.05 entertainment
39 2020-05-01 41.46 healthcare
40 2020-05-01 71.48 entertainment
41 2020-05-01 32.84 groceries
42 2020-05-01 78.47 entertainment
43 2020-05-01 29.33 groceries
44 2020-06-01 87.67 groceries
45 2020-06-01 44.3 housing
46 2020-06-01 56.0 entertainment
47 2020-06-01 66.25 travel
48 2020-06-01 97.5 healthcare
49 2020-06-01 29.02 groceries
50 2020-06-01 97.86 groceries
51 2020-07-01 47.77 housing
52 2020-07-01 80.89 groceries
53 2020-07-01 21.09 utilities
54 2020-07-01 4.62 car
55 2020-07-01 96.13 utilities
56 2020-07-01 12.53 groceries
57 2020-07-01 35.77 entertainment
58 2020-08-01 82.73 healthcare
59 2020-08-01 47.77 groceries
60 2020-08-01 74.13 groceries
61 2020-08-01 38.33 entertainment
62 2020-08-01 65.55 housing
63 2020-08-01 6.29 groceries
64 2020-08-01 25.23 groceries
65 2020-09-01 49.51 travel
66 2020-09-01 17.92 entertainment
67 2020-09-01 74.69 travel
68 2020-09-01 89.4 groceries
69 2020-09-01 55.0 travel
70 2020-09-01 81.93 utilities
71 2020-09-01 57.69 healthcare
72 2020-09-01 22.22 entertainment
73 2020-09-01 13.22 entertainment
74 2020-09-01 77.76 groceries
75 2020-09-01 13.22 groceries
76 2020-10-01 57.58 groceries
77 2020-10-01 4.0 car
78 2020-10-01 20.48 utilities
79 2020-10-01 15.74 utilities
80 2020-10-01 59.31 entertainment
81 2020-10-01 15.31 groceries
82 2020-10-01 96.55 groceries
83 2020-10-01 91.65 entertainment
84 2020-10-01 50.04 groceries
85 2020-10-01 80.78 groceries
86 2020-11-01 71.81 groceries
87 2020-11-01 24.68 housing
88 2020-11-01 69.69 healthcare
89 2020-11-01 56.34 groceries
90 2020-12-01 66.58 entertainment
91 2020-12-01 76.24 utilities
92 2020-12-01 81.17 groceries
93 2020-12-01 47.01 car
94 2020-12-01 71.57 groceries
95 2020-12-01 73.81 utilities
96 2020-12-01 9.22 healthcare
97 2020-12-01 32.22 travel
98 2020-12-01 5.72 entertainment
99 2020-12-01 73.53 groceries
100 2021-01-01 70.84 entertainment
101 2021-01-01 99.42 entertainment
102 2021-01-01 37.04 healthcare
103 2021-01-01 90.98 healthcare
104 2021-01-01 58.67 healthcare
105 2021-01-01 92.68 groceries
106 2021-01-01 65.82 groceries
107 2021-01-01 99.58 groceries
108 2021-01-01 16.65 healthcare
109 2021-01-01 10.93 groceries
110 2021-02-01 33.45 groceries
111 2021-02-01 70.84 travel
112 2021-02-01 34.73 entertainment
113 2021-02-01 46.42 groceries
114 2021-02-01 91.4 healthcare
115 2021-02-01 71.29 travel
116 2021-02-01 21.49 entertainment
117 2021-02-01 18.48 groceries
118 2021-02-01 55.53 healthcare
119 2021-02-01 77.15 groceries
120 2021-03-01 43.56 groceries
121 2021-03-01 83.79 healthcare
122 2021-03-01 84.38 travel
123 2021-03-01 24.06 groceries
124 2021-03-01 56.91 groceries
125 2021-03-01 9.95 travel
126 2021-03-01 17.04 housing
127 2021-03-01 65.6 entertainment
128 2021-03-01 48.31 housing
129 2021-03-01 53.55 healthcare
130 2021-04-01 85.99 car
131 2021-04-01 59.48 travel
132 2021-04-01 1.1 travel
133 2021-04-01 54.48 groceries
134 2021-04-01 14.25 car
135 2021-04-01 24.01 groceries
136 2021-04-01 66.32 healthcare
137 2021-04-01 38.34 healthcare
138 2021-04-01 62.12 groceries
139 2021-04-01 14.14 housing
140 2021-04-01 64.07 groceries
141 2021-04-01 97.5 housing
142 2021-04-01 97.26 entertainment
143 2021-04-01 90.99 entertainment
144 2021-05-01 64.94 car
145 2021-05-01 36.64 groceries
146 2021-05-01 70.0 groceries
147 2021-05-01 90.62 groceries
148 2021-05-01 92.65 groceries
149 2021-05-01 77.18 groceries
150 2021-05-01 57.91 groceries
151 2021-05-01 43.15 housing
152 2021-06-01 83.8 groceries
153 2021-06-01 49.62 entertainment
154 2021-06-01 71.06 groceries
155 2021-06-01 33.25 groceries
156 2021-06-01 53.4 groceries
157 2021-06-01 4.61 entertainment
158 2021-06-01 2.51 utilities
159 2021-06-01 56.95 entertainment
160 2021-06-01 82.12 travel
161 2021-06-01 29.88 entertainment
162 2021-06-01 1.36 utilities
163 2021-07-01 40.01 housing
164 2021-07-01 47.98 groceries
165 2021-07-01 45.75 groceries
166 2021-07-01 95.4 groceries
167 2021-07-01 90.35 groceries
168 2021-07-01 82.36 groceries
169 2021-07-01 92.92 car
170 2021-07-01 16.85 entertainment
171 2021-07-01 82.77 groceries
172 2021-07-01 63.85 utilities
173 2021-07-01 10.82 entertainment
174 2021-08-01 42.11 groceries
175 2021-08-01 10.76 groceries
176 2021-08-01 49.48 entertainment
177 2021-08-01 53.11 groceries
178 2021-08-01 51.99 groceries
179 2021-08-01 75.16 utilities
180 2021-08-01 53.6 groceries
181 2021-08-01 37.27 groceries
182 2021-08-01 11.23 groceries
183 2021-09-01 45.43 groceries
184 2021-09-01 73.96 groceries
185 2021-09-01 45.1 groceries
186 2021-09-01 25.35 groceries
187 2021-09-01 68.04 groceries
188 2021-09-01 62.09 groceries
189 2021-09-01 66.98 utilities
190 2021-09-01 32.28 groceries
191 2021-09-01 19.8 entertainment
192 2021-09-01 69.23 groceries
193 2021-10-01 56.28 healthcare
194 2021-10-01 2.16 entertainment
195 2021-10-01 59.04 groceries
196 2021-10-01 89.95 groceries
197 2021-10-01 35.4 groceries
198 2021-10-01 75.07 entertainment
199 2021-10-01 34.26 groceries
200 2021-11-01 95.83 groceries
201 2021-11-01 9.02 utilities
202 2021-11-01 85.69 healthcare
203 2021-11-01 24.64 healthcare
204 2021-11-01 49.18 healthcare
205 2021-11-01 53.08 entertainment
206 2021-11-01 29.73 travel
207 2021-11-01 17.31 groceries
208 2021-11-01 76.38 groceries
209 2021-11-01 89.54 groceries
210 2021-12-01 53.16 groceries
211 2021-12-01 53.25 entertainment
212 2021-12-01 91.38 car
213 2021-12-01 77.33 entertainment
214 2021-12-01 85.64 groceries
215 2021-12-01 61.59 entertainment
216 2021-12-01 43.79 car
217 2021-12-01 44.01 travel
218 2021-12-01 13.41 healthcare
219 2022-01-01 96.68 housing
220 2022-01-01 18.45 groceries
221 2022-01-01 78.89 groceries
222 2022-01-01 6.87 healthcare
223 2022-01-01 56.18 entertainment
224 2022-01-01 63.06 groceries
225 2022-01-01 15.97 groceries
226 2022-01-01 50.25 groceries
227 2022-01-01 58.76 groceries
228 2022-01-01 24.09 groceries
229 2022-01-01 31.04 groceries
230 2022-01-01 70.04 groceries
231 2022-01-01 25.06 groceries
232 2022-01-01 61.61 travel
233 2022-01-01 39.21 groceries
234 2022-01-01 11.46 groceries
235 2022-02-01 14.8 housing
236 2022-02-01 81.78 healthcare
237 2022-02-01 12.49 entertainment
238 2022-02-01 68.73 utilities
239 2022-02-01 30.66 groceries
240 2022-02-01 56.6 groceries
241 2022-02-01 73.0 entertainment
242 2022-02-01 7.76 travel
243 2022-03-01 22.03 groceries
244 2022-03-01 74.89 groceries
245 2022-03-01 27.95 groceries
246 2022-03-01 97.88 travel
247 2022-03-01 29.95 entertainment
248 2022-03-01 33.46 entertainment
249 2022-03-01 11.64 entertainment
250 2022-03-01 28.7 groceries
251 2022-03-01 84.11 groceries
252 2022-03-01 65.94 healthcare
253 2022-03-01 68.89 groceries
254 2022-03-01 99.26 car
255 2022-03-01 19.47 car
256 2022-03-01 79.93 entertainment
257 2022-04-01 81.24 groceries
258 2022-04-01 32.05 utilities
259 2022-04-01 74.43 utilities
260 2022-04-01 92.54 entertainment
261 2022-04-01 67.87 entertainment
262 2022-04-01 49.54 groceries
263 2022-04-01 72.31 entertainment
264 2022-04-01 74.85 groceries
265 2022-04-01 56.05 groceries
266 2022-04-01 69.44 travel
267 2022-04-01 85.56 groceries
268 2022-05-01 14.99 healthcare
269 2022-05-01 29.46 groceries
270 2022-05-01 17.41 groceries
271 2022-05-01 83.34 groceries
272 2022-05-01 40.07 groceries
273 2022-05-01 78.19 entertainment
274 2022-05-01 32.96 housing
275 2022-05-01 89.92 entertainment
276 2022-06-01 86.82 groceries
277 2022-06-01 69.78 entertainment
278 2022-06-01 66.43 groceries
279 2022-06-01 58.21 groceries
280 2022-06-01 73.24 groceries
281 2022-06-01 19.85 groceries
282 2022-06-01 47.97 housing

BIN
data/transactions.csv.gz Normal file

Binary file not shown.

20
environment/README.md Normal file
View File

@ -0,0 +1,20 @@
# Environment Setup
## Installation with Anaconda/Miniconda
Run the two commands from the root directory.
```shell
conda env create -f ./environment/conda.yaml
conda activate dash-app-tutorial
```
## Installation with Pip
**Note:** Python >= 3.9 is required to use the [modern style](https://peps.python.org/pep-0585/) of type annotations.
Run the command from the root directory.
```shell
python -m pip install -r ./environment/requirements.txt
```

6
environment/conda.yaml Normal file
View File

@ -0,0 +1,6 @@
name: dash-app-tutorial
dependencies:
- python>=3.9
- pip
- pip:
- -r requirements.txt

View File

@ -0,0 +1,2 @@
black
pylint

View File

@ -0,0 +1,7 @@
Babel
dash
dash-bootstrap-components
pandas
pandas-stubs
plotly
python-i18n[YAML]

View File

@ -0,0 +1,222 @@
# don't import any costly modules
import sys
import os
is_pypy = '__pypy__' in sys.builtin_module_names
def warn_distutils_present():
if 'distutils' not in sys.modules:
return
if is_pypy and sys.version_info < (3, 7):
# PyPy for 3.6 unconditionally imports distutils, so bypass the warning
# https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250
return
import warnings
warnings.warn(
"Distutils was imported before Setuptools, but importing Setuptools "
"also replaces the `distutils` module in `sys.modules`. This may lead "
"to undesirable behaviors or errors. To avoid these issues, avoid "
"using distutils directly, ensure that setuptools is installed in the "
"traditional way (e.g. not an editable install), and/or make sure "
"that setuptools is always imported before distutils."
)
def clear_distutils():
if 'distutils' not in sys.modules:
return
import warnings
warnings.warn("Setuptools is replacing distutils.")
mods = [
name
for name in sys.modules
if name == "distutils" or name.startswith("distutils.")
]
for name in mods:
del sys.modules[name]
def enabled():
"""
Allow selection of distutils by environment variable.
"""
which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'local')
return which == 'local'
def ensure_local_distutils():
import importlib
clear_distutils()
# With the DistutilsMetaFinder in place,
# perform an import to cause distutils to be
# loaded from setuptools._distutils. Ref #2906.
with shim():
importlib.import_module('distutils')
# check that submodules load as expected
core = importlib.import_module('distutils.core')
assert '_distutils' in core.__file__, core.__file__
assert 'setuptools._distutils.log' not in sys.modules
def do_override():
"""
Ensure that the local copy of distutils is preferred over stdlib.
See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401
for more motivation.
"""
if enabled():
warn_distutils_present()
ensure_local_distutils()
class _TrivialRe:
def __init__(self, *patterns):
self._patterns = patterns
def match(self, string):
return all(pat in string for pat in self._patterns)
class DistutilsMetaFinder:
def find_spec(self, fullname, path, target=None):
# optimization: only consider top level modules and those
# found in the CPython test suite.
if path is not None and not fullname.startswith('test.'):
return
method_name = 'spec_for_{fullname}'.format(**locals())
method = getattr(self, method_name, lambda: None)
return method()
def spec_for_distutils(self):
if self.is_cpython():
return
import importlib
import importlib.abc
import importlib.util
try:
mod = importlib.import_module('setuptools._distutils')
except Exception:
# There are a couple of cases where setuptools._distutils
# may not be present:
# - An older Setuptools without a local distutils is
# taking precedence. Ref #2957.
# - Path manipulation during sitecustomize removes
# setuptools from the path but only after the hook
# has been loaded. Ref #2980.
# In either case, fall back to stdlib behavior.
return
class DistutilsLoader(importlib.abc.Loader):
def create_module(self, spec):
mod.__name__ = 'distutils'
return mod
def exec_module(self, module):
pass
return importlib.util.spec_from_loader(
'distutils', DistutilsLoader(), origin=mod.__file__
)
@staticmethod
def is_cpython():
"""
Suppress supplying distutils for CPython (build and tests).
Ref #2965 and #3007.
"""
return os.path.isfile('pybuilddir.txt')
def spec_for_pip(self):
"""
Ensure stdlib distutils when running under pip.
See pypa/pip#8761 for rationale.
"""
if self.pip_imported_during_build():
return
clear_distutils()
self.spec_for_distutils = lambda: None
@classmethod
def pip_imported_during_build(cls):
"""
Detect if pip is being imported in a build script. Ref #2355.
"""
import traceback
return any(
cls.frame_file_is_setup(frame) for frame, line in traceback.walk_stack(None)
)
@staticmethod
def frame_file_is_setup(frame):
"""
Return True if the indicated frame suggests a setup.py file.
"""
# some frames may not have __file__ (#2940)
return frame.f_globals.get('__file__', '').endswith('setup.py')
def spec_for_sensitive_tests(self):
"""
Ensure stdlib distutils when running select tests under CPython.
python/cpython#91169
"""
clear_distutils()
self.spec_for_distutils = lambda: None
sensitive_tests = (
[
'test.test_distutils',
'test.test_peg_generator',
'test.test_importlib',
]
if sys.version_info < (3, 10)
else [
'test.test_distutils',
]
)
for name in DistutilsMetaFinder.sensitive_tests:
setattr(
DistutilsMetaFinder,
f'spec_for_{name}',
DistutilsMetaFinder.spec_for_sensitive_tests,
)
DISTUTILS_FINDER = DistutilsMetaFinder()
def add_shim():
DISTUTILS_FINDER in sys.meta_path or insert_shim()
class shim:
def __enter__(self):
insert_shim()
def __exit__(self, exc, value, tb):
remove_shim()
def insert_shim():
sys.meta_path.insert(0, DISTUTILS_FINDER)
def remove_shim():
try:
sys.meta_path.remove(DISTUTILS_FINDER)
except ValueError:
pass

View File

@ -0,0 +1 @@
__import__('_distutils_hack').do_override()

View File

@ -0,0 +1 @@
import os; var = 'SETUPTOOLS_USE_DISTUTILS'; enabled = os.environ.get(var, 'local') == 'local'; enabled and __import__('_distutils_hack').add_shim();

View File

@ -0,0 +1 @@
pip

View File

@ -0,0 +1,20 @@
Copyright (c) 2008-present The pip developers (see AUTHORS.txt file)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,88 @@
Metadata-Version: 2.1
Name: pip
Version: 22.3.1
Summary: The PyPA recommended tool for installing Python packages.
Home-page: https://pip.pypa.io/
Author: The pip developers
Author-email: distutils-sig@python.org
License: MIT
Project-URL: Documentation, https://pip.pypa.io
Project-URL: Source, https://github.com/pypa/pip
Project-URL: Changelog, https://pip.pypa.io/en/stable/news/
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Software Development :: Build Tools
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.7
License-File: LICENSE.txt
pip - The Python Package Installer
==================================
.. image:: https://img.shields.io/pypi/v/pip.svg
:target: https://pypi.org/project/pip/
.. image:: https://readthedocs.org/projects/pip/badge/?version=latest
:target: https://pip.pypa.io/en/latest
pip is the `package installer`_ for Python. You can use pip to install packages from the `Python Package Index`_ and other indexes.
Please take a look at our documentation for how to install and use pip:
* `Installation`_
* `Usage`_
We release updates regularly, with a new version every 3 months. Find more details in our documentation:
* `Release notes`_
* `Release process`_
In pip 20.3, we've `made a big improvement to the heart of pip`_; `learn more`_. We want your input, so `sign up for our user experience research studies`_ to help us do it right.
**Note**: pip 21.0, in January 2021, removed Python 2 support, per pip's `Python 2 support policy`_. Please migrate to Python 3.
If you find bugs, need help, or want to talk to the developers, please use our mailing lists or chat rooms:
* `Issue tracking`_
* `Discourse channel`_
* `User IRC`_
If you want to get involved head over to GitHub to get the source code, look at our development documentation and feel free to jump on the developer mailing lists and chat rooms:
* `GitHub page`_
* `Development documentation`_
* `Development IRC`_
Code of Conduct
---------------
Everyone interacting in the pip project's codebases, issue trackers, chat
rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
.. _package installer: https://packaging.python.org/guides/tool-recommendations/
.. _Python Package Index: https://pypi.org
.. _Installation: https://pip.pypa.io/en/stable/installation/
.. _Usage: https://pip.pypa.io/en/stable/
.. _Release notes: https://pip.pypa.io/en/stable/news.html
.. _Release process: https://pip.pypa.io/en/latest/development/release-process/
.. _GitHub page: https://github.com/pypa/pip
.. _Development documentation: https://pip.pypa.io/en/latest/development
.. _made a big improvement to the heart of pip: https://pyfound.blogspot.com/2020/11/pip-20-3-new-resolver.html
.. _learn more: https://pip.pypa.io/en/latest/user_guide/#changes-to-the-pip-dependency-resolver-in-20-3-2020
.. _sign up for our user experience research studies: https://pyfound.blogspot.com/2020/03/new-pip-resolver-to-roll-out-this-year.html
.. _Python 2 support policy: https://pip.pypa.io/en/latest/development/release-process/#python-2-support
.. _Issue tracking: https://github.com/pypa/pip/issues
.. _Discourse channel: https://discuss.python.org/c/packaging
.. _User IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa
.. _Development IRC: https://kiwiirc.com/nextclient/#ircs://irc.libera.chat:+6697/pypa-dev
.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md

View File

@ -0,0 +1,992 @@
../../../bin/pip,sha256=7ch-OWJYPotxEtXTP48V4yRR_YV3RjVw7f5wxJJm0q4,249
../../../bin/pip3,sha256=7ch-OWJYPotxEtXTP48V4yRR_YV3RjVw7f5wxJJm0q4,249
../../../bin/pip3.11,sha256=7ch-OWJYPotxEtXTP48V4yRR_YV3RjVw7f5wxJJm0q4,249
pip-22.3.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
pip-22.3.1.dist-info/LICENSE.txt,sha256=Y0MApmnUmurmWxLGxIySTFGkzfPR_whtw0VtyLyqIQQ,1093
pip-22.3.1.dist-info/METADATA,sha256=a9COYc5qzklDgbGlrKYkypMXon4A6IDgpeUTWLr7zzY,4072
pip-22.3.1.dist-info/RECORD,,
pip-22.3.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip-22.3.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
pip-22.3.1.dist-info/entry_points.txt,sha256=ynZN1_707_L23Oa8_O5LOxEoccj1nDa4xHT5galfN7o,125
pip-22.3.1.dist-info/top_level.txt,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
pip/__init__.py,sha256=Z2hXGRMvmdhpmmqr0OW1fA2Jje8tnmU0uzibRoUF-w8,357
pip/__main__.py,sha256=mXwWDftNLMKfwVqKFWGE_uuBZvGSIiUELhLkeysIuZc,1198
pip/__pip-runner__.py,sha256=EnrfKmKMzWAdqg_JicLCOP9Y95Ux7zHh4ObvqLtQcjo,1444
pip/__pycache__/__init__.cpython-311.pyc,,
pip/__pycache__/__main__.cpython-311.pyc,,
pip/__pycache__/__pip-runner__.cpython-311.pyc,,
pip/_internal/__init__.py,sha256=nnFCuxrPMgALrIDxSoy-H6Zj4W4UY60D-uL1aJyq0pc,573
pip/_internal/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/__pycache__/build_env.cpython-311.pyc,,
pip/_internal/__pycache__/cache.cpython-311.pyc,,
pip/_internal/__pycache__/configuration.cpython-311.pyc,,
pip/_internal/__pycache__/exceptions.cpython-311.pyc,,
pip/_internal/__pycache__/main.cpython-311.pyc,,
pip/_internal/__pycache__/pyproject.cpython-311.pyc,,
pip/_internal/__pycache__/self_outdated_check.cpython-311.pyc,,
pip/_internal/__pycache__/wheel_builder.cpython-311.pyc,,
pip/_internal/build_env.py,sha256=gEAT8R6SuWbg2mcrsmOTKWMw_x5pedMzvSTxQS57JZs,10234
pip/_internal/cache.py,sha256=C3n78VnBga9rjPXZqht_4A4d-T25poC7K0qBM7FHDhU,10734
pip/_internal/cli/__init__.py,sha256=FkHBgpxxb-_gd6r1FjnNhfMOzAUYyXoXKJ6abijfcFU,132
pip/_internal/cli/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/cli/__pycache__/autocompletion.cpython-311.pyc,,
pip/_internal/cli/__pycache__/base_command.cpython-311.pyc,,
pip/_internal/cli/__pycache__/cmdoptions.cpython-311.pyc,,
pip/_internal/cli/__pycache__/command_context.cpython-311.pyc,,
pip/_internal/cli/__pycache__/main.cpython-311.pyc,,
pip/_internal/cli/__pycache__/main_parser.cpython-311.pyc,,
pip/_internal/cli/__pycache__/parser.cpython-311.pyc,,
pip/_internal/cli/__pycache__/progress_bars.cpython-311.pyc,,
pip/_internal/cli/__pycache__/req_command.cpython-311.pyc,,
pip/_internal/cli/__pycache__/spinners.cpython-311.pyc,,
pip/_internal/cli/__pycache__/status_codes.cpython-311.pyc,,
pip/_internal/cli/autocompletion.py,sha256=wY2JPZY2Eji1vhR7bVo-yCBPJ9LCy6P80iOAhZD1Vi8,6676
pip/_internal/cli/base_command.py,sha256=t1D5x40Hfn9HnPnMt-iSxvqL14nht2olBCacW74pc-k,7842
pip/_internal/cli/cmdoptions.py,sha256=Jlarlzz9qv9tC_tCaEbcc_jVvrPreFLBBUnDgoyWflw,29381
pip/_internal/cli/command_context.py,sha256=RHgIPwtObh5KhMrd3YZTkl8zbVG-6Okml7YbFX4Ehg0,774
pip/_internal/cli/main.py,sha256=ioJ8IVlb2K1qLOxR-tXkee9lURhYV89CDM71MKag7YY,2472
pip/_internal/cli/main_parser.py,sha256=laDpsuBDl6kyfywp9eMMA9s84jfH2TJJn-vmL0GG90w,4338
pip/_internal/cli/parser.py,sha256=tWP-K1uSxnJyXu3WE0kkH3niAYRBeuUaxeydhzOdhL4,10817
pip/_internal/cli/progress_bars.py,sha256=So4mPoSjXkXiSHiTzzquH3VVyVD_njXlHJSExYPXAow,1968
pip/_internal/cli/req_command.py,sha256=ypTutLv4j_efxC2f6C6aCQufxre-zaJdi5m_tWlLeBk,18172
pip/_internal/cli/spinners.py,sha256=hIJ83GerdFgFCdobIA23Jggetegl_uC4Sp586nzFbPE,5118
pip/_internal/cli/status_codes.py,sha256=sEFHUaUJbqv8iArL3HAtcztWZmGOFX01hTesSytDEh0,116
pip/_internal/commands/__init__.py,sha256=5oRO9O3dM2vGuh0bFw4HOVletryrz5HHMmmPWwJrH9U,3882
pip/_internal/commands/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/commands/__pycache__/cache.cpython-311.pyc,,
pip/_internal/commands/__pycache__/check.cpython-311.pyc,,
pip/_internal/commands/__pycache__/completion.cpython-311.pyc,,
pip/_internal/commands/__pycache__/configuration.cpython-311.pyc,,
pip/_internal/commands/__pycache__/debug.cpython-311.pyc,,
pip/_internal/commands/__pycache__/download.cpython-311.pyc,,
pip/_internal/commands/__pycache__/freeze.cpython-311.pyc,,
pip/_internal/commands/__pycache__/hash.cpython-311.pyc,,
pip/_internal/commands/__pycache__/help.cpython-311.pyc,,
pip/_internal/commands/__pycache__/index.cpython-311.pyc,,
pip/_internal/commands/__pycache__/inspect.cpython-311.pyc,,
pip/_internal/commands/__pycache__/install.cpython-311.pyc,,
pip/_internal/commands/__pycache__/list.cpython-311.pyc,,
pip/_internal/commands/__pycache__/search.cpython-311.pyc,,
pip/_internal/commands/__pycache__/show.cpython-311.pyc,,
pip/_internal/commands/__pycache__/uninstall.cpython-311.pyc,,
pip/_internal/commands/__pycache__/wheel.cpython-311.pyc,,
pip/_internal/commands/cache.py,sha256=muaT0mbL-ZUpn6AaushVAipzTiMwE4nV2BLbJBwt_KQ,7582
pip/_internal/commands/check.py,sha256=0gjXR7j36xJT5cs2heYU_dfOfpnFfzX8OoPNNoKhqdM,1685
pip/_internal/commands/completion.py,sha256=H0TJvGrdsoleuIyQKzJbicLFppYx2OZA0BLNpQDeFjI,4129
pip/_internal/commands/configuration.py,sha256=NB5uf8HIX8-li95YLoZO09nALIWlLCHDF5aifSKcBn8,9815
pip/_internal/commands/debug.py,sha256=kVjn-O1ixLk0webD0w9vfFFq_GCTUTd2hmLOnYtDCig,6573
pip/_internal/commands/download.py,sha256=LwKEyYMG2L67nQRyGo8hQdNEeMU2bmGWqJfcB8JDXas,5289
pip/_internal/commands/freeze.py,sha256=gCjoD6foBZPBAAYx5t8zZLkJhsF_ZRtnb3dPuD7beO8,2951
pip/_internal/commands/hash.py,sha256=EVVOuvGtoPEdFi8SNnmdqlCQrhCxV-kJsdwtdcCnXGQ,1703
pip/_internal/commands/help.py,sha256=gcc6QDkcgHMOuAn5UxaZwAStsRBrnGSn_yxjS57JIoM,1132
pip/_internal/commands/index.py,sha256=1VVXXj5MsI2qH-N7uniQQyVkg-KCn_RdjiyiUmkUS5U,4762
pip/_internal/commands/inspect.py,sha256=mRJ9aIkBQN0IJ7Um8pzaxAzVPIgL8KfWHx1fWKJgUAQ,3374
pip/_internal/commands/install.py,sha256=_XbW0PyxtZCMMNqo8mDaOq3TBRiJNFM-94CR27mburc,31726
pip/_internal/commands/list.py,sha256=Fk1TSxB33NlRS4qlLQ0xwnytnF9-zkQJbKQYv2xc4Q4,12343
pip/_internal/commands/search.py,sha256=sbBZiARRc050QquOKcCvOr2K3XLsoYebLKZGRi__iUI,5697
pip/_internal/commands/show.py,sha256=CJI8q4SSY0X346K1hi4Th8Nbyhl4nxPTBJUuzOlTaYE,6129
pip/_internal/commands/uninstall.py,sha256=0JQhifYxecNrJAwoILFwjm9V1V3liXzNT-y4bgRXXPw,3680
pip/_internal/commands/wheel.py,sha256=mbFJd4dmUfrVFJkQbK8n2zHyRcD3AI91f7EUo9l3KYg,7396
pip/_internal/configuration.py,sha256=uBKTus43pDIO6IzT2mLWQeROmHhtnoabhniKNjPYvD0,13529
pip/_internal/distributions/__init__.py,sha256=Hq6kt6gXBgjNit5hTTWLAzeCNOKoB-N0pGYSqehrli8,858
pip/_internal/distributions/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/distributions/__pycache__/base.cpython-311.pyc,,
pip/_internal/distributions/__pycache__/installed.cpython-311.pyc,,
pip/_internal/distributions/__pycache__/sdist.cpython-311.pyc,,
pip/_internal/distributions/__pycache__/wheel.cpython-311.pyc,,
pip/_internal/distributions/base.py,sha256=jrF1Vi7eGyqFqMHrieh1PIOrGU7KeCxhYPZnbvtmvGY,1221
pip/_internal/distributions/installed.py,sha256=NI2OgsgH9iBq9l5vB-56vOg5YsybOy-AU4VE5CSCO2I,729
pip/_internal/distributions/sdist.py,sha256=SQBdkatXSigKGG_SaD0U0p1Jwdfrg26UCNcHgkXZfdA,6494
pip/_internal/distributions/wheel.py,sha256=m-J4XO-gvFerlYsFzzSXYDvrx8tLZlJFTCgDxctn8ig,1164
pip/_internal/exceptions.py,sha256=BfvcyN2iEv3Sf00SVmSk59lEeZEBHELqkuoN2KeIWKc,20942
pip/_internal/index/__init__.py,sha256=vpt-JeTZefh8a-FC22ZeBSXFVbuBcXSGiILhQZJaNpQ,30
pip/_internal/index/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/index/__pycache__/collector.cpython-311.pyc,,
pip/_internal/index/__pycache__/package_finder.cpython-311.pyc,,
pip/_internal/index/__pycache__/sources.cpython-311.pyc,,
pip/_internal/index/collector.py,sha256=Pb9FW9STH2lwaApCIdMCivsbPP5pSYQp5bh3nLQBkDU,16503
pip/_internal/index/package_finder.py,sha256=kmcMu5_i-BP6v3NQGY0_am1ezxM2Gk4t00arZMmm4sc,37596
pip/_internal/index/sources.py,sha256=SVyPitv08-Qalh2_Bk5diAJ9GAA_d-a93koouQodAG0,6557
pip/_internal/locations/__init__.py,sha256=QhB-Y6TNyaU010cimm2T4wM5loe8oRdjLwJ6xmsGc-k,17552
pip/_internal/locations/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/locations/__pycache__/_distutils.cpython-311.pyc,,
pip/_internal/locations/__pycache__/_sysconfig.cpython-311.pyc,,
pip/_internal/locations/__pycache__/base.cpython-311.pyc,,
pip/_internal/locations/_distutils.py,sha256=wgHDvHGNZHtlcHkQjYovHzkEUBzisR0iOh7OqCIkB5g,6302
pip/_internal/locations/_sysconfig.py,sha256=nM-DiVHXWTxippdmN0MGVl5r7OIfIMy3vgDMlo8c_oo,7867
pip/_internal/locations/base.py,sha256=ufyDqPwZ4jLbScD44u8AwTVI-3ft8O78UGrroQI5f68,2573
pip/_internal/main.py,sha256=r-UnUe8HLo5XFJz8inTcOOTiu_sxNhgHb6VwlGUllOI,340
pip/_internal/metadata/__init__.py,sha256=84j1dPJaIoz5Q2ZTPi0uB1iaDAHiUNfKtYSGQCfFKpo,4280
pip/_internal/metadata/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/metadata/__pycache__/_json.cpython-311.pyc,,
pip/_internal/metadata/__pycache__/base.cpython-311.pyc,,
pip/_internal/metadata/__pycache__/pkg_resources.cpython-311.pyc,,
pip/_internal/metadata/_json.py,sha256=BTkWfFDrWFwuSodImjtbAh8wCL3isecbnjTb5E6UUDI,2595
pip/_internal/metadata/base.py,sha256=vIwIo1BtoqegehWMAXhNrpLGYBq245rcaCNkBMPnTU8,25277
pip/_internal/metadata/importlib/__init__.py,sha256=9ZVO8BoE7NEZPmoHp5Ap_NJo0HgNIezXXg-TFTtt3Z4,107
pip/_internal/metadata/importlib/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/metadata/importlib/__pycache__/_compat.cpython-311.pyc,,
pip/_internal/metadata/importlib/__pycache__/_dists.cpython-311.pyc,,
pip/_internal/metadata/importlib/__pycache__/_envs.cpython-311.pyc,,
pip/_internal/metadata/importlib/_compat.py,sha256=GAe_prIfCE4iUylrnr_2dJRlkkBVRUbOidEoID7LPoE,1882
pip/_internal/metadata/importlib/_dists.py,sha256=BUV8y6D0PePZrEN3vfJL-m1FDqZ6YPRgAiBeBinHhNg,8181
pip/_internal/metadata/importlib/_envs.py,sha256=7BxanCh3T7arusys__O2ZHJdnmDhQXFmfU7x1-jB5xI,7457
pip/_internal/metadata/pkg_resources.py,sha256=WjwiNdRsvxqxL4MA5Tb5a_q3Q3sUhdpbZF8wGLtPMI0,9773
pip/_internal/models/__init__.py,sha256=3DHUd_qxpPozfzouoqa9g9ts1Czr5qaHfFxbnxriepM,63
pip/_internal/models/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/models/__pycache__/candidate.cpython-311.pyc,,
pip/_internal/models/__pycache__/direct_url.cpython-311.pyc,,
pip/_internal/models/__pycache__/format_control.cpython-311.pyc,,
pip/_internal/models/__pycache__/index.cpython-311.pyc,,
pip/_internal/models/__pycache__/installation_report.cpython-311.pyc,,
pip/_internal/models/__pycache__/link.cpython-311.pyc,,
pip/_internal/models/__pycache__/scheme.cpython-311.pyc,,
pip/_internal/models/__pycache__/search_scope.cpython-311.pyc,,
pip/_internal/models/__pycache__/selection_prefs.cpython-311.pyc,,
pip/_internal/models/__pycache__/target_python.cpython-311.pyc,,
pip/_internal/models/__pycache__/wheel.cpython-311.pyc,,
pip/_internal/models/candidate.py,sha256=6pcABsaR7CfIHlbJbr2_kMkVJFL_yrYjTx6SVWUnCPQ,990
pip/_internal/models/direct_url.py,sha256=HLO0sL2aYB6n45bwmd72TDN05sLHJlOQI8M01l2SH3I,5877
pip/_internal/models/format_control.py,sha256=DJpMYjxeYKKQdwNcML2_F0vtAh-qnKTYe-CpTxQe-4g,2520
pip/_internal/models/index.py,sha256=tYnL8oxGi4aSNWur0mG8DAP7rC6yuha_MwJO8xw0crI,1030
pip/_internal/models/installation_report.py,sha256=ad1arqtxrSFBvWnm6mRqmG12HLV3pZZcZcHrlTFIiqU,2617
pip/_internal/models/link.py,sha256=9HWL14UQTMxRCnY6dmAz09rGElJrMAcHn2OJZCBx0tk,18083
pip/_internal/models/scheme.py,sha256=3EFQp_ICu_shH1-TBqhl0QAusKCPDFOlgHFeN4XowWs,738
pip/_internal/models/search_scope.py,sha256=iGPQQ6a4Lau8oGQ_FWj8aRLik8A21o03SMO5KnSt-Cg,4644
pip/_internal/models/selection_prefs.py,sha256=KZdi66gsR-_RUXUr9uejssk3rmTHrQVJWeNA2sV-VSY,1907
pip/_internal/models/target_python.py,sha256=qKpZox7J8NAaPmDs5C_aniwfPDxzvpkrCKqfwndG87k,3858
pip/_internal/models/wheel.py,sha256=YqazoIZyma_Q1ejFa1C7NHKQRRWlvWkdK96VRKmDBeI,3600
pip/_internal/network/__init__.py,sha256=jf6Tt5nV_7zkARBrKojIXItgejvoegVJVKUbhAa5Ioc,50
pip/_internal/network/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/network/__pycache__/auth.cpython-311.pyc,,
pip/_internal/network/__pycache__/cache.cpython-311.pyc,,
pip/_internal/network/__pycache__/download.cpython-311.pyc,,
pip/_internal/network/__pycache__/lazy_wheel.cpython-311.pyc,,
pip/_internal/network/__pycache__/session.cpython-311.pyc,,
pip/_internal/network/__pycache__/utils.cpython-311.pyc,,
pip/_internal/network/__pycache__/xmlrpc.cpython-311.pyc,,
pip/_internal/network/auth.py,sha256=a3C7Xaa8kTJjXkdi_wrUjqaySc8Z9Yz7U6QIbXfzMyc,12190
pip/_internal/network/cache.py,sha256=hgXftU-eau4MWxHSLquTMzepYq5BPC2zhCkhN3glBy8,2145
pip/_internal/network/download.py,sha256=HvDDq9bVqaN3jcS3DyVJHP7uTqFzbShdkf7NFSoHfkw,6096
pip/_internal/network/lazy_wheel.py,sha256=PbPyuleNhtEq6b2S7rufoGXZWMD15FAGL4XeiAQ8FxA,7638
pip/_internal/network/session.py,sha256=BpDOJ7_Xw5VkgPYWsePzcaqOfcyRZcB2AW7W0HGBST0,18443
pip/_internal/network/utils.py,sha256=6A5SrUJEEUHxbGtbscwU2NpCyz-3ztiDlGWHpRRhsJ8,4073
pip/_internal/network/xmlrpc.py,sha256=AzQgG4GgS152_cqmGr_Oz2MIXsCal-xfsis7fA7nmU0,1791
pip/_internal/operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_internal/operations/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/operations/__pycache__/check.cpython-311.pyc,,
pip/_internal/operations/__pycache__/freeze.cpython-311.pyc,,
pip/_internal/operations/__pycache__/prepare.cpython-311.pyc,,
pip/_internal/operations/build/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_internal/operations/build/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/build_tracker.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/metadata.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/metadata_editable.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/wheel.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/wheel_editable.cpython-311.pyc,,
pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-311.pyc,,
pip/_internal/operations/build/build_tracker.py,sha256=vf81EwomN3xe9G8qRJED0VGqNikmRQRQoobNsxi5Xrs,4133
pip/_internal/operations/build/metadata.py,sha256=ES_uRmAvhrNm_nDTpZxshBfUsvnXtkj-g_4rZrH9Rww,1404
pip/_internal/operations/build/metadata_editable.py,sha256=_Rai0VZjxoeJUkjkuICrq45LtjwFoDOveosMYH43rKc,1456
pip/_internal/operations/build/metadata_legacy.py,sha256=o-eU21As175hDC7dluM1fJJ_FqokTIShyWpjKaIpHZw,2198
pip/_internal/operations/build/wheel.py,sha256=AO9XnTGhTgHtZmU8Dkbfo1OGr41rBuSDjIgAa4zUKgE,1063
pip/_internal/operations/build/wheel_editable.py,sha256=TVETY-L_M_dSEKBhTIcQOP75zKVXw8tuq1U354Mm30A,1405
pip/_internal/operations/build/wheel_legacy.py,sha256=C9j6rukgQI1n_JeQLoZGuDdfUwzCXShyIdPTp6edbMQ,3064
pip/_internal/operations/check.py,sha256=ca4O9CkPt9Em9sLCf3H0iVt1GIcW7M8C0U5XooaBuT4,5109
pip/_internal/operations/freeze.py,sha256=mwTZ2uML8aQgo3k8MR79a7SZmmmvdAJqdyaknKbavmg,9784
pip/_internal/operations/install/__init__.py,sha256=mX7hyD2GNBO2mFGokDQ30r_GXv7Y_PLdtxcUv144e-s,51
pip/_internal/operations/install/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/operations/install/__pycache__/editable_legacy.cpython-311.pyc,,
pip/_internal/operations/install/__pycache__/legacy.cpython-311.pyc,,
pip/_internal/operations/install/__pycache__/wheel.cpython-311.pyc,,
pip/_internal/operations/install/editable_legacy.py,sha256=ee4kfJHNuzTdKItbfAsNOSEwq_vD7DRPGkBdK48yBhU,1354
pip/_internal/operations/install/legacy.py,sha256=cHdcHebyzf8w7OaOLwcsTNSMSSV8WBoAPFLay_9CjE8,4105
pip/_internal/operations/install/wheel.py,sha256=CxzEg2wTPX4SxNTPIx0ozTqF1X7LhpCyP3iM2FjcKUE,27407
pip/_internal/operations/prepare.py,sha256=BeYXrLFpRoV5XBnRXQHxRA2plyC36kK9Pms5D9wjCo4,25091
pip/_internal/pyproject.py,sha256=ob0Gb0l12YLZNxjdpZGRfWHgjqhZTnSVv96RuJyNOfs,7074
pip/_internal/req/__init__.py,sha256=rUQ9d_Sh3E5kNYqX9pkN0D06YL-LrtcbJQ-LiIonq08,2807
pip/_internal/req/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/req/__pycache__/constructors.cpython-311.pyc,,
pip/_internal/req/__pycache__/req_file.cpython-311.pyc,,
pip/_internal/req/__pycache__/req_install.cpython-311.pyc,,
pip/_internal/req/__pycache__/req_set.cpython-311.pyc,,
pip/_internal/req/__pycache__/req_uninstall.cpython-311.pyc,,
pip/_internal/req/constructors.py,sha256=ypjtq1mOQ3d2mFkFPMf_6Mr8SLKeHQk3tUKHA1ddG0U,16611
pip/_internal/req/req_file.py,sha256=N6lPO3c0to_G73YyGAnk7VUYmed5jV4Qxgmt1xtlXVg,17646
pip/_internal/req/req_install.py,sha256=4tzyVGPHJ1-GXowm6PBT52BGIlbc4w7fhVqf-55bmRg,35600
pip/_internal/req/req_set.py,sha256=j3esG0s6SzoVReX9rWn4rpYNtyET_fwxbwJPRimvRxo,2858
pip/_internal/req/req_uninstall.py,sha256=ZFQfgSNz6H1BMsgl87nQNr2iaQCcbFcmXpW8rKVQcic,24045
pip/_internal/resolution/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_internal/resolution/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/resolution/__pycache__/base.cpython-311.pyc,,
pip/_internal/resolution/base.py,sha256=qlmh325SBVfvG6Me9gc5Nsh5sdwHBwzHBq6aEXtKsLA,583
pip/_internal/resolution/legacy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_internal/resolution/legacy/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/resolution/legacy/__pycache__/resolver.cpython-311.pyc,,
pip/_internal/resolution/legacy/resolver.py,sha256=9em8D5TcSsEN4xZM1WreaRShOnyM4LlvhMSHpUPsocE,24129
pip/_internal/resolution/resolvelib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/base.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-311.pyc,,
pip/_internal/resolution/resolvelib/base.py,sha256=u1O4fkvCO4mhmu5i32xrDv9AX5NgUci_eYVyBDQhTIM,5220
pip/_internal/resolution/resolvelib/candidates.py,sha256=6kQZeMzwibnL4lO6bW0hUQQjNEvXfADdFphRRkRvOtc,18963
pip/_internal/resolution/resolvelib/factory.py,sha256=OnjkLIgyk5Tol7uOOqapA1D4qiRHWmPU18DF1yN5N8o,27878
pip/_internal/resolution/resolvelib/found_candidates.py,sha256=hvL3Hoa9VaYo-qEOZkBi2Iqw251UDxPz-uMHVaWmLpE,5705
pip/_internal/resolution/resolvelib/provider.py,sha256=Vd4jW_NnyifB-HMkPYtZIO70M3_RM0MbL5YV6XyBM-w,9914
pip/_internal/resolution/resolvelib/reporter.py,sha256=3ZVVYrs5PqvLFJkGLcuXoMK5mTInFzl31xjUpDBpZZk,2526
pip/_internal/resolution/resolvelib/requirements.py,sha256=B1ndvKPSuyyyTEXt9sKhbwminViSWnBrJa7qO2ln4Z0,5455
pip/_internal/resolution/resolvelib/resolver.py,sha256=nYZ9bTFXj5c1ILKnkSgU7tUCTYyo5V5J-J0sKoA7Wzg,11533
pip/_internal/self_outdated_check.py,sha256=R3MmjCyUt_lkUNMc6p3xVSx7vX28XiDh3VDs5OrYn6Q,8020
pip/_internal/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_internal/utils/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/utils/__pycache__/_log.cpython-311.pyc,,
pip/_internal/utils/__pycache__/appdirs.cpython-311.pyc,,
pip/_internal/utils/__pycache__/compat.cpython-311.pyc,,
pip/_internal/utils/__pycache__/compatibility_tags.cpython-311.pyc,,
pip/_internal/utils/__pycache__/datetime.cpython-311.pyc,,
pip/_internal/utils/__pycache__/deprecation.cpython-311.pyc,,
pip/_internal/utils/__pycache__/direct_url_helpers.cpython-311.pyc,,
pip/_internal/utils/__pycache__/distutils_args.cpython-311.pyc,,
pip/_internal/utils/__pycache__/egg_link.cpython-311.pyc,,
pip/_internal/utils/__pycache__/encoding.cpython-311.pyc,,
pip/_internal/utils/__pycache__/entrypoints.cpython-311.pyc,,
pip/_internal/utils/__pycache__/filesystem.cpython-311.pyc,,
pip/_internal/utils/__pycache__/filetypes.cpython-311.pyc,,
pip/_internal/utils/__pycache__/glibc.cpython-311.pyc,,
pip/_internal/utils/__pycache__/hashes.cpython-311.pyc,,
pip/_internal/utils/__pycache__/inject_securetransport.cpython-311.pyc,,
pip/_internal/utils/__pycache__/logging.cpython-311.pyc,,
pip/_internal/utils/__pycache__/misc.cpython-311.pyc,,
pip/_internal/utils/__pycache__/models.cpython-311.pyc,,
pip/_internal/utils/__pycache__/packaging.cpython-311.pyc,,
pip/_internal/utils/__pycache__/setuptools_build.cpython-311.pyc,,
pip/_internal/utils/__pycache__/subprocess.cpython-311.pyc,,
pip/_internal/utils/__pycache__/temp_dir.cpython-311.pyc,,
pip/_internal/utils/__pycache__/unpacking.cpython-311.pyc,,
pip/_internal/utils/__pycache__/urls.cpython-311.pyc,,
pip/_internal/utils/__pycache__/virtualenv.cpython-311.pyc,,
pip/_internal/utils/__pycache__/wheel.cpython-311.pyc,,
pip/_internal/utils/_log.py,sha256=-jHLOE_THaZz5BFcCnoSL9EYAtJ0nXem49s9of4jvKw,1015
pip/_internal/utils/appdirs.py,sha256=swgcTKOm3daLeXTW6v5BUS2Ti2RvEnGRQYH_yDXklAo,1665
pip/_internal/utils/compat.py,sha256=ACyBfLgj3_XG-iA5omEDrXqDM0cQKzi8h8HRBInzG6Q,1884
pip/_internal/utils/compatibility_tags.py,sha256=ydin8QG8BHqYRsPY4OL6cmb44CbqXl1T0xxS97VhHkk,5377
pip/_internal/utils/datetime.py,sha256=m21Y3wAtQc-ji6Veb6k_M5g6A0ZyFI4egchTdnwh-pQ,242
pip/_internal/utils/deprecation.py,sha256=OLc7GzDwPob9y8jscDYCKUNBV-9CWwqFplBOJPLOpBM,5764
pip/_internal/utils/direct_url_helpers.py,sha256=6F1tc2rcKaCZmgfVwsE6ObIe_Pux23mUVYA-2D9wCFc,3206
pip/_internal/utils/distutils_args.py,sha256=bYUt4wfFJRaeGO4VHia6FNaA8HlYXMcKuEq1zYijY5g,1115
pip/_internal/utils/egg_link.py,sha256=5MVlpz5LirT4iLQq86OYzjXaYF0D4Qk1dprEI7ThST4,2203
pip/_internal/utils/encoding.py,sha256=qqsXDtiwMIjXMEiIVSaOjwH5YmirCaK-dIzb6-XJsL0,1169
pip/_internal/utils/entrypoints.py,sha256=YlhLTRl2oHBAuqhc-zmL7USS67TPWVHImjeAQHreZTQ,3064
pip/_internal/utils/filesystem.py,sha256=RhMIXUaNVMGjc3rhsDahWQ4MavvEQDdqXqgq-F6fpw8,5122
pip/_internal/utils/filetypes.py,sha256=i8XAQ0eFCog26Fw9yV0Yb1ygAqKYB1w9Cz9n0fj8gZU,716
pip/_internal/utils/glibc.py,sha256=tDfwVYnJCOC0BNVpItpy8CGLP9BjkxFHdl0mTS0J7fc,3110
pip/_internal/utils/hashes.py,sha256=1WhkVNIHNfuYLafBHThIjVKGplxFJXSlQtuG2mXNlJI,4831
pip/_internal/utils/inject_securetransport.py,sha256=o-QRVMGiENrTJxw3fAhA7uxpdEdw6M41TjHYtSVRrcg,795
pip/_internal/utils/logging.py,sha256=U2q0i1n8hPS2gQh8qcocAg5dovGAa_bR24akmXMzrk4,11632
pip/_internal/utils/misc.py,sha256=49Rs2NgrD4JGTKFt0farCm7FIAi-rjyoxgioArhCW_0,21617
pip/_internal/utils/models.py,sha256=5GoYU586SrxURMvDn_jBMJInitviJg4O5-iOU-6I0WY,1193
pip/_internal/utils/packaging.py,sha256=5Wm6_x7lKrlqVjPI5MBN_RurcRHwVYoQ7Ksrs84de7s,2108
pip/_internal/utils/setuptools_build.py,sha256=4i3CuS34yNrkePnZ73rR47pyDzpZBo-SX9V5PNDSSHY,5662
pip/_internal/utils/subprocess.py,sha256=MYySbvY7qBevRxq_RFfOsDqG4vMqrB4vDoL_eyPE6Bo,9197
pip/_internal/utils/temp_dir.py,sha256=aCX489gRa4Nu0dMKRFyGhV6maJr60uEynu5uCbKR4Qg,7702
pip/_internal/utils/unpacking.py,sha256=SBb2iV1crb89MDRTEKY86R4A_UOWApTQn9VQVcMDOlE,8821
pip/_internal/utils/urls.py,sha256=AhaesUGl-9it6uvG6fsFPOr9ynFpGaTMk4t5XTX7Z_Q,1759
pip/_internal/utils/virtualenv.py,sha256=4_48qMzCwB_F5jIK5BC_ua7uiAMVifmQWU9NdaGUoVA,3459
pip/_internal/utils/wheel.py,sha256=lXOgZyTlOm5HmK8tw5iw0A3_5A6wRzsXHOaQkIvvloU,4549
pip/_internal/vcs/__init__.py,sha256=UAqvzpbi0VbZo3Ub6skEeZAw-ooIZR-zX_WpCbxyCoU,596
pip/_internal/vcs/__pycache__/__init__.cpython-311.pyc,,
pip/_internal/vcs/__pycache__/bazaar.cpython-311.pyc,,
pip/_internal/vcs/__pycache__/git.cpython-311.pyc,,
pip/_internal/vcs/__pycache__/mercurial.cpython-311.pyc,,
pip/_internal/vcs/__pycache__/subversion.cpython-311.pyc,,
pip/_internal/vcs/__pycache__/versioncontrol.cpython-311.pyc,,
pip/_internal/vcs/bazaar.py,sha256=zq-Eu2NtJffc6kOsyv2kmRTnKg9qeIXE-KH5JeKck70,3518
pip/_internal/vcs/git.py,sha256=mjhwudCx9WlLNkxZ6_kOKmueF0rLoU2i1xeASKF6yiQ,18116
pip/_internal/vcs/mercurial.py,sha256=Bzbd518Jsx-EJI0IhIobiQqiRsUv5TWYnrmRIFWE0Gw,5238
pip/_internal/vcs/subversion.py,sha256=AeUVE9d9qp-0QSOMiUvuFHy1TK950E3QglN7ipP13sI,11728
pip/_internal/vcs/versioncontrol.py,sha256=KUOc-hN51em9jrqxKwUR3JnkgSE-xSOqMiiJcSaL6B8,22811
pip/_internal/wheel_builder.py,sha256=8cObBCu4mIsMJqZM7xXI9DO3vldiAnRNa1Gt6izPPTs,13079
pip/_vendor/__init__.py,sha256=fNxOSVD0auElsD8fN9tuq5psfgMQ-RFBtD4X5gjlRkg,4966
pip/_vendor/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/__pycache__/six.cpython-311.pyc,,
pip/_vendor/__pycache__/typing_extensions.cpython-311.pyc,,
pip/_vendor/cachecontrol/__init__.py,sha256=hrxlv3q7upsfyMw8k3gQ9vagBax1pYHSGGqYlZ0Zk0M,465
pip/_vendor/cachecontrol/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/adapter.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/cache.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/compat.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/controller.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/serialize.cpython-311.pyc,,
pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-311.pyc,,
pip/_vendor/cachecontrol/_cmd.py,sha256=lxUXqfNTVx84zf6tcWbkLZHA6WVBRtJRpfeA9ZqhaAY,1379
pip/_vendor/cachecontrol/adapter.py,sha256=ew9OYEQHEOjvGl06ZsuX8W3DAvHWsQKHwWAxISyGug8,5033
pip/_vendor/cachecontrol/cache.py,sha256=Tty45fOjH40fColTGkqKQvQQmbYsMpk-nCyfLcv2vG4,1535
pip/_vendor/cachecontrol/caches/__init__.py,sha256=h-1cUmOz6mhLsjTjOrJ8iPejpGdLCyG4lzTftfGZvLg,242
pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-311.pyc,,
pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-311.pyc,,
pip/_vendor/cachecontrol/caches/file_cache.py,sha256=GpexcE29LoY4MaZwPUTcUBZaDdcsjqyLxZFznk8Hbr4,5271
pip/_vendor/cachecontrol/caches/redis_cache.py,sha256=mp-QWonP40I3xJGK3XVO-Gs9a3UjzlqqEmp9iLJH9F4,1033
pip/_vendor/cachecontrol/compat.py,sha256=LNx7vqBndYdHU8YuJt53ab_8rzMGTXVrvMb7CZJkxG0,778
pip/_vendor/cachecontrol/controller.py,sha256=bAYrt7x_VH4toNpI066LQxbHpYGpY1MxxmZAhspplvw,16416
pip/_vendor/cachecontrol/filewrapper.py,sha256=X4BAQOO26GNOR7nH_fhTzAfeuct2rBQcx_15MyFBpcs,3946
pip/_vendor/cachecontrol/heuristics.py,sha256=8kAyuZLSCyEIgQr6vbUwfhpqg9ows4mM0IV6DWazevI,4154
pip/_vendor/cachecontrol/serialize.py,sha256=_U1NU_C-SDgFzkbAxAsPDgMTHeTWZZaHCQnZN_jh0U8,7105
pip/_vendor/cachecontrol/wrapper.py,sha256=X3-KMZ20Ho3VtqyVaXclpeQpFzokR5NE8tZSfvKVaB8,774
pip/_vendor/certifi/__init__.py,sha256=luDjIGxDSrQ9O0zthdz5Lnt069Z_7eR1GIEefEaf-Ys,94
pip/_vendor/certifi/__main__.py,sha256=1k3Cr95vCxxGRGDljrW3wMdpZdL3Nhf0u1n-k2qdsCY,255
pip/_vendor/certifi/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/certifi/__pycache__/__main__.cpython-311.pyc,,
pip/_vendor/certifi/__pycache__/core.cpython-311.pyc,,
pip/_vendor/certifi/cacert.pem,sha256=3l8CcWt_qL42030rGieD3SLufICFX0bYtGhDl_EXVPI,286370
pip/_vendor/certifi/core.py,sha256=ZwiOsv-sD_ouU1ft8wy_xZ3LQ7UbcVzyqj2XNyrsZis,4279
pip/_vendor/chardet/__init__.py,sha256=9-r0i294avRciob2HKVcKf6GJmXPHpgMqIijVrqHBDU,3705
pip/_vendor/chardet/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/big5freq.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/big5prober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/chardistribution.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/charsetprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/cp949prober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/enums.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/escprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/escsm.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/eucjpprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/euckrfreq.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/euckrprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/euctwfreq.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/euctwprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/gb2312freq.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/gb2312prober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/hebrewprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/jisfreq.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/johabfreq.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/johabprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/jpcntx.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/langthaimodel.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/latin1prober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/mbcssm.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/sjisprober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/universaldetector.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/utf1632prober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/utf8prober.cpython-311.pyc,,
pip/_vendor/chardet/__pycache__/version.cpython-311.pyc,,
pip/_vendor/chardet/big5freq.py,sha256=ltcfP-3PjlNHCoo5e4a7C4z-2DhBTXRfY6jbMbB7P30,31274
pip/_vendor/chardet/big5prober.py,sha256=neUXIlq35507yibstiznZWFzyNcMn6EXrqJaUJVPWKg,1741
pip/_vendor/chardet/chardistribution.py,sha256=M9NTKdM72KieFKy4TT5eml4PP0WaVcXuY5PpWSFD0FA,9608
pip/_vendor/chardet/charsetgroupprober.py,sha256=CaIBAmNitEsYuSgMvgAsMREN4cLxMj5OYwMhVo6MAxk,3817
pip/_vendor/chardet/charsetprober.py,sha256=Eo3w8sCmbvnVKOGNW1iy50KATVs8xV-gF7cQ0VG85dQ,4801
pip/_vendor/chardet/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_vendor/chardet/cli/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-311.pyc,,
pip/_vendor/chardet/cli/chardetect.py,sha256=1qMxT3wrp5vP6ugSf1-Zz3BWwlbCWJ0jzeCuhgX85vw,2406
pip/_vendor/chardet/codingstatemachine.py,sha256=BiGR9kgTYbS4gJI5qBmE52HMOBOR_roDvXf7aIehdEk,3559
pip/_vendor/chardet/cp949prober.py,sha256=kCQEaOCzMntqv7pAyXEobWTRgIUxYfoiUr0btXO1nI8,1838
pip/_vendor/chardet/enums.py,sha256=Rodw4p61Vg9U-oCo6eUuT7uDzKwIbCaA15HwbvCoCNk,1619
pip/_vendor/chardet/escprober.py,sha256=girD61r3NsQLnMQXsWWBU4hHuRJzTH3V7-VfTUr-nQY,3864
pip/_vendor/chardet/escsm.py,sha256=0Vs4iPPovberMoSxxnK5pI161Xf-mtKgOl14g5Xc7zg,12021
pip/_vendor/chardet/eucjpprober.py,sha256=pGgs4lINwCEDV2bxqIZ6hXpaj2j4l2oLsMx6kuOK_zQ,3676
pip/_vendor/chardet/euckrfreq.py,sha256=3mHuRvXfsq_QcQysDQFb8qSudvTiol71C6Ic2w57tKM,13566
pip/_vendor/chardet/euckrprober.py,sha256=qBuSS2zXWaoUmGdzz3owAnD1GNhuKR_8bYzDC3yxe6I,1731
pip/_vendor/chardet/euctwfreq.py,sha256=2alILE1Lh5eqiFJZjzRkMQXolNJRHY5oBQd-vmZYFFM,36913
pip/_vendor/chardet/euctwprober.py,sha256=SLnCoJC94jZL8PJio60Q8PZACJA1rVPtUdWMa1W8Pwk,1731
pip/_vendor/chardet/gb2312freq.py,sha256=49OrdXzD-HXqwavkqjo8Z7gvs58hONNzDhAyMENNkvY,20735
pip/_vendor/chardet/gb2312prober.py,sha256=NS_i52jZE0TnWGkKqFduvu9fzW0nMcS2XbYJ8qSX8hY,1737
pip/_vendor/chardet/hebrewprober.py,sha256=1l1hXF8-2IWDrPkf85UvAO1GVtMfY1r11kDgOqa-gU4,13919
pip/_vendor/chardet/jisfreq.py,sha256=mm8tfrwqhpOd3wzZKS4NJqkYBQVcDfTM2JiQ5aW932E,25796
pip/_vendor/chardet/johabfreq.py,sha256=dBpOYG34GRX6SL8k_LbS9rxZPMjLjoMlgZ03Pz5Hmqc,42498
pip/_vendor/chardet/johabprober.py,sha256=C18osd4vMPfy9facw-Y1Lor_9UrW0PeV-zxM2fu441c,1730
pip/_vendor/chardet/jpcntx.py,sha256=m1gDpPkRca4EDwym8XSL5YdoILFnFsDbNBYMQV7_-NE,26797
pip/_vendor/chardet/langbulgarianmodel.py,sha256=vmbvYFP8SZkSxoBvLkFqKiH1sjma5ihk3PTpdy71Rr4,104562
pip/_vendor/chardet/langgreekmodel.py,sha256=JfB7bupjjJH2w3X_mYnQr9cJA_7EuITC2cRW13fUjeI,98484
pip/_vendor/chardet/langhebrewmodel.py,sha256=3HXHaLQPNAGcXnJjkIJfozNZLTvTJmf4W5Awi6zRRKc,98196
pip/_vendor/chardet/langhungarianmodel.py,sha256=WxbeQIxkv8YtApiNqxQcvj-tMycsoI4Xy-fwkDHpP_Y,101363
pip/_vendor/chardet/langrussianmodel.py,sha256=s395bTZ87ESTrZCOdgXbEjZ9P1iGPwCl_8xSsac_DLY,128035
pip/_vendor/chardet/langthaimodel.py,sha256=7bJlQitRpTnVGABmbSznHnJwOHDy3InkTvtFUx13WQI,102774
pip/_vendor/chardet/langturkishmodel.py,sha256=XY0eGdTIy4eQ9Xg1LVPZacb-UBhHBR-cq0IpPVHowKc,95372
pip/_vendor/chardet/latin1prober.py,sha256=u_iGcQMUcZLXvj4B_WXx4caA0C5oaE2Qj1KTpz_RQ1I,5260
pip/_vendor/chardet/mbcharsetprober.py,sha256=iKKuB6o_FF80NynRLBDT0UtwOnpLqmL_OspRPMib7CM,3367
pip/_vendor/chardet/mbcsgroupprober.py,sha256=1D_kp9nv2_NQRddq9I2WDvB35OJh7Tfpo-OYTnL3B5o,2056
pip/_vendor/chardet/mbcssm.py,sha256=EfORNu1WXgnFvpFarU8uJHS8KFif63xmgrHOB4DdDdY,30068
pip/_vendor/chardet/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/chardet/metadata/__pycache__/languages.cpython-311.pyc,,
pip/_vendor/chardet/metadata/languages.py,sha256=HcaBygWtZq3gR8prIkJp_etvkhm2V4pUIToqjPZhgrc,13280
pip/_vendor/chardet/sbcharsetprober.py,sha256=VvtWiNRLbHDZ5xgnofsmP1u8VQIkkaAuw3Ir9m1zDzQ,6199
pip/_vendor/chardet/sbcsgroupprober.py,sha256=mekr4E3hgT4onmwi8oi1iEGW1CN-Z-BArG6kOtCunJw,4129
pip/_vendor/chardet/sjisprober.py,sha256=sLfWS25PVFr5cDGhEf6h_s-RJsyeSteA-4ynsTl_UvA,3749
pip/_vendor/chardet/universaldetector.py,sha256=BHeNWt1kn0yQgnR6xNtLAjiNmEQpSHYlKEvuZ9QyR1k,13288
pip/_vendor/chardet/utf1632prober.py,sha256=N42YJEOkVDB67c38t5aJhXMG1QvnyWWDMNY5ERzniU0,8289
pip/_vendor/chardet/utf8prober.py,sha256=mnLaSBV4gg-amt2WmxKFKWy4vVBedMNgjdbvgzBo0Dc,2709
pip/_vendor/chardet/version.py,sha256=u_QYi-DXU1s7fyC_Rwa0I0-UcxMVmH7Co6c7QGKbe3g,242
pip/_vendor/colorama/__init__.py,sha256=ihDoWQOkapwF7sqQ99AoDoEF3vGYm40OtmgW211cLZw,239
pip/_vendor/colorama/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/colorama/__pycache__/ansi.cpython-311.pyc,,
pip/_vendor/colorama/__pycache__/ansitowin32.cpython-311.pyc,,
pip/_vendor/colorama/__pycache__/initialise.cpython-311.pyc,,
pip/_vendor/colorama/__pycache__/win32.cpython-311.pyc,,
pip/_vendor/colorama/__pycache__/winterm.cpython-311.pyc,,
pip/_vendor/colorama/ansi.py,sha256=Top4EeEuaQdBWdteKMEcGOTeKeF19Q-Wo_6_Cj5kOzQ,2522
pip/_vendor/colorama/ansitowin32.py,sha256=gGrO7MVtwc-j1Sq3jKfZpERT1JWmYSOsTVDiTnFbZU4,10830
pip/_vendor/colorama/initialise.py,sha256=PprovDNxMTrvoNHFcL2NZjpH2XzDc8BLxLxiErfUl4k,1915
pip/_vendor/colorama/win32.py,sha256=bJ8Il9jwaBN5BJ8bmN6FoYZ1QYuMKv2j8fGrXh7TJjw,5404
pip/_vendor/colorama/winterm.py,sha256=2y_2b7Zsv34feAsP67mLOVc-Bgq51mdYGo571VprlrM,6438
pip/_vendor/distlib/__init__.py,sha256=acgfseOC55dNrVAzaBKpUiH3Z6V7Q1CaxsiQ3K7pC-E,581
pip/_vendor/distlib/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/compat.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/database.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/index.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/locators.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/manifest.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/markers.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/metadata.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/resources.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/scripts.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/util.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/version.cpython-311.pyc,,
pip/_vendor/distlib/__pycache__/wheel.cpython-311.pyc,,
pip/_vendor/distlib/compat.py,sha256=tfoMrj6tujk7G4UC2owL6ArgDuCKabgBxuJRGZSmpko,41259
pip/_vendor/distlib/database.py,sha256=o_mw0fAr93NDAHHHfqG54Y1Hi9Rkfrp2BX15XWZYK50,51697
pip/_vendor/distlib/index.py,sha256=HFiDG7LMoaBs829WuotrfIwcErOOExUOR_AeBtw_TCU,20834
pip/_vendor/distlib/locators.py,sha256=wNzG-zERzS_XGls-nBPVVyLRHa2skUlkn0-5n0trMWA,51991
pip/_vendor/distlib/manifest.py,sha256=nQEhYmgoreaBZzyFzwYsXxJARu3fo4EkunU163U16iE,14811
pip/_vendor/distlib/markers.py,sha256=TpHHHLgkzyT7YHbwj-2i6weRaq-Ivy2-MUnrDkjau-U,5058
pip/_vendor/distlib/metadata.py,sha256=g_DIiu8nBXRzA-mWPRpatHGbmFZqaFoss7z9TG7QSUU,39801
pip/_vendor/distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820
pip/_vendor/distlib/scripts.py,sha256=BmkTKmiTk4m2cj-iueliatwz3ut_9SsABBW51vnQnZU,18102
pip/_vendor/distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792
pip/_vendor/distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784
pip/_vendor/distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032
pip/_vendor/distlib/util.py,sha256=31dPXn3Rfat0xZLeVoFpuniyhe6vsbl9_QN-qd9Lhlk,66262
pip/_vendor/distlib/version.py,sha256=WG__LyAa2GwmA6qSoEJtvJE8REA1LZpbSizy8WvhJLk,23513
pip/_vendor/distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648
pip/_vendor/distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448
pip/_vendor/distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888
pip/_vendor/distlib/wheel.py,sha256=Rgqs658VsJ3R2845qwnZD8XQryV2CzWw2mghwLvxxsI,43898
pip/_vendor/distro/__init__.py,sha256=2fHjF-SfgPvjyNZ1iHh_wjqWdR_Yo5ODHwZC0jLBPhc,981
pip/_vendor/distro/__main__.py,sha256=bu9d3TifoKciZFcqRBuygV3GSuThnVD_m2IK4cz96Vs,64
pip/_vendor/distro/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/distro/__pycache__/__main__.cpython-311.pyc,,
pip/_vendor/distro/__pycache__/distro.cpython-311.pyc,,
pip/_vendor/distro/distro.py,sha256=UYQG_9H_iSOt422uasA92HlY7aXeTnWKdV-IhsSAdwQ,48841
pip/_vendor/idna/__init__.py,sha256=KJQN1eQBr8iIK5SKrJ47lXvxG0BJ7Lm38W4zT0v_8lk,849
pip/_vendor/idna/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/idna/__pycache__/codec.cpython-311.pyc,,
pip/_vendor/idna/__pycache__/compat.cpython-311.pyc,,
pip/_vendor/idna/__pycache__/core.cpython-311.pyc,,
pip/_vendor/idna/__pycache__/idnadata.cpython-311.pyc,,
pip/_vendor/idna/__pycache__/intranges.cpython-311.pyc,,
pip/_vendor/idna/__pycache__/package_data.cpython-311.pyc,,
pip/_vendor/idna/__pycache__/uts46data.cpython-311.pyc,,
pip/_vendor/idna/codec.py,sha256=6ly5odKfqrytKT9_7UrlGklHnf1DSK2r9C6cSM4sa28,3374
pip/_vendor/idna/compat.py,sha256=0_sOEUMT4CVw9doD3vyRhX80X19PwqFoUBs7gWsFME4,321
pip/_vendor/idna/core.py,sha256=1JxchwKzkxBSn7R_oCE12oBu3eVux0VzdxolmIad24M,12950
pip/_vendor/idna/idnadata.py,sha256=xUjqKqiJV8Ho_XzBpAtv5JFoVPSupK-SUXvtjygUHqw,44375
pip/_vendor/idna/intranges.py,sha256=YBr4fRYuWH7kTKS2tXlFjM24ZF1Pdvcir-aywniInqg,1881
pip/_vendor/idna/package_data.py,sha256=C_jHJzmX8PI4xq0jpzmcTMxpb5lDsq4o5VyxQzlVrZE,21
pip/_vendor/idna/uts46data.py,sha256=zvjZU24s58_uAS850Mcd0NnD0X7_gCMAMjzWNIeUJdc,206539
pip/_vendor/msgpack/__init__.py,sha256=NryGaKLDk_Egd58ZxXpnuI7OWO27AXz7S6CBFRM3sAY,1132
pip/_vendor/msgpack/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/msgpack/__pycache__/exceptions.cpython-311.pyc,,
pip/_vendor/msgpack/__pycache__/ext.cpython-311.pyc,,
pip/_vendor/msgpack/__pycache__/fallback.cpython-311.pyc,,
pip/_vendor/msgpack/exceptions.py,sha256=dCTWei8dpkrMsQDcjQk74ATl9HsIBH0ybt8zOPNqMYc,1081
pip/_vendor/msgpack/ext.py,sha256=TuldJPkYu8Wo_Xh0tFGL2l06-gY88NSR8tOje9fo2Wg,6080
pip/_vendor/msgpack/fallback.py,sha256=OORDn86-fHBPlu-rPlMdM10KzkH6S_Rx9CHN1b7o4cg,34557
pip/_vendor/packaging/__about__.py,sha256=ugASIO2w1oUyH8_COqQ2X_s0rDhjbhQC3yJocD03h2c,661
pip/_vendor/packaging/__init__.py,sha256=b9Kk5MF7KxhhLgcDmiUWukN-LatWFxPdNug0joPhHSk,497
pip/_vendor/packaging/__pycache__/__about__.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/_manylinux.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/_musllinux.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/_structures.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/markers.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/requirements.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/specifiers.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/tags.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/utils.cpython-311.pyc,,
pip/_vendor/packaging/__pycache__/version.cpython-311.pyc,,
pip/_vendor/packaging/_manylinux.py,sha256=XcbiXB-qcjv3bcohp6N98TMpOP4_j3m-iOA8ptK2GWY,11488
pip/_vendor/packaging/_musllinux.py,sha256=_KGgY_qc7vhMGpoqss25n2hiLCNKRtvz9mCrS7gkqyc,4378
pip/_vendor/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
pip/_vendor/packaging/markers.py,sha256=AJBOcY8Oq0kYc570KuuPTkvuqjAlhufaE2c9sCUbm64,8487
pip/_vendor/packaging/requirements.py,sha256=NtDlPBtojpn1IUC85iMjPNsUmufjpSlwnNA-Xb4m5NA,4676
pip/_vendor/packaging/specifiers.py,sha256=LRQ0kFsHrl5qfcFNEEJrIFYsnIHQUJXY9fIsakTrrqE,30110
pip/_vendor/packaging/tags.py,sha256=lmsnGNiJ8C4D_Pf9PbM0qgbZvD9kmB9lpZBQUZa3R_Y,15699
pip/_vendor/packaging/utils.py,sha256=dJjeat3BS-TYn1RrUFVwufUMasbtzLfYRoy_HXENeFQ,4200
pip/_vendor/packaging/version.py,sha256=_fLRNrFrxYcHVfyo8vk9j8s6JM8N_xsSxVFr6RJyco8,14665
pip/_vendor/pep517/__init__.py,sha256=QJpRfzTpk6YSPgjcxp9-MCAiS5dEdzf9Bh0UXophG6c,130
pip/_vendor/pep517/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pep517/__pycache__/_compat.cpython-311.pyc,,
pip/_vendor/pep517/__pycache__/build.cpython-311.pyc,,
pip/_vendor/pep517/__pycache__/check.cpython-311.pyc,,
pip/_vendor/pep517/__pycache__/colorlog.cpython-311.pyc,,
pip/_vendor/pep517/__pycache__/dirtools.cpython-311.pyc,,
pip/_vendor/pep517/__pycache__/envbuild.cpython-311.pyc,,
pip/_vendor/pep517/__pycache__/meta.cpython-311.pyc,,
pip/_vendor/pep517/__pycache__/wrappers.cpython-311.pyc,,
pip/_vendor/pep517/_compat.py,sha256=by6evrYnqkisiM-MQcvOKs5bgDMzlOSgZqRHNqf04zE,138
pip/_vendor/pep517/build.py,sha256=VLtq0hOvNWCfX0FkdvTKEr-TmyrbaX0UqghpU7bHO1w,3443
pip/_vendor/pep517/check.py,sha256=o0Mp_PX1yOM2WNq1ZdDph3YA7RObj2UGQUCUF-46RaU,6083
pip/_vendor/pep517/colorlog.py,sha256=eCV1W52xzBjA-sOlKzUcvabRiFa11Y7hA791u-85_c8,3994
pip/_vendor/pep517/dirtools.py,sha256=JiZ1Hlt2LNaLZEhNa_pm1YyG3MUoRh7KxY6hJ8ac-w0,607
pip/_vendor/pep517/envbuild.py,sha256=nkTt1ZY7MXVgYOhPTyTr-VOxQ-q_Qc1touXfQgM56Bs,6081
pip/_vendor/pep517/in_process/__init__.py,sha256=4yDanGyKTXQtLhqRo9eEZ1CsLFezEAEZMfqEd88xrvY,872
pip/_vendor/pep517/in_process/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pep517/in_process/__pycache__/_in_process.cpython-311.pyc,,
pip/_vendor/pep517/in_process/_in_process.py,sha256=JDpTxlKMDN1QfN_ey4IDtE6ZVSWtzP0_WLSqt1TyGaA,10801
pip/_vendor/pep517/meta.py,sha256=budDWsV3I2OnnpSvXQ_ycuTqxh8G7DABoazAq-j8OlQ,2520
pip/_vendor/pep517/wrappers.py,sha256=jcxIy-1Kl8I2xAZgbr6qNjF5b_6Q5gTndf9cxF0p5gM,12721
pip/_vendor/pkg_resources/__init__.py,sha256=NnpQ3g6BCHzpMgOR_OLBmYtniY4oOzdKpwqghfq_6ug,108287
pip/_vendor/pkg_resources/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pkg_resources/__pycache__/py31compat.cpython-311.pyc,,
pip/_vendor/pkg_resources/py31compat.py,sha256=CRk8fkiPRDLsbi5pZcKsHI__Pbmh_94L8mr9Qy9Ab2U,562
pip/_vendor/platformdirs/__init__.py,sha256=x0aUmmovXXuRFVrVQBtwIiovX12B7rUkdV4F9UlLz0Y,12831
pip/_vendor/platformdirs/__main__.py,sha256=ZmsnTxEOxtTvwa-Y_Vfab_JN3X4XCVeN8X0yyy9-qnc,1176
pip/_vendor/platformdirs/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/platformdirs/__pycache__/__main__.cpython-311.pyc,,
pip/_vendor/platformdirs/__pycache__/android.cpython-311.pyc,,
pip/_vendor/platformdirs/__pycache__/api.cpython-311.pyc,,
pip/_vendor/platformdirs/__pycache__/macos.cpython-311.pyc,,
pip/_vendor/platformdirs/__pycache__/unix.cpython-311.pyc,,
pip/_vendor/platformdirs/__pycache__/version.cpython-311.pyc,,
pip/_vendor/platformdirs/__pycache__/windows.cpython-311.pyc,,
pip/_vendor/platformdirs/android.py,sha256=GKizhyS7ESRiU67u8UnBJLm46goau9937EchXWbPBlk,4068
pip/_vendor/platformdirs/api.py,sha256=MXKHXOL3eh_-trSok-JUTjAR_zjmmKF3rjREVABjP8s,4910
pip/_vendor/platformdirs/macos.py,sha256=-3UXQewbT0yMhMdkzRXfXGAntmLIH7Qt4a9Hlf8I5_Y,2655
pip/_vendor/platformdirs/unix.py,sha256=b4aVYTz0qZ50HntwOXo8r6tp82jAa3qTjxw-WlnC2yc,6910
pip/_vendor/platformdirs/version.py,sha256=tsBKKPDX3LLh39yHXeTYauGRbRd-AmOJr9SwKldlFIU,78
pip/_vendor/platformdirs/windows.py,sha256=ISruopR5UGBePC0BxCxXevkZYfjJsIZc49YWU5iYfQ4,6439
pip/_vendor/pygments/__init__.py,sha256=5oLcMLXD0cTG8YcHBPITtK1fS0JBASILEvEnWkTezgE,2999
pip/_vendor/pygments/__main__.py,sha256=p0_rz3JZmNZMNZBOqDojaEx1cr9wmA9FQZX_TYl74lQ,353
pip/_vendor/pygments/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/__main__.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/cmdline.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/console.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/filter.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/formatter.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/lexer.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/modeline.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/plugin.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/regexopt.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/scanner.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/sphinxext.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/style.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/token.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/unistring.cpython-311.pyc,,
pip/_vendor/pygments/__pycache__/util.cpython-311.pyc,,
pip/_vendor/pygments/cmdline.py,sha256=rc0fah4eknRqFgn1wKNEwkq0yWnSqYOGaA4PaIeOxVY,23685
pip/_vendor/pygments/console.py,sha256=hQfqCFuOlGk7DW2lPQYepsw-wkOH1iNt9ylNA1eRymM,1697
pip/_vendor/pygments/filter.py,sha256=NglMmMPTRRv-zuRSE_QbWid7JXd2J4AvwjCW2yWALXU,1938
pip/_vendor/pygments/filters/__init__.py,sha256=b5YuXB9rampSy2-cMtKxGQoMDfrG4_DcvVwZrzTlB6w,40386
pip/_vendor/pygments/filters/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pygments/formatter.py,sha256=6-TS2Y8pUMeWIUolWwr1O8ruC-U6HydWDwOdbAiJgJQ,2917
pip/_vendor/pygments/formatters/__init__.py,sha256=YTqGeHS17fNXCLMZpf7oCxBCKLB9YLsZ8IAsjGhawyg,4810
pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/groff.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/html.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/img.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/irc.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/latex.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/other.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/svg.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-311.pyc,,
pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-311.pyc,,
pip/_vendor/pygments/formatters/_mapping.py,sha256=fCZgvsM6UEuZUG7J6lr47eVss5owKd_JyaNbDfxeqmQ,4104
pip/_vendor/pygments/formatters/bbcode.py,sha256=JrL4ITjN-KzPcuQpPMBf1pm33eW2sDUNr8WzSoAJsJA,3314
pip/_vendor/pygments/formatters/groff.py,sha256=xrOFoLbafSA9uHsSLRogy79_Zc4GWJ8tMK2hCdTJRsw,5086
pip/_vendor/pygments/formatters/html.py,sha256=QNt9prPgxmbKx2M-nfDwoR1bIg06-sNouQuWnE434Wc,35441
pip/_vendor/pygments/formatters/img.py,sha256=h75Y7IRZLZxDEIwyoOsdRLTwm7kLVPbODKkgEiJ0iKI,21938
pip/_vendor/pygments/formatters/irc.py,sha256=iwk5tDJOxbCV64SCmOFyvk__x6RD60ay0nUn7ko9n7U,5871
pip/_vendor/pygments/formatters/latex.py,sha256=thPbytJCIs2AUXsO3NZwqKtXJ-upOlcXP4CXsx94G4w,19351
pip/_vendor/pygments/formatters/other.py,sha256=PczqK1Rms43lz6iucOLPeBMxIncPKOGBt-195w1ynII,5073
pip/_vendor/pygments/formatters/pangomarkup.py,sha256=ZZzMsKJKXrsDniFeMTkIpe7aQ4VZYRHu0idWmSiUJ2U,2212
pip/_vendor/pygments/formatters/rtf.py,sha256=abrKlWjipBkQvhIICxtjYTUNv6WME0iJJObFvqVuudE,5014
pip/_vendor/pygments/formatters/svg.py,sha256=6MM9YyO8NhU42RTQfTWBiagWMnsf9iG5gwhqSriHORE,7335
pip/_vendor/pygments/formatters/terminal.py,sha256=NpEGvwkC6LgMLQTjVzGrJXji3XcET1sb5JCunSCzoRo,4674
pip/_vendor/pygments/formatters/terminal256.py,sha256=4v4OVizvsxtwWBpIy_Po30zeOzE5oJg_mOc1-rCjMDk,11753
pip/_vendor/pygments/lexer.py,sha256=ZPB_TGn_qzrXodRFwEdPzzJk6LZBo9BlfSy3lacc6zg,32005
pip/_vendor/pygments/lexers/__init__.py,sha256=8d80-XfL5UKDCC1wRD1a_ZBZDkZ2HOe7Zul8SsnNYFE,11174
pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-311.pyc,,
pip/_vendor/pygments/lexers/__pycache__/python.cpython-311.pyc,,
pip/_vendor/pygments/lexers/_mapping.py,sha256=zEiCV5FPiBioMJQJjw9kk7IJ5Y9GwknS4VJPYlcNchs,70232
pip/_vendor/pygments/lexers/python.py,sha256=gZROs9iNSOA18YyVghP1cUCD0OwYZ04a6PCwgSOCeSA,53376
pip/_vendor/pygments/modeline.py,sha256=gIbMSYrjSWPk0oATz7W9vMBYkUyTK2OcdVyKjioDRvA,986
pip/_vendor/pygments/plugin.py,sha256=5rPxEoB_89qQMpOs0nI4KyLOzAHNlbQiwEMOKxqNmv8,2591
pip/_vendor/pygments/regexopt.py,sha256=c6xcXGpGgvCET_3VWawJJqAnOp0QttFpQEdOPNY2Py0,3072
pip/_vendor/pygments/scanner.py,sha256=F2T2G6cpkj-yZtzGQr-sOBw5w5-96UrJWveZN6va2aM,3092
pip/_vendor/pygments/sphinxext.py,sha256=F8L0211sPnXaiWutN0lkSUajWBwlgDMIEFFAbMWOvZY,4630
pip/_vendor/pygments/style.py,sha256=RRnussX1YiK9Z7HipIvKorImxu3-HnkdpPCO4u925T0,6257
pip/_vendor/pygments/styles/__init__.py,sha256=iZDZ7PBKb55SpGlE1--cx9cbmWx5lVTH4bXO87t2Vok,3419
pip/_vendor/pygments/styles/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pygments/token.py,sha256=vA2yNHGJBHfq4jNQSah7C9DmIOp34MmYHPA8P-cYAHI,6184
pip/_vendor/pygments/unistring.py,sha256=gP3gK-6C4oAFjjo9HvoahsqzuV4Qz0jl0E0OxfDerHI,63187
pip/_vendor/pygments/util.py,sha256=KgwpWWC3By5AiNwxGTI7oI9aXupH2TyZWukafBJe0Mg,9110
pip/_vendor/pyparsing/__init__.py,sha256=ZPdI7pPo4IYXcABw-51AcqOzsxVvDtqnQbyn_qYWZvo,9171
pip/_vendor/pyparsing/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/actions.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/common.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/core.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/exceptions.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/helpers.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/results.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/testing.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/unicode.cpython-311.pyc,,
pip/_vendor/pyparsing/__pycache__/util.cpython-311.pyc,,
pip/_vendor/pyparsing/actions.py,sha256=wU9i32e0y1ymxKE3OUwSHO-SFIrt1h_wv6Ws0GQjpNU,6426
pip/_vendor/pyparsing/common.py,sha256=lFL97ooIeR75CmW5hjURZqwDCTgruqltcTCZ-ulLO2Q,12936
pip/_vendor/pyparsing/core.py,sha256=AzTm1KFT1FIhiw2zvXZJmrpQoAwB0wOmeDCiR6SYytw,213344
pip/_vendor/pyparsing/diagram/__init__.py,sha256=KW0PV_TvWKnL7jysz0pQbZ24nzWWu2ZfNaeyUIIywIg,23685
pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/pyparsing/exceptions.py,sha256=3LbSafD32NYb1Tzt85GHNkhEAU1eZkTtNSk24cPMemo,9023
pip/_vendor/pyparsing/helpers.py,sha256=QpUOjW0-psvueMwWb9bQpU2noqKCv98_wnw1VSzSdVo,39129
pip/_vendor/pyparsing/results.py,sha256=HgNvWVXBdQP-Q6PtJfoCEeOJk2nwEvG-2KVKC5sGA30,25341
pip/_vendor/pyparsing/testing.py,sha256=7tu4Abp4uSeJV0N_yEPRmmNUhpd18ZQP3CrX41DM814,13402
pip/_vendor/pyparsing/unicode.py,sha256=fwuhMj30SQ165Cv7HJpu-rSxGbRm93kN9L4Ei7VGc1Y,10787
pip/_vendor/pyparsing/util.py,sha256=kq772O5YSeXOSdP-M31EWpbH_ayj7BMHImBYo9xPD5M,6805
pip/_vendor/requests/__init__.py,sha256=3XN75ZS4slWy3TQsEGF7-Q6l2R146teU-s2_rXNhxhU,5178
pip/_vendor/requests/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/__version__.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/_internal_utils.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/adapters.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/api.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/auth.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/certs.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/compat.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/cookies.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/exceptions.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/help.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/hooks.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/models.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/packages.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/sessions.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/status_codes.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/structures.cpython-311.pyc,,
pip/_vendor/requests/__pycache__/utils.cpython-311.pyc,,
pip/_vendor/requests/__version__.py,sha256=nJVa3ef2yRyeYMhy7yHnRyjjpnNTDykZsE4Sp9irBC4,440
pip/_vendor/requests/_internal_utils.py,sha256=aSPlF4uDhtfKxEayZJJ7KkAxtormeTfpwKSBSwtmAUw,1397
pip/_vendor/requests/adapters.py,sha256=GFEz5koZaMZD86v0SHXKVB5SE9MgslEjkCQzldkNwVM,21443
pip/_vendor/requests/api.py,sha256=dyvkDd5itC9z2g0wHl_YfD1yf6YwpGWLO7__8e21nks,6377
pip/_vendor/requests/auth.py,sha256=h-HLlVx9j8rKV5hfSAycP2ApOSglTz77R0tz7qCbbEE,10187
pip/_vendor/requests/certs.py,sha256=PVPooB0jP5hkZEULSCwC074532UFbR2Ptgu0I5zwmCs,575
pip/_vendor/requests/compat.py,sha256=IhK9quyX0RRuWTNcg6d2JGSAOUbM6mym2p_2XjLTwf4,1286
pip/_vendor/requests/cookies.py,sha256=kD3kNEcCj-mxbtf5fJsSaT86eGoEYpD3X0CSgpzl7BM,18560
pip/_vendor/requests/exceptions.py,sha256=FA-_kVwBZ2jhXauRctN_ewHVK25b-fj0Azyz1THQ0Kk,3823
pip/_vendor/requests/help.py,sha256=FnAAklv8MGm_qb2UilDQgS6l0cUttiCFKUjx0zn2XNA,3879
pip/_vendor/requests/hooks.py,sha256=CiuysiHA39V5UfcCBXFIx83IrDpuwfN9RcTUgv28ftQ,733
pip/_vendor/requests/models.py,sha256=GZRMMrGwDOLVvVfFHLUq0qTfIWDla3NcFHa1f5xs9Q8,35287
pip/_vendor/requests/packages.py,sha256=njJmVifY4aSctuW3PP5EFRCxjEwMRDO6J_feG2dKWsI,695
pip/_vendor/requests/sessions.py,sha256=KUqJcRRLovNefUs7ScOXSUVCcfSayTFWtbiJ7gOSlTI,30180
pip/_vendor/requests/status_codes.py,sha256=FvHmT5uH-_uimtRz5hH9VCbt7VV-Nei2J9upbej6j8g,4235
pip/_vendor/requests/structures.py,sha256=-IbmhVz06S-5aPSZuUthZ6-6D9XOjRuTXHOabY041XM,2912
pip/_vendor/requests/utils.py,sha256=0gzSOcx9Ya4liAbHnHuwt4jM78lzCZZoDFgkmsInNUg,33240
pip/_vendor/resolvelib/__init__.py,sha256=UL-B2BDI0_TRIqkfGwLHKLxY-LjBlomz7941wDqzB1I,537
pip/_vendor/resolvelib/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/resolvelib/__pycache__/providers.cpython-311.pyc,,
pip/_vendor/resolvelib/__pycache__/reporters.cpython-311.pyc,,
pip/_vendor/resolvelib/__pycache__/resolvers.cpython-311.pyc,,
pip/_vendor/resolvelib/__pycache__/structs.cpython-311.pyc,,
pip/_vendor/resolvelib/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-311.pyc,,
pip/_vendor/resolvelib/compat/collections_abc.py,sha256=uy8xUZ-NDEw916tugUXm8HgwCGiMO0f-RcdnpkfXfOs,156
pip/_vendor/resolvelib/providers.py,sha256=roVmFBItQJ0TkhNua65h8LdNny7rmeqVEXZu90QiP4o,5872
pip/_vendor/resolvelib/reporters.py,sha256=fW91NKf-lK8XN7i6Yd_rczL5QeOT3sc6AKhpaTEnP3E,1583
pip/_vendor/resolvelib/resolvers.py,sha256=2wYzVGBGerbmcIpH8cFmgSKgLSETz8jmwBMGjCBMHG4,17592
pip/_vendor/resolvelib/structs.py,sha256=IVIYof6sA_N4ZEiE1C1UhzTX495brCNnyCdgq6CYq28,4794
pip/_vendor/rich/__init__.py,sha256=zREyQ22R3zKg8gMdhiikczdVQYtZNeayHNrbBg5scm0,5944
pip/_vendor/rich/__main__.py,sha256=BmTmBWI93ytq75IEPi1uAAdeRYzFfDbgaAXjsX1ogig,8808
pip/_vendor/rich/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/__main__.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_cell_widths.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_emoji_codes.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_emoji_replace.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_export_format.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_extension.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_inspect.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_log_render.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_loop.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_palettes.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_pick.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_ratio.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_spinners.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_stack.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_timer.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_win32_console.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_windows.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_windows_renderer.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/_wrap.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/abc.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/align.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/ansi.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/bar.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/box.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/cells.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/color.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/color_triplet.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/columns.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/console.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/constrain.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/containers.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/control.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/default_styles.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/diagnose.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/emoji.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/errors.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/file_proxy.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/filesize.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/highlighter.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/json.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/jupyter.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/layout.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/live.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/live_render.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/logging.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/markup.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/measure.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/padding.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/pager.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/palette.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/panel.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/pretty.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/progress.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/progress_bar.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/prompt.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/protocol.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/region.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/repr.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/rule.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/scope.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/screen.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/segment.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/spinner.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/status.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/style.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/styled.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/syntax.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/table.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/terminal_theme.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/text.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/theme.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/themes.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/traceback.cpython-311.pyc,,
pip/_vendor/rich/__pycache__/tree.cpython-311.pyc,,
pip/_vendor/rich/_cell_widths.py,sha256=2n4EiJi3X9sqIq0O16kUZ_zy6UYMd3xFfChlKfnW1Hc,10096
pip/_vendor/rich/_emoji_codes.py,sha256=hu1VL9nbVdppJrVoijVshRlcRRe_v3dju3Mmd2sKZdY,140235
pip/_vendor/rich/_emoji_replace.py,sha256=n-kcetsEUx2ZUmhQrfeMNc-teeGhpuSQ5F8VPBsyvDo,1064
pip/_vendor/rich/_export_format.py,sha256=nHArqOljIlYn6NruhWsAsh-fHo7oJC3y9BDJyAa-QYQ,2114
pip/_vendor/rich/_extension.py,sha256=Xt47QacCKwYruzjDi-gOBq724JReDj9Cm9xUi5fr-34,265
pip/_vendor/rich/_inspect.py,sha256=oZJGw31e64dwXSCmrDnvZbwVb1ZKhWfU8wI3VWohjJk,9695
pip/_vendor/rich/_log_render.py,sha256=1ByI0PA1ZpxZY3CGJOK54hjlq4X-Bz_boIjIqCd8Kns,3225
pip/_vendor/rich/_loop.py,sha256=hV_6CLdoPm0va22Wpw4zKqM0RYsz3TZxXj0PoS-9eDQ,1236
pip/_vendor/rich/_palettes.py,sha256=cdev1JQKZ0JvlguV9ipHgznTdnvlIzUFDBb0It2PzjI,7063
pip/_vendor/rich/_pick.py,sha256=evDt8QN4lF5CiwrUIXlOJCntitBCOsI3ZLPEIAVRLJU,423
pip/_vendor/rich/_ratio.py,sha256=2lLSliL025Y-YMfdfGbutkQDevhcyDqc-DtUYW9mU70,5472
pip/_vendor/rich/_spinners.py,sha256=U2r1_g_1zSjsjiUdAESc2iAMc3i4ri_S8PYP6kQ5z1I,19919
pip/_vendor/rich/_stack.py,sha256=-C8OK7rxn3sIUdVwxZBBpeHhIzX0eI-VM3MemYfaXm0,351
pip/_vendor/rich/_timer.py,sha256=zelxbT6oPFZnNrwWPpc1ktUeAT-Vc4fuFcRZLQGLtMI,417
pip/_vendor/rich/_win32_console.py,sha256=P0vxI2fcndym1UU1S37XAzQzQnkyY7YqAKmxm24_gug,22820
pip/_vendor/rich/_windows.py,sha256=dvNl9TmfPzNVxiKk5WDFihErZ5796g2UC9-KGGyfXmk,1926
pip/_vendor/rich/_windows_renderer.py,sha256=t74ZL3xuDCP3nmTp9pH1L5LiI2cakJuQRQleHCJerlk,2783
pip/_vendor/rich/_wrap.py,sha256=xfV_9t0Sg6rzimmrDru8fCVmUlalYAcHLDfrJZnbbwQ,1840
pip/_vendor/rich/abc.py,sha256=ON-E-ZqSSheZ88VrKX2M3PXpFbGEUUZPMa_Af0l-4f0,890
pip/_vendor/rich/align.py,sha256=FV6_GS-8uhIyViMng3hkIWSFaTgMohK1Oqyjl8I8mGE,10368
pip/_vendor/rich/ansi.py,sha256=HtaPG7dvgL6_yo0sQmx5CM05DJ4_1goY5SWXXOYNaKs,6820
pip/_vendor/rich/bar.py,sha256=a7UD303BccRCrEhGjfMElpv5RFYIinaAhAuqYqhUvmw,3264
pip/_vendor/rich/box.py,sha256=1Iv1sUWqjtp5XwLwGH-AJ8HgyXZ7dRFUkO0z3M_bRl8,9864
pip/_vendor/rich/cells.py,sha256=zMjFI15wCpgjLR14lHdfFMVC6qMDi5OsKIB0PYZBBMk,4503
pip/_vendor/rich/color.py,sha256=kp87L8V4-3qayE6CUxtW_nP8Ujfew_-DAhNwYMXBMOY,17957
pip/_vendor/rich/color_triplet.py,sha256=3lhQkdJbvWPoLDO-AnYImAWmJvV5dlgYNCVZ97ORaN4,1054
pip/_vendor/rich/columns.py,sha256=HUX0KcMm9dsKNi11fTbiM_h2iDtl8ySCaVcxlalEzq8,7131
pip/_vendor/rich/console.py,sha256=bTT9DNX03V4cQXefg22d-gLSs_e_ZY2zdCvLIlEyU2Q,95885
pip/_vendor/rich/constrain.py,sha256=1VIPuC8AgtKWrcncQrjBdYqA3JVWysu6jZo1rrh7c7Q,1288
pip/_vendor/rich/containers.py,sha256=aKgm5UDHn5Nmui6IJaKdsZhbHClh_X7D-_Wg8Ehrr7s,5497
pip/_vendor/rich/control.py,sha256=DSkHTUQLorfSERAKE_oTAEUFefZnZp4bQb4q8rHbKws,6630
pip/_vendor/rich/default_styles.py,sha256=WqVh-RPNEsx0Wxf3fhS_fCn-wVqgJ6Qfo-Zg7CoCsLE,7954
pip/_vendor/rich/diagnose.py,sha256=an6uouwhKPAlvQhYpNNpGq9EJysfMIOvvCbO3oSoR24,972
pip/_vendor/rich/emoji.py,sha256=omTF9asaAnsM4yLY94eR_9dgRRSm1lHUszX20D1yYCQ,2501
pip/_vendor/rich/errors.py,sha256=5pP3Kc5d4QJ_c0KFsxrfyhjiPVe7J1zOqSFbFAzcV-Y,642
pip/_vendor/rich/file_proxy.py,sha256=4gCbGRXg0rW35Plaf0UVvj3dfENHuzc_n8I_dBqxI7o,1616
pip/_vendor/rich/filesize.py,sha256=yShoVpARafJBreyZFaAhC4OhnJ6ydC1WXR-Ez4wU_YQ,2507
pip/_vendor/rich/highlighter.py,sha256=3WW6PACGlq0e3YDjfqiMBQ0dYZwu7pcoFYUgJy01nb0,9585
pip/_vendor/rich/json.py,sha256=RCm4lXBXrjvXHpqrWPH8wdGP0jEo4IohLmkddlhRY18,5051
pip/_vendor/rich/jupyter.py,sha256=QyoKoE_8IdCbrtiSHp9TsTSNyTHY0FO5whE7jOTd9UE,3252
pip/_vendor/rich/layout.py,sha256=E3xJ4fomizUADwime3VA0lBXoMSPl9blEokIzVBjO0Q,14074
pip/_vendor/rich/live.py,sha256=emVaLUua-FKSYqZXmtJJjBIstO99CqMOuA6vMAKVkO0,14172
pip/_vendor/rich/live_render.py,sha256=zElm3PrfSIvjOce28zETHMIUf9pFYSUA5o0AflgUP64,3667
pip/_vendor/rich/logging.py,sha256=10j13lPr-QuYqEEBz_2aRJp8gNYvSN2wmCUlUqJcPLM,11471
pip/_vendor/rich/markup.py,sha256=xzF4uAafiEeEYDJYt_vUnJOGoTU8RrH-PH7WcWYXjCg,8198
pip/_vendor/rich/measure.py,sha256=HmrIJX8sWRTHbgh8MxEay_83VkqNW_70s8aKP5ZcYI8,5305
pip/_vendor/rich/padding.py,sha256=kTFGsdGe0os7tXLnHKpwTI90CXEvrceeZGCshmJy5zw,4970
pip/_vendor/rich/pager.py,sha256=SO_ETBFKbg3n_AgOzXm41Sv36YxXAyI3_R-KOY2_uSc,828
pip/_vendor/rich/palette.py,sha256=lInvR1ODDT2f3UZMfL1grq7dY_pDdKHw4bdUgOGaM4Y,3396
pip/_vendor/rich/panel.py,sha256=CzdojkDAjxAKgvDxis47nWzUh1V2NniOqkJJQajosG8,8744
pip/_vendor/rich/pretty.py,sha256=CalVLVW3mvTn1hvI9Pgi2v-y4S-5zUWBK-PH7SlVs-U,36576
pip/_vendor/rich/progress.py,sha256=zjQRwd3TmDnAvSjTPsNPHFjmqE9GOEX3bf0Lj56hIL8,59746
pip/_vendor/rich/progress_bar.py,sha256=zHHaFPEfIhW2fq6Fnl5vBY7AUpP1N0HVGElISUHsnqw,8161
pip/_vendor/rich/prompt.py,sha256=x0mW-pIPodJM4ry6grgmmLrl8VZp99kqcmdnBe70YYA,11303
pip/_vendor/rich/protocol.py,sha256=5hHHDDNHckdk8iWH5zEbi-zuIVSF5hbU2jIo47R7lTE,1391
pip/_vendor/rich/region.py,sha256=rNT9xZrVZTYIXZC0NYn41CJQwYNbR-KecPOxTgQvB8Y,166
pip/_vendor/rich/repr.py,sha256=Je91CIrZN_av9L3FRCKCs5yoX2LvczrCNKqUbVsjUvQ,4449
pip/_vendor/rich/rule.py,sha256=V6AWI0wCb6DB0rvN967FRMlQrdlG7HoZdfEAHyeG8CM,4773
pip/_vendor/rich/scope.py,sha256=HX13XsJfqzQHpPfw4Jn9JmJjCsRj9uhHxXQEqjkwyLA,2842
pip/_vendor/rich/screen.py,sha256=YoeReESUhx74grqb0mSSb9lghhysWmFHYhsbMVQjXO8,1591
pip/_vendor/rich/segment.py,sha256=6XdX0MfL18tUCaUWDWncIqx0wpq3GiaqzhYP779JvRA,24224
pip/_vendor/rich/spinner.py,sha256=7b8MCleS4fa46HX0AzF98zfu6ZM6fAL0UgYzPOoakF4,4374
pip/_vendor/rich/status.py,sha256=gJsIXIZeSo3urOyxRUjs6VrhX5CZrA0NxIQ-dxhCnwo,4425
pip/_vendor/rich/style.py,sha256=4WnUEkHNMp9Tfmd8cmbxWGby7QeTk2LUTQzFSs46EQc,26240
pip/_vendor/rich/styled.py,sha256=eZNnzGrI4ki_54pgY3Oj0T-x3lxdXTYh4_ryDB24wBU,1258
pip/_vendor/rich/syntax.py,sha256=_M08KbE11nNWNBPooFLKAA7lWkThPzlGUsuesxQYsuA,34697
pip/_vendor/rich/table.py,sha256=r_lahmj45cINCWLYaIjq9yEv3gve8E6bkYTP8NDqApE,39515
pip/_vendor/rich/terminal_theme.py,sha256=1j5-ufJfnvlAo5Qsi_ACZiXDmwMXzqgmFByObT9-yJY,3370
pip/_vendor/rich/text.py,sha256=oajdGIeHcLcSdOwbC48_20ylDsHAS5fsPZD_Ih0clyA,44666
pip/_vendor/rich/theme.py,sha256=GKNtQhDBZKAzDaY0vQVQQFzbc0uWfFe6CJXA-syT7zQ,3627
pip/_vendor/rich/themes.py,sha256=0xgTLozfabebYtcJtDdC5QkX5IVUEaviqDUJJh4YVFk,102
pip/_vendor/rich/traceback.py,sha256=MORQpXH7AvhAAThW8oIbtwffXb8M6XRkSkcJ52JuA3g,26060
pip/_vendor/rich/tree.py,sha256=BMbUYNjS9uodNPfvtY_odmU09GA5QzcMbQ5cJZhllQI,9169
pip/_vendor/six.py,sha256=TOOfQi7nFGfMrIvtdr6wX4wyHH8M7aknmuLfo2cBBrM,34549
pip/_vendor/tenacity/__init__.py,sha256=rjcWJVq5PcNJNC42rt-TAGGskM-RUEkZbDKu1ra7IPo,18364
pip/_vendor/tenacity/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/_asyncio.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/_utils.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/after.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/before.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/before_sleep.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/nap.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/retry.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/stop.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-311.pyc,,
pip/_vendor/tenacity/__pycache__/wait.cpython-311.pyc,,
pip/_vendor/tenacity/_asyncio.py,sha256=HEb0BVJEeBJE9P-m9XBxh1KcaF96BwoeqkJCL5sbVcQ,3314
pip/_vendor/tenacity/_utils.py,sha256=-y68scDcyoqvTJuJJ0GTfjdSCljEYlbCYvgk7nM4NdM,1944
pip/_vendor/tenacity/after.py,sha256=dlmyxxFy2uqpLXDr838DiEd7jgv2AGthsWHGYcGYsaI,1496
pip/_vendor/tenacity/before.py,sha256=7XtvRmO0dRWUp8SVn24OvIiGFj8-4OP5muQRUiWgLh0,1376
pip/_vendor/tenacity/before_sleep.py,sha256=ThyDvqKU5yle_IvYQz_b6Tp6UjUS0PhVp6zgqYl9U6Y,1908
pip/_vendor/tenacity/nap.py,sha256=fRWvnz1aIzbIq9Ap3gAkAZgDH6oo5zxMrU6ZOVByq0I,1383
pip/_vendor/tenacity/retry.py,sha256=Cy504Ss3UrRV7lnYgvymF66WD1wJ2dbM869kDcjuDes,7550
pip/_vendor/tenacity/stop.py,sha256=sKHmHaoSaW6sKu3dTxUVKr1-stVkY7lw4Y9yjZU30zQ,2790
pip/_vendor/tenacity/tornadoweb.py,sha256=E8lWO2nwe6dJgoB-N2HhQprYLDLB_UdSgFnv-EN6wKE,2145
pip/_vendor/tenacity/wait.py,sha256=tdLTESRm5E237VHG0SxCDXRa0DHKPKVq285kslHVURc,8011
pip/_vendor/tomli/__init__.py,sha256=JhUwV66DB1g4Hvt1UQCVMdfCu-IgAV8FXmvDU9onxd4,396
pip/_vendor/tomli/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/tomli/__pycache__/_parser.cpython-311.pyc,,
pip/_vendor/tomli/__pycache__/_re.cpython-311.pyc,,
pip/_vendor/tomli/__pycache__/_types.cpython-311.pyc,,
pip/_vendor/tomli/_parser.py,sha256=g9-ENaALS-B8dokYpCuzUFalWlog7T-SIYMjLZSWrtM,22633
pip/_vendor/tomli/_re.py,sha256=dbjg5ChZT23Ka9z9DHOXfdtSpPwUfdgMXnj8NOoly-w,2943
pip/_vendor/tomli/_types.py,sha256=-GTG2VUqkpxwMqzmVO4F7ybKddIbAnuAHXfmWQcTi3Q,254
pip/_vendor/typing_extensions.py,sha256=VKZ_nHsuzDbKOVUY2CTdavwBgfZ2EXRyluZHRzUYAbg,80114
pip/_vendor/urllib3/__init__.py,sha256=iXLcYiJySn0GNbWOOZDDApgBL1JgP44EZ8i1760S8Mc,3333
pip/_vendor/urllib3/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/_collections.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/_version.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/connection.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/connectionpool.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/exceptions.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/fields.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/filepost.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/poolmanager.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/request.cpython-311.pyc,,
pip/_vendor/urllib3/__pycache__/response.cpython-311.pyc,,
pip/_vendor/urllib3/_collections.py,sha256=Rp1mVyBgc_UlAcp6M3at1skJBXR5J43NawRTvW2g_XY,10811
pip/_vendor/urllib3/_version.py,sha256=GhuGBUT_MtRxHEHDb-LYs5yLPeYWlCwFBPjGZmVJbVg,64
pip/_vendor/urllib3/connection.py,sha256=8976wL6sGeVMW0JnXvx5mD00yXu87uQjxtB9_VL8dx8,20070
pip/_vendor/urllib3/connectionpool.py,sha256=vEzk1iJEw1qR2vHBo7m3Y98iDfna6rKkUz3AyK5lJKQ,39093
pip/_vendor/urllib3/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/_appengine_environ.py,sha256=bDbyOEhW2CKLJcQqAKAyrEHN-aklsyHFKq6vF8ZFsmk,957
pip/_vendor/urllib3/contrib/_securetransport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-311.pyc,,
pip/_vendor/urllib3/contrib/_securetransport/bindings.py,sha256=4Xk64qIkPBt09A5q-RIFUuDhNc9mXilVapm7WnYnzRw,17632
pip/_vendor/urllib3/contrib/_securetransport/low_level.py,sha256=B2JBB2_NRP02xK6DCa1Pa9IuxrPwxzDzZbixQkb7U9M,13922
pip/_vendor/urllib3/contrib/appengine.py,sha256=lfzpHFmJiO82shClLEm3QB62SYgHWnjpZOH_2JhU5Tc,11034
pip/_vendor/urllib3/contrib/ntlmpool.py,sha256=ej9gGvfAb2Gt00lafFp45SIoRz-QwrQ4WChm6gQmAlM,4538
pip/_vendor/urllib3/contrib/pyopenssl.py,sha256=rt9NEIP8iMBLxxRhH0jLnmshW-OFP83jEayxMSqu2MU,17182
pip/_vendor/urllib3/contrib/securetransport.py,sha256=yhZdmVjY6PI6EeFbp7qYOp6-vp1Rkv2NMuOGaEj7pmc,34448
pip/_vendor/urllib3/contrib/socks.py,sha256=aRi9eWXo9ZEb95XUxef4Z21CFlnnjbEiAo9HOseoMt4,7097
pip/_vendor/urllib3/exceptions.py,sha256=0Mnno3KHTNfXRfY7638NufOPkUb6mXOm-Lqj-4x2w8A,8217
pip/_vendor/urllib3/fields.py,sha256=kvLDCg_JmH1lLjUUEY_FLS8UhY7hBvDPuVETbY8mdrM,8579
pip/_vendor/urllib3/filepost.py,sha256=5b_qqgRHVlL7uLtdAYBzBh-GHmU5AfJVt_2N0XS3PeY,2440
pip/_vendor/urllib3/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/urllib3/packages/__pycache__/six.cpython-311.pyc,,
pip/_vendor/urllib3/packages/backports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-311.pyc,,
pip/_vendor/urllib3/packages/backports/makefile.py,sha256=nbzt3i0agPVP07jqqgjhaYjMmuAi_W5E0EywZivVO8E,1417
pip/_vendor/urllib3/packages/six.py,sha256=b9LM0wBXv7E7SrbCjAm4wwN-hrH-iNxv18LgWNMMKPo,34665
pip/_vendor/urllib3/poolmanager.py,sha256=0KOOJECoeLYVjUHvv-0h4Oq3FFQQ2yb-Fnjkbj8gJO0,19786
pip/_vendor/urllib3/request.py,sha256=ZFSIqX0C6WizixecChZ3_okyu7BEv0lZu1VT0s6h4SM,5985
pip/_vendor/urllib3/response.py,sha256=p3VBYPhwBca77wCZfmoXvEDVVC3SdF7yxQ6TXuxy1BI,30109
pip/_vendor/urllib3/util/__init__.py,sha256=JEmSmmqqLyaw8P51gUImZh8Gwg9i1zSe-DoqAitn2nc,1155
pip/_vendor/urllib3/util/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/connection.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/proxy.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/queue.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/request.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/response.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/retry.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/timeout.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/url.cpython-311.pyc,,
pip/_vendor/urllib3/util/__pycache__/wait.cpython-311.pyc,,
pip/_vendor/urllib3/util/connection.py,sha256=5Lx2B1PW29KxBn2T0xkN1CBgRBa3gGVJBKoQoRogEVk,4901
pip/_vendor/urllib3/util/proxy.py,sha256=zUvPPCJrp6dOF0N4GAVbOcl6o-4uXKSrGiTkkr5vUS4,1605
pip/_vendor/urllib3/util/queue.py,sha256=nRgX8_eX-_VkvxoX096QWoz8Ps0QHUAExILCY_7PncM,498
pip/_vendor/urllib3/util/request.py,sha256=C0OUt2tcU6LRiQJ7YYNP9GvPrSvl7ziIBekQ-5nlBZk,3997
pip/_vendor/urllib3/util/response.py,sha256=GJpg3Egi9qaJXRwBh5wv-MNuRWan5BIu40oReoxWP28,3510
pip/_vendor/urllib3/util/retry.py,sha256=iESg2PvViNdXBRY4MpL4h0kqwOOkHkxmLn1kkhFHPU8,22001
pip/_vendor/urllib3/util/ssl_.py,sha256=X4-AqW91aYPhPx6-xbf66yHFQKbqqfC_5Zt4WkLX1Hc,17177
pip/_vendor/urllib3/util/ssl_match_hostname.py,sha256=Ir4cZVEjmAk8gUAIHWSi7wtOO83UCYABY2xFD1Ql_WA,5758
pip/_vendor/urllib3/util/ssltransport.py,sha256=NA-u5rMTrDFDFC8QzRKUEKMG0561hOD4qBTr3Z4pv6E,6895
pip/_vendor/urllib3/util/timeout.py,sha256=QSbBUNOB9yh6AnDn61SrLQ0hg5oz0I9-uXEG91AJuIg,10003
pip/_vendor/urllib3/util/url.py,sha256=49HwObaTUUjqVe4qvSUvIjZyf3ghgNA6-OLm3kmkFKM,14287
pip/_vendor/urllib3/util/wait.py,sha256=fOX0_faozG2P7iVojQoE1mbydweNyTcm-hXEfFrTtLI,5403
pip/_vendor/vendor.txt,sha256=07gLL_CcEHdl1XM0g4PH2L4gsTTMlJr8WWIC11yEyMo,469
pip/_vendor/webencodings/__init__.py,sha256=qOBJIuPy_4ByYH6W_bNgJF-qYQ2DoU-dKsDu5yRWCXg,10579
pip/_vendor/webencodings/__pycache__/__init__.cpython-311.pyc,,
pip/_vendor/webencodings/__pycache__/labels.cpython-311.pyc,,
pip/_vendor/webencodings/__pycache__/mklabels.cpython-311.pyc,,
pip/_vendor/webencodings/__pycache__/tests.cpython-311.pyc,,
pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-311.pyc,,
pip/_vendor/webencodings/labels.py,sha256=4AO_KxTddqGtrL9ns7kAPjb0CcN6xsCIxbK37HY9r3E,8979
pip/_vendor/webencodings/mklabels.py,sha256=GYIeywnpaLnP0GSic8LFWgd0UVvO_l1Nc6YoF-87R_4,1305
pip/_vendor/webencodings/tests.py,sha256=OtGLyjhNY1fvkW1GvLJ_FV9ZoqC9Anyjr7q3kxTbzNs,6563
pip/_vendor/webencodings/x_user_defined.py,sha256=yOqWSdmpytGfUgh_Z6JYgDNhoc-BAHyyeeT15Fr42tM,4307
pip/py.typed,sha256=EBVvvPRTn_eIpz5e5QztSCdrMX7Qwd7VP93RSoIlZ2I,286

View File

@ -0,0 +1,5 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.37.1)
Root-Is-Purelib: true
Tag: py3-none-any

View File

@ -0,0 +1,4 @@
[console_scripts]
pip = pip._internal.cli.main:main
pip3 = pip._internal.cli.main:main
pip3.10 = pip._internal.cli.main:main

View File

@ -0,0 +1 @@
pip

View File

@ -0,0 +1,13 @@
from typing import List, Optional
__version__ = "22.3.1"
def main(args: Optional[List[str]] = None) -> int:
"""This is an internal API only meant for use by pip's own console scripts.
For additional details, see https://github.com/pypa/pip/issues/7498.
"""
from pip._internal.utils.entrypoints import _wrapper
return _wrapper(args)

View File

@ -0,0 +1,31 @@
import os
import sys
import warnings
# Remove '' and current working directory from the first entry
# of sys.path, if present to avoid using current directory
# in pip commands check, freeze, install, list and show,
# when invoked as python -m pip <command>
if sys.path[0] in ("", os.getcwd()):
sys.path.pop(0)
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == "":
# __file__ is pip-*.whl/pip/__main__.py
# first dirname call strips of '/__main__.py', second strips off '/pip'
# Resulting path is the name of the wheel itself
# Add that to sys.path so we can import pip
path = os.path.dirname(os.path.dirname(__file__))
sys.path.insert(0, path)
if __name__ == "__main__":
# Work around the error reported in #9540, pending a proper fix.
# Note: It is essential the warning filter is set *before* importing
# pip, as the deprecation happens at import time, not runtime.
warnings.filterwarnings(
"ignore", category=DeprecationWarning, module=".*packaging\\.version"
)
from pip._internal.cli.main import main as _main
sys.exit(_main())

View File

@ -0,0 +1,50 @@
"""Execute exactly this copy of pip, within a different environment.
This file is named as it is, to ensure that this module can't be imported via
an import statement.
"""
# /!\ This version compatibility check section must be Python 2 compatible. /!\
import sys
# Copied from setup.py
PYTHON_REQUIRES = (3, 7)
def version_str(version): # type: ignore
return ".".join(str(v) for v in version)
if sys.version_info[:2] < PYTHON_REQUIRES:
raise SystemExit(
"This version of pip does not support python {} (requires >={}).".format(
version_str(sys.version_info[:2]), version_str(PYTHON_REQUIRES)
)
)
# From here on, we can use Python 3 features, but the syntax must remain
# Python 2 compatible.
import runpy # noqa: E402
from importlib.machinery import PathFinder # noqa: E402
from os.path import dirname # noqa: E402
PIP_SOURCES_ROOT = dirname(dirname(__file__))
class PipImportRedirectingFinder:
@classmethod
def find_spec(self, fullname, path=None, target=None): # type: ignore
if fullname != "pip":
return None
spec = PathFinder.find_spec(fullname, [PIP_SOURCES_ROOT], target)
assert spec, (PIP_SOURCES_ROOT, fullname)
return spec
sys.meta_path.insert(0, PipImportRedirectingFinder())
assert __name__ == "__main__", "Cannot run __pip-runner__.py as a non-main module"
runpy.run_module("pip", run_name="__main__", alter_sys=True)

View File

@ -0,0 +1,19 @@
from typing import List, Optional
import pip._internal.utils.inject_securetransport # noqa
from pip._internal.utils import _log
# init_logging() must be called before any call to logging.getLogger()
# which happens at import of most modules.
_log.init_logging()
def main(args: (Optional[List[str]]) = None) -> int:
"""This is preserved for old console scripts that may still be referencing
it.
For additional details, see https://github.com/pypa/pip/issues/7498.
"""
from pip._internal.utils.entrypoints import _wrapper
return _wrapper(args)

View File

@ -0,0 +1,310 @@
"""Build Environment used for isolation during sdist building
"""
import logging
import os
import pathlib
import site
import sys
import textwrap
from collections import OrderedDict
from sysconfig import get_paths
from types import TracebackType
from typing import TYPE_CHECKING, Iterable, List, Optional, Set, Tuple, Type
from pip._vendor.certifi import where
from pip._vendor.packaging.requirements import Requirement
from pip._vendor.packaging.version import Version
from pip import __file__ as pip_location
from pip._internal.cli.spinners import open_spinner
from pip._internal.locations import get_platlib, get_prefixed_libs, get_purelib
from pip._internal.metadata import get_default_environment, get_environment
from pip._internal.utils.subprocess import call_subprocess
from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds
if TYPE_CHECKING:
from pip._internal.index.package_finder import PackageFinder
logger = logging.getLogger(__name__)
class _Prefix:
def __init__(self, path: str) -> None:
self.path = path
self.setup = False
self.bin_dir = get_paths(
"nt" if os.name == "nt" else "posix_prefix",
vars={"base": path, "platbase": path},
)["scripts"]
self.lib_dirs = get_prefixed_libs(path)
def get_runnable_pip() -> str:
"""Get a file to pass to a Python executable, to run the currently-running pip.
This is used to run a pip subprocess, for installing requirements into the build
environment.
"""
source = pathlib.Path(pip_location).resolve().parent
if not source.is_dir():
# This would happen if someone is using pip from inside a zip file. In that
# case, we can use that directly.
return str(source)
return os.fsdecode(source / "__pip-runner__.py")
def _get_system_sitepackages() -> Set[str]:
"""Get system site packages
Usually from site.getsitepackages,
but fallback on `get_purelib()/get_platlib()` if unavailable
(e.g. in a virtualenv created by virtualenv<20)
Returns normalized set of strings.
"""
if hasattr(site, "getsitepackages"):
system_sites = site.getsitepackages()
else:
# virtualenv < 20 overwrites site.py without getsitepackages
# fallback on get_purelib/get_platlib.
# this is known to miss things, but shouldn't in the cases
# where getsitepackages() has been removed (inside a virtualenv)
system_sites = [get_purelib(), get_platlib()]
return {os.path.normcase(path) for path in system_sites}
class BuildEnvironment:
"""Creates and manages an isolated environment to install build deps"""
def __init__(self) -> None:
temp_dir = TempDirectory(kind=tempdir_kinds.BUILD_ENV, globally_managed=True)
self._prefixes = OrderedDict(
(name, _Prefix(os.path.join(temp_dir.path, name)))
for name in ("normal", "overlay")
)
self._bin_dirs: List[str] = []
self._lib_dirs: List[str] = []
for prefix in reversed(list(self._prefixes.values())):
self._bin_dirs.append(prefix.bin_dir)
self._lib_dirs.extend(prefix.lib_dirs)
# Customize site to:
# - ensure .pth files are honored
# - prevent access to system site packages
system_sites = _get_system_sitepackages()
self._site_dir = os.path.join(temp_dir.path, "site")
if not os.path.exists(self._site_dir):
os.mkdir(self._site_dir)
with open(
os.path.join(self._site_dir, "sitecustomize.py"), "w", encoding="utf-8"
) as fp:
fp.write(
textwrap.dedent(
"""
import os, site, sys
# First, drop system-sites related paths.
original_sys_path = sys.path[:]
known_paths = set()
for path in {system_sites!r}:
site.addsitedir(path, known_paths=known_paths)
system_paths = set(
os.path.normcase(path)
for path in sys.path[len(original_sys_path):]
)
original_sys_path = [
path for path in original_sys_path
if os.path.normcase(path) not in system_paths
]
sys.path = original_sys_path
# Second, add lib directories.
# ensuring .pth file are processed.
for path in {lib_dirs!r}:
assert not path in sys.path
site.addsitedir(path)
"""
).format(system_sites=system_sites, lib_dirs=self._lib_dirs)
)
def __enter__(self) -> None:
self._save_env = {
name: os.environ.get(name, None)
for name in ("PATH", "PYTHONNOUSERSITE", "PYTHONPATH")
}
path = self._bin_dirs[:]
old_path = self._save_env["PATH"]
if old_path:
path.extend(old_path.split(os.pathsep))
pythonpath = [self._site_dir]
os.environ.update(
{
"PATH": os.pathsep.join(path),
"PYTHONNOUSERSITE": "1",
"PYTHONPATH": os.pathsep.join(pythonpath),
}
)
def __exit__(
self,
exc_type: Optional[Type[BaseException]],
exc_val: Optional[BaseException],
exc_tb: Optional[TracebackType],
) -> None:
for varname, old_value in self._save_env.items():
if old_value is None:
os.environ.pop(varname, None)
else:
os.environ[varname] = old_value
def check_requirements(
self, reqs: Iterable[str]
) -> Tuple[Set[Tuple[str, str]], Set[str]]:
"""Return 2 sets:
- conflicting requirements: set of (installed, wanted) reqs tuples
- missing requirements: set of reqs
"""
missing = set()
conflicting = set()
if reqs:
env = (
get_environment(self._lib_dirs)
if hasattr(self, "_lib_dirs")
else get_default_environment()
)
for req_str in reqs:
req = Requirement(req_str)
# We're explicitly evaluating with an empty extra value, since build
# environments are not provided any mechanism to select specific extras.
if req.marker is not None and not req.marker.evaluate({"extra": ""}):
continue
dist = env.get_distribution(req.name)
if not dist:
missing.add(req_str)
continue
if isinstance(dist.version, Version):
installed_req_str = f"{req.name}=={dist.version}"
else:
installed_req_str = f"{req.name}==={dist.version}"
if not req.specifier.contains(dist.version, prereleases=True):
conflicting.add((installed_req_str, req_str))
# FIXME: Consider direct URL?
return conflicting, missing
def install_requirements(
self,
finder: "PackageFinder",
requirements: Iterable[str],
prefix_as_string: str,
*,
kind: str,
) -> None:
prefix = self._prefixes[prefix_as_string]
assert not prefix.setup
prefix.setup = True
if not requirements:
return
self._install_requirements(
get_runnable_pip(),
finder,
requirements,
prefix,
kind=kind,
)
@staticmethod
def _install_requirements(
pip_runnable: str,
finder: "PackageFinder",
requirements: Iterable[str],
prefix: _Prefix,
*,
kind: str,
) -> None:
args: List[str] = [
sys.executable,
pip_runnable,
"install",
"--ignore-installed",
"--no-user",
"--prefix",
prefix.path,
"--no-warn-script-location",
]
if logger.getEffectiveLevel() <= logging.DEBUG:
args.append("-v")
for format_control in ("no_binary", "only_binary"):
formats = getattr(finder.format_control, format_control)
args.extend(
(
"--" + format_control.replace("_", "-"),
",".join(sorted(formats or {":none:"})),
)
)
index_urls = finder.index_urls
if index_urls:
args.extend(["-i", index_urls[0]])
for extra_index in index_urls[1:]:
args.extend(["--extra-index-url", extra_index])
else:
args.append("--no-index")
for link in finder.find_links:
args.extend(["--find-links", link])
for host in finder.trusted_hosts:
args.extend(["--trusted-host", host])
if finder.allow_all_prereleases:
args.append("--pre")
if finder.prefer_binary:
args.append("--prefer-binary")
args.append("--")
args.extend(requirements)
extra_environ = {"_PIP_STANDALONE_CERT": where()}
with open_spinner(f"Installing {kind}") as spinner:
call_subprocess(
args,
command_desc=f"pip subprocess to install {kind}",
spinner=spinner,
extra_environ=extra_environ,
)
class NoOpBuildEnvironment(BuildEnvironment):
"""A no-op drop-in replacement for BuildEnvironment"""
def __init__(self) -> None:
pass
def __enter__(self) -> None:
pass
def __exit__(
self,
exc_type: Optional[Type[BaseException]],
exc_val: Optional[BaseException],
exc_tb: Optional[TracebackType],
) -> None:
pass
def cleanup(self) -> None:
pass
def install_requirements(
self,
finder: "PackageFinder",
requirements: Iterable[str],
prefix_as_string: str,
*,
kind: str,
) -> None:
raise NotImplementedError()

View File

@ -0,0 +1,293 @@
"""Cache Management
"""
import hashlib
import json
import logging
import os
from pathlib import Path
from typing import Any, Dict, List, Optional, Set
from pip._vendor.packaging.tags import Tag, interpreter_name, interpreter_version
from pip._vendor.packaging.utils import canonicalize_name
from pip._internal.exceptions import InvalidWheelFilename
from pip._internal.models.direct_url import DirectUrl
from pip._internal.models.format_control import FormatControl
from pip._internal.models.link import Link
from pip._internal.models.wheel import Wheel
from pip._internal.utils.temp_dir import TempDirectory, tempdir_kinds
from pip._internal.utils.urls import path_to_url
logger = logging.getLogger(__name__)
ORIGIN_JSON_NAME = "origin.json"
def _hash_dict(d: Dict[str, str]) -> str:
"""Return a stable sha224 of a dictionary."""
s = json.dumps(d, sort_keys=True, separators=(",", ":"), ensure_ascii=True)
return hashlib.sha224(s.encode("ascii")).hexdigest()
class Cache:
"""An abstract class - provides cache directories for data from links
:param cache_dir: The root of the cache.
:param format_control: An object of FormatControl class to limit
binaries being read from the cache.
:param allowed_formats: which formats of files the cache should store.
('binary' and 'source' are the only allowed values)
"""
def __init__(
self, cache_dir: str, format_control: FormatControl, allowed_formats: Set[str]
) -> None:
super().__init__()
assert not cache_dir or os.path.isabs(cache_dir)
self.cache_dir = cache_dir or None
self.format_control = format_control
self.allowed_formats = allowed_formats
_valid_formats = {"source", "binary"}
assert self.allowed_formats.union(_valid_formats) == _valid_formats
def _get_cache_path_parts(self, link: Link) -> List[str]:
"""Get parts of part that must be os.path.joined with cache_dir"""
# We want to generate an url to use as our cache key, we don't want to
# just re-use the URL because it might have other items in the fragment
# and we don't care about those.
key_parts = {"url": link.url_without_fragment}
if link.hash_name is not None and link.hash is not None:
key_parts[link.hash_name] = link.hash
if link.subdirectory_fragment:
key_parts["subdirectory"] = link.subdirectory_fragment
# Include interpreter name, major and minor version in cache key
# to cope with ill-behaved sdists that build a different wheel
# depending on the python version their setup.py is being run on,
# and don't encode the difference in compatibility tags.
# https://github.com/pypa/pip/issues/7296
key_parts["interpreter_name"] = interpreter_name()
key_parts["interpreter_version"] = interpreter_version()
# Encode our key url with sha224, we'll use this because it has similar
# security properties to sha256, but with a shorter total output (and
# thus less secure). However the differences don't make a lot of
# difference for our use case here.
hashed = _hash_dict(key_parts)
# We want to nest the directories some to prevent having a ton of top
# level directories where we might run out of sub directories on some
# FS.
parts = [hashed[:2], hashed[2:4], hashed[4:6], hashed[6:]]
return parts
def _get_candidates(self, link: Link, canonical_package_name: str) -> List[Any]:
can_not_cache = not self.cache_dir or not canonical_package_name or not link
if can_not_cache:
return []
formats = self.format_control.get_allowed_formats(canonical_package_name)
if not self.allowed_formats.intersection(formats):
return []
candidates = []
path = self.get_path_for_link(link)
if os.path.isdir(path):
for candidate in os.listdir(path):
candidates.append((candidate, path))
return candidates
def get_path_for_link(self, link: Link) -> str:
"""Return a directory to store cached items in for link."""
raise NotImplementedError()
def get(
self,
link: Link,
package_name: Optional[str],
supported_tags: List[Tag],
) -> Link:
"""Returns a link to a cached item if it exists, otherwise returns the
passed link.
"""
raise NotImplementedError()
class SimpleWheelCache(Cache):
"""A cache of wheels for future installs."""
def __init__(self, cache_dir: str, format_control: FormatControl) -> None:
super().__init__(cache_dir, format_control, {"binary"})
def get_path_for_link(self, link: Link) -> str:
"""Return a directory to store cached wheels for link
Because there are M wheels for any one sdist, we provide a directory
to cache them in, and then consult that directory when looking up
cache hits.
We only insert things into the cache if they have plausible version
numbers, so that we don't contaminate the cache with things that were
not unique. E.g. ./package might have dozens of installs done for it
and build a version of 0.0...and if we built and cached a wheel, we'd
end up using the same wheel even if the source has been edited.
:param link: The link of the sdist for which this will cache wheels.
"""
parts = self._get_cache_path_parts(link)
assert self.cache_dir
# Store wheels within the root cache_dir
return os.path.join(self.cache_dir, "wheels", *parts)
def get(
self,
link: Link,
package_name: Optional[str],
supported_tags: List[Tag],
) -> Link:
candidates = []
if not package_name:
return link
canonical_package_name = canonicalize_name(package_name)
for wheel_name, wheel_dir in self._get_candidates(link, canonical_package_name):
try:
wheel = Wheel(wheel_name)
except InvalidWheelFilename:
continue
if canonicalize_name(wheel.name) != canonical_package_name:
logger.debug(
"Ignoring cached wheel %s for %s as it "
"does not match the expected distribution name %s.",
wheel_name,
link,
package_name,
)
continue
if not wheel.supported(supported_tags):
# Built for a different python/arch/etc
continue
candidates.append(
(
wheel.support_index_min(supported_tags),
wheel_name,
wheel_dir,
)
)
if not candidates:
return link
_, wheel_name, wheel_dir = min(candidates)
return Link(path_to_url(os.path.join(wheel_dir, wheel_name)))
class EphemWheelCache(SimpleWheelCache):
"""A SimpleWheelCache that creates it's own temporary cache directory"""
def __init__(self, format_control: FormatControl) -> None:
self._temp_dir = TempDirectory(
kind=tempdir_kinds.EPHEM_WHEEL_CACHE,
globally_managed=True,
)
super().__init__(self._temp_dir.path, format_control)
class CacheEntry:
def __init__(
self,
link: Link,
persistent: bool,
):
self.link = link
self.persistent = persistent
self.origin: Optional[DirectUrl] = None
origin_direct_url_path = Path(self.link.file_path).parent / ORIGIN_JSON_NAME
if origin_direct_url_path.exists():
self.origin = DirectUrl.from_json(origin_direct_url_path.read_text())
class WheelCache(Cache):
"""Wraps EphemWheelCache and SimpleWheelCache into a single Cache
This Cache allows for gracefully degradation, using the ephem wheel cache
when a certain link is not found in the simple wheel cache first.
"""
def __init__(
self, cache_dir: str, format_control: Optional[FormatControl] = None
) -> None:
if format_control is None:
format_control = FormatControl()
super().__init__(cache_dir, format_control, {"binary"})
self._wheel_cache = SimpleWheelCache(cache_dir, format_control)
self._ephem_cache = EphemWheelCache(format_control)
def get_path_for_link(self, link: Link) -> str:
return self._wheel_cache.get_path_for_link(link)
def get_ephem_path_for_link(self, link: Link) -> str:
return self._ephem_cache.get_path_for_link(link)
def get(
self,
link: Link,
package_name: Optional[str],
supported_tags: List[Tag],
) -> Link:
cache_entry = self.get_cache_entry(link, package_name, supported_tags)
if cache_entry is None:
return link
return cache_entry.link
def get_cache_entry(
self,
link: Link,
package_name: Optional[str],
supported_tags: List[Tag],
) -> Optional[CacheEntry]:
"""Returns a CacheEntry with a link to a cached item if it exists or
None. The cache entry indicates if the item was found in the persistent
or ephemeral cache.
"""
retval = self._wheel_cache.get(
link=link,
package_name=package_name,
supported_tags=supported_tags,
)
if retval is not link:
return CacheEntry(retval, persistent=True)
retval = self._ephem_cache.get(
link=link,
package_name=package_name,
supported_tags=supported_tags,
)
if retval is not link:
return CacheEntry(retval, persistent=False)
return None
@staticmethod
def record_download_origin(cache_dir: str, download_info: DirectUrl) -> None:
origin_path = Path(cache_dir) / ORIGIN_JSON_NAME
if origin_path.is_file():
origin = DirectUrl.from_json(origin_path.read_text())
# TODO: use DirectUrl.equivalent when https://github.com/pypa/pip/pull/10564
# is merged.
if origin.url != download_info.url:
logger.warning(
"Origin URL %s in cache entry %s does not match download URL %s. "
"This is likely a pip bug or a cache corruption issue.",
origin.url,
cache_dir,
download_info.url,
)
origin_path.write_text(download_info.to_json(), encoding="utf-8")

View File

@ -0,0 +1,4 @@
"""Subpackage containing all of pip's command line interface related code
"""
# This file intentionally does not import submodules

View File

@ -0,0 +1,171 @@
"""Logic that powers autocompletion installed by ``pip completion``.
"""
import optparse
import os
import sys
from itertools import chain
from typing import Any, Iterable, List, Optional
from pip._internal.cli.main_parser import create_main_parser
from pip._internal.commands import commands_dict, create_command
from pip._internal.metadata import get_default_environment
def autocomplete() -> None:
"""Entry Point for completion of main and subcommand options."""
# Don't complete if user hasn't sourced bash_completion file.
if "PIP_AUTO_COMPLETE" not in os.environ:
return
cwords = os.environ["COMP_WORDS"].split()[1:]
cword = int(os.environ["COMP_CWORD"])
try:
current = cwords[cword - 1]
except IndexError:
current = ""
parser = create_main_parser()
subcommands = list(commands_dict)
options = []
# subcommand
subcommand_name: Optional[str] = None
for word in cwords:
if word in subcommands:
subcommand_name = word
break
# subcommand options
if subcommand_name is not None:
# special case: 'help' subcommand has no options
if subcommand_name == "help":
sys.exit(1)
# special case: list locally installed dists for show and uninstall
should_list_installed = not current.startswith("-") and subcommand_name in [
"show",
"uninstall",
]
if should_list_installed:
env = get_default_environment()
lc = current.lower()
installed = [
dist.canonical_name
for dist in env.iter_installed_distributions(local_only=True)
if dist.canonical_name.startswith(lc)
and dist.canonical_name not in cwords[1:]
]
# if there are no dists installed, fall back to option completion
if installed:
for dist in installed:
print(dist)
sys.exit(1)
should_list_installables = (
not current.startswith("-") and subcommand_name == "install"
)
if should_list_installables:
for path in auto_complete_paths(current, "path"):
print(path)
sys.exit(1)
subcommand = create_command(subcommand_name)
for opt in subcommand.parser.option_list_all:
if opt.help != optparse.SUPPRESS_HELP:
for opt_str in opt._long_opts + opt._short_opts:
options.append((opt_str, opt.nargs))
# filter out previously specified options from available options
prev_opts = [x.split("=")[0] for x in cwords[1 : cword - 1]]
options = [(x, v) for (x, v) in options if x not in prev_opts]
# filter options by current input
options = [(k, v) for k, v in options if k.startswith(current)]
# get completion type given cwords and available subcommand options
completion_type = get_path_completion_type(
cwords,
cword,
subcommand.parser.option_list_all,
)
# get completion files and directories if ``completion_type`` is
# ``<file>``, ``<dir>`` or ``<path>``
if completion_type:
paths = auto_complete_paths(current, completion_type)
options = [(path, 0) for path in paths]
for option in options:
opt_label = option[0]
# append '=' to options which require args
if option[1] and option[0][:2] == "--":
opt_label += "="
print(opt_label)
else:
# show main parser options only when necessary
opts = [i.option_list for i in parser.option_groups]
opts.append(parser.option_list)
flattened_opts = chain.from_iterable(opts)
if current.startswith("-"):
for opt in flattened_opts:
if opt.help != optparse.SUPPRESS_HELP:
subcommands += opt._long_opts + opt._short_opts
else:
# get completion type given cwords and all available options
completion_type = get_path_completion_type(cwords, cword, flattened_opts)
if completion_type:
subcommands = list(auto_complete_paths(current, completion_type))
print(" ".join([x for x in subcommands if x.startswith(current)]))
sys.exit(1)
def get_path_completion_type(
cwords: List[str], cword: int, opts: Iterable[Any]
) -> Optional[str]:
"""Get the type of path completion (``file``, ``dir``, ``path`` or None)
:param cwords: same as the environmental variable ``COMP_WORDS``
:param cword: same as the environmental variable ``COMP_CWORD``
:param opts: The available options to check
:return: path completion type (``file``, ``dir``, ``path`` or None)
"""
if cword < 2 or not cwords[cword - 2].startswith("-"):
return None
for opt in opts:
if opt.help == optparse.SUPPRESS_HELP:
continue
for o in str(opt).split("/"):
if cwords[cword - 2].split("=")[0] == o:
if not opt.metavar or any(
x in ("path", "file", "dir") for x in opt.metavar.split("/")
):
return opt.metavar
return None
def auto_complete_paths(current: str, completion_type: str) -> Iterable[str]:
"""If ``completion_type`` is ``file`` or ``path``, list all regular files
and directories starting with ``current``; otherwise only list directories
starting with ``current``.
:param current: The word to be completed
:param completion_type: path completion type(``file``, ``path`` or ``dir``)
:return: A generator of regular files and/or directories
"""
directory, filename = os.path.split(current)
current_path = os.path.abspath(directory)
# Don't complete paths if they can't be accessed
if not os.access(current_path, os.R_OK):
return
filename = os.path.normcase(filename)
# list all files that start with ``filename``
file_list = (
x for x in os.listdir(current_path) if os.path.normcase(x).startswith(filename)
)
for f in file_list:
opt = os.path.join(current_path, f)
comp_file = os.path.normcase(os.path.join(directory, f))
# complete regular files when there is not ``<dir>`` after option
# complete directories when there is ``<file>``, ``<path>`` or
# ``<dir>``after option
if completion_type != "dir" and os.path.isfile(opt):
yield comp_file
elif os.path.isdir(opt):
yield os.path.join(comp_file, "")

View File

@ -0,0 +1,216 @@
"""Base Command class, and related routines"""
import functools
import logging
import logging.config
import optparse
import os
import sys
import traceback
from optparse import Values
from typing import Any, Callable, List, Optional, Tuple
from pip._vendor.rich import traceback as rich_traceback
from pip._internal.cli import cmdoptions
from pip._internal.cli.command_context import CommandContextMixIn
from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
from pip._internal.cli.status_codes import (
ERROR,
PREVIOUS_BUILD_DIR_ERROR,
UNKNOWN_ERROR,
VIRTUALENV_NOT_FOUND,
)
from pip._internal.exceptions import (
BadCommand,
CommandError,
DiagnosticPipError,
InstallationError,
NetworkConnectionError,
PreviousBuildDirError,
UninstallationError,
)
from pip._internal.utils.filesystem import check_path_owner
from pip._internal.utils.logging import BrokenStdoutLoggingError, setup_logging
from pip._internal.utils.misc import get_prog, normalize_path
from pip._internal.utils.temp_dir import TempDirectoryTypeRegistry as TempDirRegistry
from pip._internal.utils.temp_dir import global_tempdir_manager, tempdir_registry
from pip._internal.utils.virtualenv import running_under_virtualenv
__all__ = ["Command"]
logger = logging.getLogger(__name__)
class Command(CommandContextMixIn):
usage: str = ""
ignore_require_venv: bool = False
def __init__(self, name: str, summary: str, isolated: bool = False) -> None:
super().__init__()
self.name = name
self.summary = summary
self.parser = ConfigOptionParser(
usage=self.usage,
prog=f"{get_prog()} {name}",
formatter=UpdatingDefaultsHelpFormatter(),
add_help_option=False,
name=name,
description=self.__doc__,
isolated=isolated,
)
self.tempdir_registry: Optional[TempDirRegistry] = None
# Commands should add options to this option group
optgroup_name = f"{self.name.capitalize()} Options"
self.cmd_opts = optparse.OptionGroup(self.parser, optgroup_name)
# Add the general options
gen_opts = cmdoptions.make_option_group(
cmdoptions.general_group,
self.parser,
)
self.parser.add_option_group(gen_opts)
self.add_options()
def add_options(self) -> None:
pass
def handle_pip_version_check(self, options: Values) -> None:
"""
This is a no-op so that commands by default do not do the pip version
check.
"""
# Make sure we do the pip version check if the index_group options
# are present.
assert not hasattr(options, "no_index")
def run(self, options: Values, args: List[str]) -> int:
raise NotImplementedError
def parse_args(self, args: List[str]) -> Tuple[Values, List[str]]:
# factored out for testability
return self.parser.parse_args(args)
def main(self, args: List[str]) -> int:
try:
with self.main_context():
return self._main(args)
finally:
logging.shutdown()
def _main(self, args: List[str]) -> int:
# We must initialize this before the tempdir manager, otherwise the
# configuration would not be accessible by the time we clean up the
# tempdir manager.
self.tempdir_registry = self.enter_context(tempdir_registry())
# Intentionally set as early as possible so globally-managed temporary
# directories are available to the rest of the code.
self.enter_context(global_tempdir_manager())
options, args = self.parse_args(args)
# Set verbosity so that it can be used elsewhere.
self.verbosity = options.verbose - options.quiet
level_number = setup_logging(
verbosity=self.verbosity,
no_color=options.no_color,
user_log_file=options.log,
)
# TODO: Try to get these passing down from the command?
# without resorting to os.environ to hold these.
# This also affects isolated builds and it should.
if options.no_input:
os.environ["PIP_NO_INPUT"] = "1"
if options.exists_action:
os.environ["PIP_EXISTS_ACTION"] = " ".join(options.exists_action)
if options.require_venv and not self.ignore_require_venv:
# If a venv is required check if it can really be found
if not running_under_virtualenv():
logger.critical("Could not find an activated virtualenv (required).")
sys.exit(VIRTUALENV_NOT_FOUND)
if options.cache_dir:
options.cache_dir = normalize_path(options.cache_dir)
if not check_path_owner(options.cache_dir):
logger.warning(
"The directory '%s' or its parent directory is not owned "
"or is not writable by the current user. The cache "
"has been disabled. Check the permissions and owner of "
"that directory. If executing pip with sudo, you should "
"use sudo's -H flag.",
options.cache_dir,
)
options.cache_dir = None
def intercepts_unhandled_exc(
run_func: Callable[..., int]
) -> Callable[..., int]:
@functools.wraps(run_func)
def exc_logging_wrapper(*args: Any) -> int:
try:
status = run_func(*args)
assert isinstance(status, int)
return status
except DiagnosticPipError as exc:
logger.error("[present-rich] %s", exc)
logger.debug("Exception information:", exc_info=True)
return ERROR
except PreviousBuildDirError as exc:
logger.critical(str(exc))
logger.debug("Exception information:", exc_info=True)
return PREVIOUS_BUILD_DIR_ERROR
except (
InstallationError,
UninstallationError,
BadCommand,
NetworkConnectionError,
) as exc:
logger.critical(str(exc))
logger.debug("Exception information:", exc_info=True)
return ERROR
except CommandError as exc:
logger.critical("%s", exc)
logger.debug("Exception information:", exc_info=True)
return ERROR
except BrokenStdoutLoggingError:
# Bypass our logger and write any remaining messages to
# stderr because stdout no longer works.
print("ERROR: Pipe to stdout was broken", file=sys.stderr)
if level_number <= logging.DEBUG:
traceback.print_exc(file=sys.stderr)
return ERROR
except KeyboardInterrupt:
logger.critical("Operation cancelled by user")
logger.debug("Exception information:", exc_info=True)
return ERROR
except BaseException:
logger.critical("Exception:", exc_info=True)
return UNKNOWN_ERROR
return exc_logging_wrapper
try:
if not options.debug_mode:
run = intercepts_unhandled_exc(self.run)
else:
run = self.run
rich_traceback.install(show_locals=True)
return run(options, args)
finally:
self.handle_pip_version_check(options)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
from contextlib import ExitStack, contextmanager
from typing import ContextManager, Generator, TypeVar
_T = TypeVar("_T", covariant=True)
class CommandContextMixIn:
def __init__(self) -> None:
super().__init__()
self._in_main_context = False
self._main_context = ExitStack()
@contextmanager
def main_context(self) -> Generator[None, None, None]:
assert not self._in_main_context
self._in_main_context = True
try:
with self._main_context:
yield
finally:
self._in_main_context = False
def enter_context(self, context_provider: ContextManager[_T]) -> _T:
assert self._in_main_context
return self._main_context.enter_context(context_provider)

View File

@ -0,0 +1,70 @@
"""Primary application entrypoint.
"""
import locale
import logging
import os
import sys
from typing import List, Optional
from pip._internal.cli.autocompletion import autocomplete
from pip._internal.cli.main_parser import parse_command
from pip._internal.commands import create_command
from pip._internal.exceptions import PipError
from pip._internal.utils import deprecation
logger = logging.getLogger(__name__)
# Do not import and use main() directly! Using it directly is actively
# discouraged by pip's maintainers. The name, location and behavior of
# this function is subject to change, so calling it directly is not
# portable across different pip versions.
# In addition, running pip in-process is unsupported and unsafe. This is
# elaborated in detail at
# https://pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program.
# That document also provides suggestions that should work for nearly
# all users that are considering importing and using main() directly.
# However, we know that certain users will still want to invoke pip
# in-process. If you understand and accept the implications of using pip
# in an unsupported manner, the best approach is to use runpy to avoid
# depending on the exact location of this entry point.
# The following example shows how to use runpy to invoke pip in that
# case:
#
# sys.argv = ["pip", your, args, here]
# runpy.run_module("pip", run_name="__main__")
#
# Note that this will exit the process after running, unlike a direct
# call to main. As it is not safe to do any processing after calling
# main, this should not be an issue in practice.
def main(args: Optional[List[str]] = None) -> int:
if args is None:
args = sys.argv[1:]
# Configure our deprecation warnings to be sent through loggers
deprecation.install_warning_logger()
autocomplete()
try:
cmd_name, cmd_args = parse_command(args)
except PipError as exc:
sys.stderr.write(f"ERROR: {exc}")
sys.stderr.write(os.linesep)
sys.exit(1)
# Needed for locale.getpreferredencoding(False) to work
# in pip._internal.utils.encoding.auto_decode
try:
locale.setlocale(locale.LC_ALL, "")
except locale.Error as e:
# setlocale can apparently crash if locale are uninitialized
logger.debug("Ignoring error %s when setting locale", e)
command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
return command.main(cmd_args)

View File

@ -0,0 +1,134 @@
"""A single place for constructing and exposing the main parser
"""
import os
import subprocess
import sys
from typing import List, Optional, Tuple
from pip._internal.build_env import get_runnable_pip
from pip._internal.cli import cmdoptions
from pip._internal.cli.parser import ConfigOptionParser, UpdatingDefaultsHelpFormatter
from pip._internal.commands import commands_dict, get_similar_commands
from pip._internal.exceptions import CommandError
from pip._internal.utils.misc import get_pip_version, get_prog
__all__ = ["create_main_parser", "parse_command"]
def create_main_parser() -> ConfigOptionParser:
"""Creates and returns the main parser for pip's CLI"""
parser = ConfigOptionParser(
usage="\n%prog <command> [options]",
add_help_option=False,
formatter=UpdatingDefaultsHelpFormatter(),
name="global",
prog=get_prog(),
)
parser.disable_interspersed_args()
parser.version = get_pip_version()
# add the general options
gen_opts = cmdoptions.make_option_group(cmdoptions.general_group, parser)
parser.add_option_group(gen_opts)
# so the help formatter knows
parser.main = True # type: ignore
# create command listing for description
description = [""] + [
f"{name:27} {command_info.summary}"
for name, command_info in commands_dict.items()
]
parser.description = "\n".join(description)
return parser
def identify_python_interpreter(python: str) -> Optional[str]:
# If the named file exists, use it.
# If it's a directory, assume it's a virtual environment and
# look for the environment's Python executable.
if os.path.exists(python):
if os.path.isdir(python):
# bin/python for Unix, Scripts/python.exe for Windows
# Try both in case of odd cases like cygwin.
for exe in ("bin/python", "Scripts/python.exe"):
py = os.path.join(python, exe)
if os.path.exists(py):
return py
else:
return python
# Could not find the interpreter specified
return None
def parse_command(args: List[str]) -> Tuple[str, List[str]]:
parser = create_main_parser()
# Note: parser calls disable_interspersed_args(), so the result of this
# call is to split the initial args into the general options before the
# subcommand and everything else.
# For example:
# args: ['--timeout=5', 'install', '--user', 'INITools']
# general_options: ['--timeout==5']
# args_else: ['install', '--user', 'INITools']
general_options, args_else = parser.parse_args(args)
# --python
if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
# Re-invoke pip using the specified Python interpreter
interpreter = identify_python_interpreter(general_options.python)
if interpreter is None:
raise CommandError(
f"Could not locate Python interpreter {general_options.python}"
)
pip_cmd = [
interpreter,
get_runnable_pip(),
]
pip_cmd.extend(args)
# Set a flag so the child doesn't re-invoke itself, causing
# an infinite loop.
os.environ["_PIP_RUNNING_IN_SUBPROCESS"] = "1"
returncode = 0
try:
proc = subprocess.run(pip_cmd)
returncode = proc.returncode
except (subprocess.SubprocessError, OSError) as exc:
raise CommandError(f"Failed to run pip under {interpreter}: {exc}")
sys.exit(returncode)
# --version
if general_options.version:
sys.stdout.write(parser.version)
sys.stdout.write(os.linesep)
sys.exit()
# pip || pip help -> print_help()
if not args_else or (args_else[0] == "help" and len(args_else) == 1):
parser.print_help()
sys.exit()
# the subcommand name
cmd_name = args_else[0]
if cmd_name not in commands_dict:
guess = get_similar_commands(cmd_name)
msg = [f'unknown command "{cmd_name}"']
if guess:
msg.append(f'maybe you meant "{guess}"')
raise CommandError(" - ".join(msg))
# all the args without the subcommand
cmd_args = args[:]
cmd_args.remove(cmd_name)
return cmd_name, cmd_args

View File

@ -0,0 +1,294 @@
"""Base option parser setup"""
import logging
import optparse
import shutil
import sys
import textwrap
from contextlib import suppress
from typing import Any, Dict, Generator, List, Tuple
from pip._internal.cli.status_codes import UNKNOWN_ERROR
from pip._internal.configuration import Configuration, ConfigurationError
from pip._internal.utils.misc import redact_auth_from_url, strtobool
logger = logging.getLogger(__name__)
class PrettyHelpFormatter(optparse.IndentedHelpFormatter):
"""A prettier/less verbose help formatter for optparse."""
def __init__(self, *args: Any, **kwargs: Any) -> None:
# help position must be aligned with __init__.parseopts.description
kwargs["max_help_position"] = 30
kwargs["indent_increment"] = 1
kwargs["width"] = shutil.get_terminal_size()[0] - 2
super().__init__(*args, **kwargs)
def format_option_strings(self, option: optparse.Option) -> str:
return self._format_option_strings(option)
def _format_option_strings(
self, option: optparse.Option, mvarfmt: str = " <{}>", optsep: str = ", "
) -> str:
"""
Return a comma-separated list of option strings and metavars.
:param option: tuple of (short opt, long opt), e.g: ('-f', '--format')
:param mvarfmt: metavar format string
:param optsep: separator
"""
opts = []
if option._short_opts:
opts.append(option._short_opts[0])
if option._long_opts:
opts.append(option._long_opts[0])
if len(opts) > 1:
opts.insert(1, optsep)
if option.takes_value():
assert option.dest is not None
metavar = option.metavar or option.dest.lower()
opts.append(mvarfmt.format(metavar.lower()))
return "".join(opts)
def format_heading(self, heading: str) -> str:
if heading == "Options":
return ""
return heading + ":\n"
def format_usage(self, usage: str) -> str:
"""
Ensure there is only one newline between usage and the first heading
if there is no description.
"""
msg = "\nUsage: {}\n".format(self.indent_lines(textwrap.dedent(usage), " "))
return msg
def format_description(self, description: str) -> str:
# leave full control over description to us
if description:
if hasattr(self.parser, "main"):
label = "Commands"
else:
label = "Description"
# some doc strings have initial newlines, some don't
description = description.lstrip("\n")
# some doc strings have final newlines and spaces, some don't
description = description.rstrip()
# dedent, then reindent
description = self.indent_lines(textwrap.dedent(description), " ")
description = f"{label}:\n{description}\n"
return description
else:
return ""
def format_epilog(self, epilog: str) -> str:
# leave full control over epilog to us
if epilog:
return epilog
else:
return ""
def indent_lines(self, text: str, indent: str) -> str:
new_lines = [indent + line for line in text.split("\n")]
return "\n".join(new_lines)
class UpdatingDefaultsHelpFormatter(PrettyHelpFormatter):
"""Custom help formatter for use in ConfigOptionParser.
This is updates the defaults before expanding them, allowing
them to show up correctly in the help listing.
Also redact auth from url type options
"""
def expand_default(self, option: optparse.Option) -> str:
default_values = None
if self.parser is not None:
assert isinstance(self.parser, ConfigOptionParser)
self.parser._update_defaults(self.parser.defaults)
assert option.dest is not None
default_values = self.parser.defaults.get(option.dest)
help_text = super().expand_default(option)
if default_values and option.metavar == "URL":
if isinstance(default_values, str):
default_values = [default_values]
# If its not a list, we should abort and just return the help text
if not isinstance(default_values, list):
default_values = []
for val in default_values:
help_text = help_text.replace(val, redact_auth_from_url(val))
return help_text
class CustomOptionParser(optparse.OptionParser):
def insert_option_group(
self, idx: int, *args: Any, **kwargs: Any
) -> optparse.OptionGroup:
"""Insert an OptionGroup at a given position."""
group = self.add_option_group(*args, **kwargs)
self.option_groups.pop()
self.option_groups.insert(idx, group)
return group
@property
def option_list_all(self) -> List[optparse.Option]:
"""Get a list of all options, including those in option groups."""
res = self.option_list[:]
for i in self.option_groups:
res.extend(i.option_list)
return res
class ConfigOptionParser(CustomOptionParser):
"""Custom option parser which updates its defaults by checking the
configuration files and environmental variables"""
def __init__(
self,
*args: Any,
name: str,
isolated: bool = False,
**kwargs: Any,
) -> None:
self.name = name
self.config = Configuration(isolated)
assert self.name
super().__init__(*args, **kwargs)
def check_default(self, option: optparse.Option, key: str, val: Any) -> Any:
try:
return option.check_value(key, val)
except optparse.OptionValueError as exc:
print(f"An error occurred during configuration: {exc}")
sys.exit(3)
def _get_ordered_configuration_items(
self,
) -> Generator[Tuple[str, Any], None, None]:
# Configuration gives keys in an unordered manner. Order them.
override_order = ["global", self.name, ":env:"]
# Pool the options into different groups
section_items: Dict[str, List[Tuple[str, Any]]] = {
name: [] for name in override_order
}
for section_key, val in self.config.items():
# ignore empty values
if not val:
logger.debug(
"Ignoring configuration key '%s' as it's value is empty.",
section_key,
)
continue
section, key = section_key.split(".", 1)
if section in override_order:
section_items[section].append((key, val))
# Yield each group in their override order
for section in override_order:
for key, val in section_items[section]:
yield key, val
def _update_defaults(self, defaults: Dict[str, Any]) -> Dict[str, Any]:
"""Updates the given defaults with values from the config files and
the environ. Does a little special handling for certain types of
options (lists)."""
# Accumulate complex default state.
self.values = optparse.Values(self.defaults)
late_eval = set()
# Then set the options with those values
for key, val in self._get_ordered_configuration_items():
# '--' because configuration supports only long names
option = self.get_option("--" + key)
# Ignore options not present in this parser. E.g. non-globals put
# in [global] by users that want them to apply to all applicable
# commands.
if option is None:
continue
assert option.dest is not None
if option.action in ("store_true", "store_false"):
try:
val = strtobool(val)
except ValueError:
self.error(
"{} is not a valid value for {} option, " # noqa
"please specify a boolean value like yes/no, "
"true/false or 1/0 instead.".format(val, key)
)
elif option.action == "count":
with suppress(ValueError):
val = strtobool(val)
with suppress(ValueError):
val = int(val)
if not isinstance(val, int) or val < 0:
self.error(
"{} is not a valid value for {} option, " # noqa
"please instead specify either a non-negative integer "
"or a boolean value like yes/no or false/true "
"which is equivalent to 1/0.".format(val, key)
)
elif option.action == "append":
val = val.split()
val = [self.check_default(option, key, v) for v in val]
elif option.action == "callback":
assert option.callback is not None
late_eval.add(option.dest)
opt_str = option.get_opt_string()
val = option.convert_value(opt_str, val)
# From take_action
args = option.callback_args or ()
kwargs = option.callback_kwargs or {}
option.callback(option, opt_str, val, self, *args, **kwargs)
else:
val = self.check_default(option, key, val)
defaults[option.dest] = val
for key in late_eval:
defaults[key] = getattr(self.values, key)
self.values = None
return defaults
def get_default_values(self) -> optparse.Values:
"""Overriding to make updating the defaults after instantiation of
the option parser possible, _update_defaults() does the dirty work."""
if not self.process_default_values:
# Old, pre-Optik 1.5 behaviour.
return optparse.Values(self.defaults)
# Load the configuration, or error out in case of an error
try:
self.config.load()
except ConfigurationError as err:
self.exit(UNKNOWN_ERROR, str(err))
defaults = self._update_defaults(self.defaults.copy()) # ours
for option in self._get_all_options():
assert option.dest is not None
default = defaults.get(option.dest)
if isinstance(default, str):
opt_str = option.get_opt_string()
defaults[option.dest] = option.check_value(opt_str, default)
return optparse.Values(defaults)
def error(self, msg: str) -> None:
self.print_usage(sys.stderr)
self.exit(UNKNOWN_ERROR, f"{msg}\n")

View File

@ -0,0 +1,68 @@
import functools
from typing import Callable, Generator, Iterable, Iterator, Optional, Tuple
from pip._vendor.rich.progress import (
BarColumn,
DownloadColumn,
FileSizeColumn,
Progress,
ProgressColumn,
SpinnerColumn,
TextColumn,
TimeElapsedColumn,
TimeRemainingColumn,
TransferSpeedColumn,
)
from pip._internal.utils.logging import get_indentation
DownloadProgressRenderer = Callable[[Iterable[bytes]], Iterator[bytes]]
def _rich_progress_bar(
iterable: Iterable[bytes],
*,
bar_type: str,
size: int,
) -> Generator[bytes, None, None]:
assert bar_type == "on", "This should only be used in the default mode."
if not size:
total = float("inf")
columns: Tuple[ProgressColumn, ...] = (
TextColumn("[progress.description]{task.description}"),
SpinnerColumn("line", speed=1.5),
FileSizeColumn(),
TransferSpeedColumn(),
TimeElapsedColumn(),
)
else:
total = size
columns = (
TextColumn("[progress.description]{task.description}"),
BarColumn(),
DownloadColumn(),
TransferSpeedColumn(),
TextColumn("eta"),
TimeRemainingColumn(),
)
progress = Progress(*columns, refresh_per_second=30)
task_id = progress.add_task(" " * (get_indentation() + 2), total=total)
with progress:
for chunk in iterable:
yield chunk
progress.update(task_id, advance=len(chunk))
def get_download_progress_renderer(
*, bar_type: str, size: Optional[int] = None
) -> DownloadProgressRenderer:
"""Get an object that can be used to render the download progress.
Returns a callable, that takes an iterable to "wrap".
"""
if bar_type == "on":
return functools.partial(_rich_progress_bar, bar_type=bar_type, size=size)
else:
return iter # no-op, when passed an iterator

View File

@ -0,0 +1,502 @@
"""Contains the Command base classes that depend on PipSession.
The classes in this module are in a separate module so the commands not
needing download / PackageFinder capability don't unnecessarily import the
PackageFinder machinery and all its vendored dependencies, etc.
"""
import logging
import os
import sys
from functools import partial
from optparse import Values
from typing import TYPE_CHECKING, Any, List, Optional, Tuple
from pip._internal.cache import WheelCache
from pip._internal.cli import cmdoptions
from pip._internal.cli.base_command import Command
from pip._internal.cli.command_context import CommandContextMixIn
from pip._internal.exceptions import CommandError, PreviousBuildDirError
from pip._internal.index.collector import LinkCollector
from pip._internal.index.package_finder import PackageFinder
from pip._internal.models.selection_prefs import SelectionPreferences
from pip._internal.models.target_python import TargetPython
from pip._internal.network.session import PipSession
from pip._internal.operations.build.build_tracker import BuildTracker
from pip._internal.operations.prepare import RequirementPreparer
from pip._internal.req.constructors import (
install_req_from_editable,
install_req_from_line,
install_req_from_parsed_requirement,
install_req_from_req_string,
)
from pip._internal.req.req_file import parse_requirements
from pip._internal.req.req_install import InstallRequirement
from pip._internal.resolution.base import BaseResolver
from pip._internal.self_outdated_check import pip_self_version_check
from pip._internal.utils.temp_dir import (
TempDirectory,
TempDirectoryTypeRegistry,
tempdir_kinds,
)
from pip._internal.utils.virtualenv import running_under_virtualenv
if TYPE_CHECKING:
from ssl import SSLContext
logger = logging.getLogger(__name__)
def _create_truststore_ssl_context() -> Optional["SSLContext"]:
if sys.version_info < (3, 10):
raise CommandError("The truststore feature is only available for Python 3.10+")
try:
import ssl
except ImportError:
logger.warning("Disabling truststore since ssl support is missing")
return None
try:
import truststore
except ImportError:
raise CommandError(
"To use the truststore feature, 'truststore' must be installed into "
"pip's current environment."
)
return truststore.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
class SessionCommandMixin(CommandContextMixIn):
"""
A class mixin for command classes needing _build_session().
"""
def __init__(self) -> None:
super().__init__()
self._session: Optional[PipSession] = None
@classmethod
def _get_index_urls(cls, options: Values) -> Optional[List[str]]:
"""Return a list of index urls from user-provided options."""
index_urls = []
if not getattr(options, "no_index", False):
url = getattr(options, "index_url", None)
if url:
index_urls.append(url)
urls = getattr(options, "extra_index_urls", None)
if urls:
index_urls.extend(urls)
# Return None rather than an empty list
return index_urls or None
def get_default_session(self, options: Values) -> PipSession:
"""Get a default-managed session."""
if self._session is None:
self._session = self.enter_context(self._build_session(options))
# there's no type annotation on requests.Session, so it's
# automatically ContextManager[Any] and self._session becomes Any,
# then https://github.com/python/mypy/issues/7696 kicks in
assert self._session is not None
return self._session
def _build_session(
self,
options: Values,
retries: Optional[int] = None,
timeout: Optional[int] = None,
fallback_to_certifi: bool = False,
) -> PipSession:
cache_dir = options.cache_dir
assert not cache_dir or os.path.isabs(cache_dir)
if "truststore" in options.features_enabled:
try:
ssl_context = _create_truststore_ssl_context()
except Exception:
if not fallback_to_certifi:
raise
ssl_context = None
else:
ssl_context = None
session = PipSession(
cache=os.path.join(cache_dir, "http") if cache_dir else None,
retries=retries if retries is not None else options.retries,
trusted_hosts=options.trusted_hosts,
index_urls=self._get_index_urls(options),
ssl_context=ssl_context,
)
# Handle custom ca-bundles from the user
if options.cert:
session.verify = options.cert
# Handle SSL client certificate
if options.client_cert:
session.cert = options.client_cert
# Handle timeouts
if options.timeout or timeout:
session.timeout = timeout if timeout is not None else options.timeout
# Handle configured proxies
if options.proxy:
session.proxies = {
"http": options.proxy,
"https": options.proxy,
}
# Determine if we can prompt the user for authentication or not
session.auth.prompting = not options.no_input
return session
class IndexGroupCommand(Command, SessionCommandMixin):
"""
Abstract base class for commands with the index_group options.
This also corresponds to the commands that permit the pip version check.
"""
def handle_pip_version_check(self, options: Values) -> None:
"""
Do the pip version check if not disabled.
This overrides the default behavior of not doing the check.
"""
# Make sure the index_group options are present.
assert hasattr(options, "no_index")
if options.disable_pip_version_check or options.no_index:
return
# Otherwise, check if we're using the latest version of pip available.
session = self._build_session(
options,
retries=0,
timeout=min(5, options.timeout),
# This is set to ensure the function does not fail when truststore is
# specified in use-feature but cannot be loaded. This usually raises a
# CommandError and shows a nice user-facing error, but this function is not
# called in that try-except block.
fallback_to_certifi=True,
)
with session:
pip_self_version_check(session, options)
KEEPABLE_TEMPDIR_TYPES = [
tempdir_kinds.BUILD_ENV,
tempdir_kinds.EPHEM_WHEEL_CACHE,
tempdir_kinds.REQ_BUILD,
]
def warn_if_run_as_root() -> None:
"""Output a warning for sudo users on Unix.
In a virtual environment, sudo pip still writes to virtualenv.
On Windows, users may run pip as Administrator without issues.
This warning only applies to Unix root users outside of virtualenv.
"""
if running_under_virtualenv():
return
if not hasattr(os, "getuid"):
return
# On Windows, there are no "system managed" Python packages. Installing as
# Administrator via pip is the correct way of updating system environments.
#
# We choose sys.platform over utils.compat.WINDOWS here to enable Mypy platform
# checks: https://mypy.readthedocs.io/en/stable/common_issues.html
if sys.platform == "win32" or sys.platform == "cygwin":
return
if os.getuid() != 0:
return
logger.warning(
"Running pip as the 'root' user can result in broken permissions and "
"conflicting behaviour with the system package manager. "
"It is recommended to use a virtual environment instead: "
"https://pip.pypa.io/warnings/venv"
)
def with_cleanup(func: Any) -> Any:
"""Decorator for common logic related to managing temporary
directories.
"""
def configure_tempdir_registry(registry: TempDirectoryTypeRegistry) -> None:
for t in KEEPABLE_TEMPDIR_TYPES:
registry.set_delete(t, False)
def wrapper(
self: RequirementCommand, options: Values, args: List[Any]
) -> Optional[int]:
assert self.tempdir_registry is not None
if options.no_clean:
configure_tempdir_registry(self.tempdir_registry)
try:
return func(self, options, args)
except PreviousBuildDirError:
# This kind of conflict can occur when the user passes an explicit
# build directory with a pre-existing folder. In that case we do
# not want to accidentally remove it.
configure_tempdir_registry(self.tempdir_registry)
raise
return wrapper
class RequirementCommand(IndexGroupCommand):
def __init__(self, *args: Any, **kw: Any) -> None:
super().__init__(*args, **kw)
self.cmd_opts.add_option(cmdoptions.no_clean())
@staticmethod
def determine_resolver_variant(options: Values) -> str:
"""Determines which resolver should be used, based on the given options."""
if "legacy-resolver" in options.deprecated_features_enabled:
return "legacy"
return "2020-resolver"
@classmethod
def make_requirement_preparer(
cls,
temp_build_dir: TempDirectory,
options: Values,
build_tracker: BuildTracker,
session: PipSession,
finder: PackageFinder,
use_user_site: bool,
download_dir: Optional[str] = None,
verbosity: int = 0,
) -> RequirementPreparer:
"""
Create a RequirementPreparer instance for the given parameters.
"""
temp_build_dir_path = temp_build_dir.path
assert temp_build_dir_path is not None
resolver_variant = cls.determine_resolver_variant(options)
if resolver_variant == "2020-resolver":
lazy_wheel = "fast-deps" in options.features_enabled
if lazy_wheel:
logger.warning(
"pip is using lazily downloaded wheels using HTTP "
"range requests to obtain dependency information. "
"This experimental feature is enabled through "
"--use-feature=fast-deps and it is not ready for "
"production."
)
else:
lazy_wheel = False
if "fast-deps" in options.features_enabled:
logger.warning(
"fast-deps has no effect when used with the legacy resolver."
)
return RequirementPreparer(
build_dir=temp_build_dir_path,
src_dir=options.src_dir,
download_dir=download_dir,
build_isolation=options.build_isolation,
check_build_deps=options.check_build_deps,
build_tracker=build_tracker,
session=session,
progress_bar=options.progress_bar,
finder=finder,
require_hashes=options.require_hashes,
use_user_site=use_user_site,
lazy_wheel=lazy_wheel,
verbosity=verbosity,
)
@classmethod
def make_resolver(
cls,
preparer: RequirementPreparer,
finder: PackageFinder,
options: Values,
wheel_cache: Optional[WheelCache] = None,
use_user_site: bool = False,
ignore_installed: bool = True,
ignore_requires_python: bool = False,
force_reinstall: bool = False,
upgrade_strategy: str = "to-satisfy-only",
use_pep517: Optional[bool] = None,
py_version_info: Optional[Tuple[int, ...]] = None,
) -> BaseResolver:
"""
Create a Resolver instance for the given parameters.
"""
make_install_req = partial(
install_req_from_req_string,
isolated=options.isolated_mode,
use_pep517=use_pep517,
config_settings=getattr(options, "config_settings", None),
)
resolver_variant = cls.determine_resolver_variant(options)
# The long import name and duplicated invocation is needed to convince
# Mypy into correctly typechecking. Otherwise it would complain the
# "Resolver" class being redefined.
if resolver_variant == "2020-resolver":
import pip._internal.resolution.resolvelib.resolver
return pip._internal.resolution.resolvelib.resolver.Resolver(
preparer=preparer,
finder=finder,
wheel_cache=wheel_cache,
make_install_req=make_install_req,
use_user_site=use_user_site,
ignore_dependencies=options.ignore_dependencies,
ignore_installed=ignore_installed,
ignore_requires_python=ignore_requires_python,
force_reinstall=force_reinstall,
upgrade_strategy=upgrade_strategy,
py_version_info=py_version_info,
)
import pip._internal.resolution.legacy.resolver
return pip._internal.resolution.legacy.resolver.Resolver(
preparer=preparer,
finder=finder,
wheel_cache=wheel_cache,
make_install_req=make_install_req,
use_user_site=use_user_site,
ignore_dependencies=options.ignore_dependencies,
ignore_installed=ignore_installed,
ignore_requires_python=ignore_requires_python,
force_reinstall=force_reinstall,
upgrade_strategy=upgrade_strategy,
py_version_info=py_version_info,
)
def get_requirements(
self,
args: List[str],
options: Values,
finder: PackageFinder,
session: PipSession,
) -> List[InstallRequirement]:
"""
Parse command-line arguments into the corresponding requirements.
"""
requirements: List[InstallRequirement] = []
for filename in options.constraints:
for parsed_req in parse_requirements(
filename,
constraint=True,
finder=finder,
options=options,
session=session,
):
req_to_add = install_req_from_parsed_requirement(
parsed_req,
isolated=options.isolated_mode,
user_supplied=False,
)
requirements.append(req_to_add)
for req in args:
req_to_add = install_req_from_line(
req,
None,
isolated=options.isolated_mode,
use_pep517=options.use_pep517,
user_supplied=True,
config_settings=getattr(options, "config_settings", None),
)
requirements.append(req_to_add)
for req in options.editables:
req_to_add = install_req_from_editable(
req,
user_supplied=True,
isolated=options.isolated_mode,
use_pep517=options.use_pep517,
config_settings=getattr(options, "config_settings", None),
)
requirements.append(req_to_add)
# NOTE: options.require_hashes may be set if --require-hashes is True
for filename in options.requirements:
for parsed_req in parse_requirements(
filename, finder=finder, options=options, session=session
):
req_to_add = install_req_from_parsed_requirement(
parsed_req,
isolated=options.isolated_mode,
use_pep517=options.use_pep517,
user_supplied=True,
)
requirements.append(req_to_add)
# If any requirement has hash options, enable hash checking.
if any(req.has_hash_options for req in requirements):
options.require_hashes = True
if not (args or options.editables or options.requirements):
opts = {"name": self.name}
if options.find_links:
raise CommandError(
"You must give at least one requirement to {name} "
'(maybe you meant "pip {name} {links}"?)'.format(
**dict(opts, links=" ".join(options.find_links))
)
)
else:
raise CommandError(
"You must give at least one requirement to {name} "
'(see "pip help {name}")'.format(**opts)
)
return requirements
@staticmethod
def trace_basic_info(finder: PackageFinder) -> None:
"""
Trace basic information about the provided objects.
"""
# Display where finder is looking for packages
search_scope = finder.search_scope
locations = search_scope.get_formatted_locations()
if locations:
logger.info(locations)
def _build_package_finder(
self,
options: Values,
session: PipSession,
target_python: Optional[TargetPython] = None,
ignore_requires_python: Optional[bool] = None,
) -> PackageFinder:
"""
Create a package finder appropriate to this requirement command.
:param ignore_requires_python: Whether to ignore incompatible
"Requires-Python" values in links. Defaults to False.
"""
link_collector = LinkCollector.create(session, options=options)
selection_prefs = SelectionPreferences(
allow_yanked=True,
format_control=options.format_control,
allow_all_prereleases=options.pre,
prefer_binary=options.prefer_binary,
ignore_requires_python=ignore_requires_python,
)
return PackageFinder.create(
link_collector=link_collector,
selection_prefs=selection_prefs,
target_python=target_python,
)

View File

@ -0,0 +1,159 @@
import contextlib
import itertools
import logging
import sys
import time
from typing import IO, Generator, Optional
from pip._internal.utils.compat import WINDOWS
from pip._internal.utils.logging import get_indentation
logger = logging.getLogger(__name__)
class SpinnerInterface:
def spin(self) -> None:
raise NotImplementedError()
def finish(self, final_status: str) -> None:
raise NotImplementedError()
class InteractiveSpinner(SpinnerInterface):
def __init__(
self,
message: str,
file: Optional[IO[str]] = None,
spin_chars: str = "-\\|/",
# Empirically, 8 updates/second looks nice
min_update_interval_seconds: float = 0.125,
):
self._message = message
if file is None:
file = sys.stdout
self._file = file
self._rate_limiter = RateLimiter(min_update_interval_seconds)
self._finished = False
self._spin_cycle = itertools.cycle(spin_chars)
self._file.write(" " * get_indentation() + self._message + " ... ")
self._width = 0
def _write(self, status: str) -> None:
assert not self._finished
# Erase what we wrote before by backspacing to the beginning, writing
# spaces to overwrite the old text, and then backspacing again
backup = "\b" * self._width
self._file.write(backup + " " * self._width + backup)
# Now we have a blank slate to add our status
self._file.write(status)
self._width = len(status)
self._file.flush()
self._rate_limiter.reset()
def spin(self) -> None:
if self._finished:
return
if not self._rate_limiter.ready():
return
self._write(next(self._spin_cycle))
def finish(self, final_status: str) -> None:
if self._finished:
return
self._write(final_status)
self._file.write("\n")
self._file.flush()
self._finished = True
# Used for dumb terminals, non-interactive installs (no tty), etc.
# We still print updates occasionally (once every 60 seconds by default) to
# act as a keep-alive for systems like Travis-CI that take lack-of-output as
# an indication that a task has frozen.
class NonInteractiveSpinner(SpinnerInterface):
def __init__(self, message: str, min_update_interval_seconds: float = 60.0) -> None:
self._message = message
self._finished = False
self._rate_limiter = RateLimiter(min_update_interval_seconds)
self._update("started")
def _update(self, status: str) -> None:
assert not self._finished
self._rate_limiter.reset()
logger.info("%s: %s", self._message, status)
def spin(self) -> None:
if self._finished:
return
if not self._rate_limiter.ready():
return
self._update("still running...")
def finish(self, final_status: str) -> None:
if self._finished:
return
self._update(f"finished with status '{final_status}'")
self._finished = True
class RateLimiter:
def __init__(self, min_update_interval_seconds: float) -> None:
self._min_update_interval_seconds = min_update_interval_seconds
self._last_update: float = 0
def ready(self) -> bool:
now = time.time()
delta = now - self._last_update
return delta >= self._min_update_interval_seconds
def reset(self) -> None:
self._last_update = time.time()
@contextlib.contextmanager
def open_spinner(message: str) -> Generator[SpinnerInterface, None, None]:
# Interactive spinner goes directly to sys.stdout rather than being routed
# through the logging system, but it acts like it has level INFO,
# i.e. it's only displayed if we're at level INFO or better.
# Non-interactive spinner goes through the logging system, so it is always
# in sync with logging configuration.
if sys.stdout.isatty() and logger.getEffectiveLevel() <= logging.INFO:
spinner: SpinnerInterface = InteractiveSpinner(message)
else:
spinner = NonInteractiveSpinner(message)
try:
with hidden_cursor(sys.stdout):
yield spinner
except KeyboardInterrupt:
spinner.finish("canceled")
raise
except Exception:
spinner.finish("error")
raise
else:
spinner.finish("done")
HIDE_CURSOR = "\x1b[?25l"
SHOW_CURSOR = "\x1b[?25h"
@contextlib.contextmanager
def hidden_cursor(file: IO[str]) -> Generator[None, None, None]:
# The Windows terminal does not support the hide/show cursor ANSI codes,
# even via colorama. So don't even try.
if WINDOWS:
yield
# We don't want to clutter the output with control characters if we're
# writing to a file, or if the user is running with --quiet.
# See https://github.com/pypa/pip/issues/3418
elif not file.isatty() or logger.getEffectiveLevel() > logging.INFO:
yield
else:
file.write(HIDE_CURSOR)
try:
yield
finally:
file.write(SHOW_CURSOR)

View File

@ -0,0 +1,6 @@
SUCCESS = 0
ERROR = 1
UNKNOWN_ERROR = 2
VIRTUALENV_NOT_FOUND = 3
PREVIOUS_BUILD_DIR_ERROR = 4
NO_MATCHES_FOUND = 23

View File

@ -0,0 +1,132 @@
"""
Package containing all pip commands
"""
import importlib
from collections import namedtuple
from typing import Any, Dict, Optional
from pip._internal.cli.base_command import Command
CommandInfo = namedtuple("CommandInfo", "module_path, class_name, summary")
# This dictionary does a bunch of heavy lifting for help output:
# - Enables avoiding additional (costly) imports for presenting `--help`.
# - The ordering matters for help display.
#
# Even though the module path starts with the same "pip._internal.commands"
# prefix, the full path makes testing easier (specifically when modifying
# `commands_dict` in test setup / teardown).
commands_dict: Dict[str, CommandInfo] = {
"install": CommandInfo(
"pip._internal.commands.install",
"InstallCommand",
"Install packages.",
),
"download": CommandInfo(
"pip._internal.commands.download",
"DownloadCommand",
"Download packages.",
),
"uninstall": CommandInfo(
"pip._internal.commands.uninstall",
"UninstallCommand",
"Uninstall packages.",
),
"freeze": CommandInfo(
"pip._internal.commands.freeze",
"FreezeCommand",
"Output installed packages in requirements format.",
),
"inspect": CommandInfo(
"pip._internal.commands.inspect",
"InspectCommand",
"Inspect the python environment.",
),
"list": CommandInfo(
"pip._internal.commands.list",
"ListCommand",
"List installed packages.",
),
"show": CommandInfo(
"pip._internal.commands.show",
"ShowCommand",
"Show information about installed packages.",
),
"check": CommandInfo(
"pip._internal.commands.check",
"CheckCommand",
"Verify installed packages have compatible dependencies.",
),
"config": CommandInfo(
"pip._internal.commands.configuration",
"ConfigurationCommand",
"Manage local and global configuration.",
),
"search": CommandInfo(
"pip._internal.commands.search",
"SearchCommand",
"Search PyPI for packages.",
),
"cache": CommandInfo(
"pip._internal.commands.cache",
"CacheCommand",
"Inspect and manage pip's wheel cache.",
),
"index": CommandInfo(
"pip._internal.commands.index",
"IndexCommand",
"Inspect information available from package indexes.",
),
"wheel": CommandInfo(
"pip._internal.commands.wheel",
"WheelCommand",
"Build wheels from your requirements.",
),
"hash": CommandInfo(
"pip._internal.commands.hash",
"HashCommand",
"Compute hashes of package archives.",
),
"completion": CommandInfo(
"pip._internal.commands.completion",
"CompletionCommand",
"A helper command used for command completion.",
),
"debug": CommandInfo(
"pip._internal.commands.debug",
"DebugCommand",
"Show information useful for debugging.",
),
"help": CommandInfo(
"pip._internal.commands.help",
"HelpCommand",
"Show help for commands.",
),
}
def create_command(name: str, **kwargs: Any) -> Command:
"""
Create an instance of the Command class with the given name.
"""
module_path, class_name, summary = commands_dict[name]
module = importlib.import_module(module_path)
command_class = getattr(module, class_name)
command = command_class(name=name, summary=summary, **kwargs)
return command
def get_similar_commands(name: str) -> Optional[str]:
"""Command name auto-correct."""
from difflib import get_close_matches
name = name.lower()
close_commands = get_close_matches(name, commands_dict.keys())
if close_commands:
return close_commands[0]
else:
return None

View File

@ -0,0 +1,223 @@
import os
import textwrap
from optparse import Values
from typing import Any, List
import pip._internal.utils.filesystem as filesystem
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.exceptions import CommandError, PipError
from pip._internal.utils.logging import getLogger
logger = getLogger(__name__)
class CacheCommand(Command):
"""
Inspect and manage pip's wheel cache.
Subcommands:
- dir: Show the cache directory.
- info: Show information about the cache.
- list: List filenames of packages stored in the cache.
- remove: Remove one or more package from the cache.
- purge: Remove all items from the cache.
``<pattern>`` can be a glob expression or a package name.
"""
ignore_require_venv = True
usage = """
%prog dir
%prog info
%prog list [<pattern>] [--format=[human, abspath]]
%prog remove <pattern>
%prog purge
"""
def add_options(self) -> None:
self.cmd_opts.add_option(
"--format",
action="store",
dest="list_format",
default="human",
choices=("human", "abspath"),
help="Select the output format among: human (default) or abspath",
)
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
handlers = {
"dir": self.get_cache_dir,
"info": self.get_cache_info,
"list": self.list_cache_items,
"remove": self.remove_cache_items,
"purge": self.purge_cache,
}
if not options.cache_dir:
logger.error("pip cache commands can not function since cache is disabled.")
return ERROR
# Determine action
if not args or args[0] not in handlers:
logger.error(
"Need an action (%s) to perform.",
", ".join(sorted(handlers)),
)
return ERROR
action = args[0]
# Error handling happens here, not in the action-handlers.
try:
handlers[action](options, args[1:])
except PipError as e:
logger.error(e.args[0])
return ERROR
return SUCCESS
def get_cache_dir(self, options: Values, args: List[Any]) -> None:
if args:
raise CommandError("Too many arguments")
logger.info(options.cache_dir)
def get_cache_info(self, options: Values, args: List[Any]) -> None:
if args:
raise CommandError("Too many arguments")
num_http_files = len(self._find_http_files(options))
num_packages = len(self._find_wheels(options, "*"))
http_cache_location = self._cache_dir(options, "http")
wheels_cache_location = self._cache_dir(options, "wheels")
http_cache_size = filesystem.format_directory_size(http_cache_location)
wheels_cache_size = filesystem.format_directory_size(wheels_cache_location)
message = (
textwrap.dedent(
"""
Package index page cache location: {http_cache_location}
Package index page cache size: {http_cache_size}
Number of HTTP files: {num_http_files}
Locally built wheels location: {wheels_cache_location}
Locally built wheels size: {wheels_cache_size}
Number of locally built wheels: {package_count}
"""
)
.format(
http_cache_location=http_cache_location,
http_cache_size=http_cache_size,
num_http_files=num_http_files,
wheels_cache_location=wheels_cache_location,
package_count=num_packages,
wheels_cache_size=wheels_cache_size,
)
.strip()
)
logger.info(message)
def list_cache_items(self, options: Values, args: List[Any]) -> None:
if len(args) > 1:
raise CommandError("Too many arguments")
if args:
pattern = args[0]
else:
pattern = "*"
files = self._find_wheels(options, pattern)
if options.list_format == "human":
self.format_for_human(files)
else:
self.format_for_abspath(files)
def format_for_human(self, files: List[str]) -> None:
if not files:
logger.info("No locally built wheels cached.")
return
results = []
for filename in files:
wheel = os.path.basename(filename)
size = filesystem.format_file_size(filename)
results.append(f" - {wheel} ({size})")
logger.info("Cache contents:\n")
logger.info("\n".join(sorted(results)))
def format_for_abspath(self, files: List[str]) -> None:
if not files:
return
results = []
for filename in files:
results.append(filename)
logger.info("\n".join(sorted(results)))
def remove_cache_items(self, options: Values, args: List[Any]) -> None:
if len(args) > 1:
raise CommandError("Too many arguments")
if not args:
raise CommandError("Please provide a pattern")
files = self._find_wheels(options, args[0])
no_matching_msg = "No matching packages"
if args[0] == "*":
# Only fetch http files if no specific pattern given
files += self._find_http_files(options)
else:
# Add the pattern to the log message
no_matching_msg += ' for pattern "{}"'.format(args[0])
if not files:
logger.warning(no_matching_msg)
for filename in files:
os.unlink(filename)
logger.verbose("Removed %s", filename)
logger.info("Files removed: %s", len(files))
def purge_cache(self, options: Values, args: List[Any]) -> None:
if args:
raise CommandError("Too many arguments")
return self.remove_cache_items(options, ["*"])
def _cache_dir(self, options: Values, subdir: str) -> str:
return os.path.join(options.cache_dir, subdir)
def _find_http_files(self, options: Values) -> List[str]:
http_dir = self._cache_dir(options, "http")
return filesystem.find_files(http_dir, "*")
def _find_wheels(self, options: Values, pattern: str) -> List[str]:
wheel_dir = self._cache_dir(options, "wheels")
# The wheel filename format, as specified in PEP 427, is:
# {distribution}-{version}(-{build})?-{python}-{abi}-{platform}.whl
#
# Additionally, non-alphanumeric values in the distribution are
# normalized to underscores (_), meaning hyphens can never occur
# before `-{version}`.
#
# Given that information:
# - If the pattern we're given contains a hyphen (-), the user is
# providing at least the version. Thus, we can just append `*.whl`
# to match the rest of it.
# - If the pattern we're given doesn't contain a hyphen (-), the
# user is only providing the name. Thus, we append `-*.whl` to
# match the hyphen before the version, followed by anything else.
#
# PEP 427: https://www.python.org/dev/peps/pep-0427/
pattern = pattern + ("*.whl" if "-" in pattern else "-*.whl")
return filesystem.find_files(wheel_dir, pattern)

View File

@ -0,0 +1,53 @@
import logging
from optparse import Values
from typing import List
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.operations.check import (
check_package_set,
create_package_set_from_installed,
)
from pip._internal.utils.misc import write_output
logger = logging.getLogger(__name__)
class CheckCommand(Command):
"""Verify installed packages have compatible dependencies."""
usage = """
%prog [options]"""
def run(self, options: Values, args: List[str]) -> int:
package_set, parsing_probs = create_package_set_from_installed()
missing, conflicting = check_package_set(package_set)
for project_name in missing:
version = package_set[project_name].version
for dependency in missing[project_name]:
write_output(
"%s %s requires %s, which is not installed.",
project_name,
version,
dependency[0],
)
for project_name in conflicting:
version = package_set[project_name].version
for dep_name, dep_version, req in conflicting[project_name]:
write_output(
"%s %s has requirement %s, but you have %s %s.",
project_name,
version,
req,
dep_name,
dep_version,
)
if missing or conflicting or parsing_probs:
return ERROR
else:
write_output("No broken requirements found.")
return SUCCESS

View File

@ -0,0 +1,126 @@
import sys
import textwrap
from optparse import Values
from typing import List
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.utils.misc import get_prog
BASE_COMPLETION = """
# pip {shell} completion start{script}# pip {shell} completion end
"""
COMPLETION_SCRIPTS = {
"bash": """
_pip_completion()
{{
COMPREPLY=( $( COMP_WORDS="${{COMP_WORDS[*]}}" \\
COMP_CWORD=$COMP_CWORD \\
PIP_AUTO_COMPLETE=1 $1 2>/dev/null ) )
}}
complete -o default -F _pip_completion {prog}
""",
"zsh": """
function _pip_completion {{
local words cword
read -Ac words
read -cn cword
reply=( $( COMP_WORDS="$words[*]" \\
COMP_CWORD=$(( cword-1 )) \\
PIP_AUTO_COMPLETE=1 $words[1] 2>/dev/null ))
}}
compctl -K _pip_completion {prog}
""",
"fish": """
function __fish_complete_pip
set -lx COMP_WORDS (commandline -o) ""
set -lx COMP_CWORD ( \\
math (contains -i -- (commandline -t) $COMP_WORDS)-1 \\
)
set -lx PIP_AUTO_COMPLETE 1
string split \\ -- (eval $COMP_WORDS[1])
end
complete -fa "(__fish_complete_pip)" -c {prog}
""",
"powershell": """
if ((Test-Path Function:\\TabExpansion) -and -not `
(Test-Path Function:\\_pip_completeBackup)) {{
Rename-Item Function:\\TabExpansion _pip_completeBackup
}}
function TabExpansion($line, $lastWord) {{
$lastBlock = [regex]::Split($line, '[|;]')[-1].TrimStart()
if ($lastBlock.StartsWith("{prog} ")) {{
$Env:COMP_WORDS=$lastBlock
$Env:COMP_CWORD=$lastBlock.Split().Length - 1
$Env:PIP_AUTO_COMPLETE=1
(& {prog}).Split()
Remove-Item Env:COMP_WORDS
Remove-Item Env:COMP_CWORD
Remove-Item Env:PIP_AUTO_COMPLETE
}}
elseif (Test-Path Function:\\_pip_completeBackup) {{
# Fall back on existing tab expansion
_pip_completeBackup $line $lastWord
}}
}}
""",
}
class CompletionCommand(Command):
"""A helper command to be used for command completion."""
ignore_require_venv = True
def add_options(self) -> None:
self.cmd_opts.add_option(
"--bash",
"-b",
action="store_const",
const="bash",
dest="shell",
help="Emit completion code for bash",
)
self.cmd_opts.add_option(
"--zsh",
"-z",
action="store_const",
const="zsh",
dest="shell",
help="Emit completion code for zsh",
)
self.cmd_opts.add_option(
"--fish",
"-f",
action="store_const",
const="fish",
dest="shell",
help="Emit completion code for fish",
)
self.cmd_opts.add_option(
"--powershell",
"-p",
action="store_const",
const="powershell",
dest="shell",
help="Emit completion code for powershell",
)
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
"""Prints the completion code of the given shell"""
shells = COMPLETION_SCRIPTS.keys()
shell_options = ["--" + shell for shell in sorted(shells)]
if options.shell in shells:
script = textwrap.dedent(
COMPLETION_SCRIPTS.get(options.shell, "").format(prog=get_prog())
)
print(BASE_COMPLETION.format(script=script, shell=options.shell))
return SUCCESS
else:
sys.stderr.write(
"ERROR: You must pass {}\n".format(" or ".join(shell_options))
)
return SUCCESS

View File

@ -0,0 +1,282 @@
import logging
import os
import subprocess
from optparse import Values
from typing import Any, List, Optional
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.configuration import (
Configuration,
Kind,
get_configuration_files,
kinds,
)
from pip._internal.exceptions import PipError
from pip._internal.utils.logging import indent_log
from pip._internal.utils.misc import get_prog, write_output
logger = logging.getLogger(__name__)
class ConfigurationCommand(Command):
"""
Manage local and global configuration.
Subcommands:
- list: List the active configuration (or from the file specified)
- edit: Edit the configuration file in an editor
- get: Get the value associated with command.option
- set: Set the command.option=value
- unset: Unset the value associated with command.option
- debug: List the configuration files and values defined under them
Configuration keys should be dot separated command and option name,
with the special prefix "global" affecting any command. For example,
"pip config set global.index-url https://example.org/" would configure
the index url for all commands, but "pip config set download.timeout 10"
would configure a 10 second timeout only for "pip download" commands.
If none of --user, --global and --site are passed, a virtual
environment configuration file is used if one is active and the file
exists. Otherwise, all modifications happen to the user file by
default.
"""
ignore_require_venv = True
usage = """
%prog [<file-option>] list
%prog [<file-option>] [--editor <editor-path>] edit
%prog [<file-option>] get command.option
%prog [<file-option>] set command.option value
%prog [<file-option>] unset command.option
%prog [<file-option>] debug
"""
def add_options(self) -> None:
self.cmd_opts.add_option(
"--editor",
dest="editor",
action="store",
default=None,
help=(
"Editor to use to edit the file. Uses VISUAL or EDITOR "
"environment variables if not provided."
),
)
self.cmd_opts.add_option(
"--global",
dest="global_file",
action="store_true",
default=False,
help="Use the system-wide configuration file only",
)
self.cmd_opts.add_option(
"--user",
dest="user_file",
action="store_true",
default=False,
help="Use the user configuration file only",
)
self.cmd_opts.add_option(
"--site",
dest="site_file",
action="store_true",
default=False,
help="Use the current environment configuration file only",
)
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
handlers = {
"list": self.list_values,
"edit": self.open_in_editor,
"get": self.get_name,
"set": self.set_name_value,
"unset": self.unset_name,
"debug": self.list_config_values,
}
# Determine action
if not args or args[0] not in handlers:
logger.error(
"Need an action (%s) to perform.",
", ".join(sorted(handlers)),
)
return ERROR
action = args[0]
# Determine which configuration files are to be loaded
# Depends on whether the command is modifying.
try:
load_only = self._determine_file(
options, need_value=(action in ["get", "set", "unset", "edit"])
)
except PipError as e:
logger.error(e.args[0])
return ERROR
# Load a new configuration
self.configuration = Configuration(
isolated=options.isolated_mode, load_only=load_only
)
self.configuration.load()
# Error handling happens here, not in the action-handlers.
try:
handlers[action](options, args[1:])
except PipError as e:
logger.error(e.args[0])
return ERROR
return SUCCESS
def _determine_file(self, options: Values, need_value: bool) -> Optional[Kind]:
file_options = [
key
for key, value in (
(kinds.USER, options.user_file),
(kinds.GLOBAL, options.global_file),
(kinds.SITE, options.site_file),
)
if value
]
if not file_options:
if not need_value:
return None
# Default to user, unless there's a site file.
elif any(
os.path.exists(site_config_file)
for site_config_file in get_configuration_files()[kinds.SITE]
):
return kinds.SITE
else:
return kinds.USER
elif len(file_options) == 1:
return file_options[0]
raise PipError(
"Need exactly one file to operate upon "
"(--user, --site, --global) to perform."
)
def list_values(self, options: Values, args: List[str]) -> None:
self._get_n_args(args, "list", n=0)
for key, value in sorted(self.configuration.items()):
write_output("%s=%r", key, value)
def get_name(self, options: Values, args: List[str]) -> None:
key = self._get_n_args(args, "get [name]", n=1)
value = self.configuration.get_value(key)
write_output("%s", value)
def set_name_value(self, options: Values, args: List[str]) -> None:
key, value = self._get_n_args(args, "set [name] [value]", n=2)
self.configuration.set_value(key, value)
self._save_configuration()
def unset_name(self, options: Values, args: List[str]) -> None:
key = self._get_n_args(args, "unset [name]", n=1)
self.configuration.unset_value(key)
self._save_configuration()
def list_config_values(self, options: Values, args: List[str]) -> None:
"""List config key-value pairs across different config files"""
self._get_n_args(args, "debug", n=0)
self.print_env_var_values()
# Iterate over config files and print if they exist, and the
# key-value pairs present in them if they do
for variant, files in sorted(self.configuration.iter_config_files()):
write_output("%s:", variant)
for fname in files:
with indent_log():
file_exists = os.path.exists(fname)
write_output("%s, exists: %r", fname, file_exists)
if file_exists:
self.print_config_file_values(variant)
def print_config_file_values(self, variant: Kind) -> None:
"""Get key-value pairs from the file of a variant"""
for name, value in self.configuration.get_values_in_config(variant).items():
with indent_log():
write_output("%s: %s", name, value)
def print_env_var_values(self) -> None:
"""Get key-values pairs present as environment variables"""
write_output("%s:", "env_var")
with indent_log():
for key, value in sorted(self.configuration.get_environ_vars()):
env_var = f"PIP_{key.upper()}"
write_output("%s=%r", env_var, value)
def open_in_editor(self, options: Values, args: List[str]) -> None:
editor = self._determine_editor(options)
fname = self.configuration.get_file_to_edit()
if fname is None:
raise PipError("Could not determine appropriate file.")
elif '"' in fname:
# This shouldn't happen, unless we see a username like that.
# If that happens, we'd appreciate a pull request fixing this.
raise PipError(
f'Can not open an editor for a file name containing "\n{fname}'
)
try:
subprocess.check_call(f'{editor} "{fname}"', shell=True)
except FileNotFoundError as e:
if not e.filename:
e.filename = editor
raise
except subprocess.CalledProcessError as e:
raise PipError(
"Editor Subprocess exited with exit code {}".format(e.returncode)
)
def _get_n_args(self, args: List[str], example: str, n: int) -> Any:
"""Helper to make sure the command got the right number of arguments"""
if len(args) != n:
msg = (
"Got unexpected number of arguments, expected {}. "
'(example: "{} config {}")'
).format(n, get_prog(), example)
raise PipError(msg)
if n == 1:
return args[0]
else:
return args
def _save_configuration(self) -> None:
# We successfully ran a modifying command. Need to save the
# configuration.
try:
self.configuration.save()
except Exception:
logger.exception(
"Unable to save configuration. Please report this as a bug."
)
raise PipError("Internal Error.")
def _determine_editor(self, options: Values) -> str:
if options.editor is not None:
return options.editor
elif "VISUAL" in os.environ:
return os.environ["VISUAL"]
elif "EDITOR" in os.environ:
return os.environ["EDITOR"]
else:
raise PipError("Could not determine editor to use.")

View File

@ -0,0 +1,199 @@
import importlib.resources
import locale
import logging
import os
import sys
from optparse import Values
from types import ModuleType
from typing import Any, Dict, List, Optional
import pip._vendor
from pip._vendor.certifi import where
from pip._vendor.packaging.version import parse as parse_version
from pip._internal.cli import cmdoptions
from pip._internal.cli.base_command import Command
from pip._internal.cli.cmdoptions import make_target_python
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.configuration import Configuration
from pip._internal.metadata import get_environment
from pip._internal.utils.logging import indent_log
from pip._internal.utils.misc import get_pip_version
logger = logging.getLogger(__name__)
def show_value(name: str, value: Any) -> None:
logger.info("%s: %s", name, value)
def show_sys_implementation() -> None:
logger.info("sys.implementation:")
implementation_name = sys.implementation.name
with indent_log():
show_value("name", implementation_name)
def create_vendor_txt_map() -> Dict[str, str]:
with importlib.resources.open_text("pip._vendor", "vendor.txt") as f:
# Purge non version specifying lines.
# Also, remove any space prefix or suffixes (including comments).
lines = [
line.strip().split(" ", 1)[0] for line in f.readlines() if "==" in line
]
# Transform into "module" -> version dict.
return dict(line.split("==", 1) for line in lines)
def get_module_from_module_name(module_name: str) -> ModuleType:
# Module name can be uppercase in vendor.txt for some reason...
module_name = module_name.lower()
# PATCH: setuptools is actually only pkg_resources.
if module_name == "setuptools":
module_name = "pkg_resources"
__import__(f"pip._vendor.{module_name}", globals(), locals(), level=0)
return getattr(pip._vendor, module_name)
def get_vendor_version_from_module(module_name: str) -> Optional[str]:
module = get_module_from_module_name(module_name)
version = getattr(module, "__version__", None)
if not version:
# Try to find version in debundled module info.
assert module.__file__ is not None
env = get_environment([os.path.dirname(module.__file__)])
dist = env.get_distribution(module_name)
if dist:
version = str(dist.version)
return version
def show_actual_vendor_versions(vendor_txt_versions: Dict[str, str]) -> None:
"""Log the actual version and print extra info if there is
a conflict or if the actual version could not be imported.
"""
for module_name, expected_version in vendor_txt_versions.items():
extra_message = ""
actual_version = get_vendor_version_from_module(module_name)
if not actual_version:
extra_message = (
" (Unable to locate actual module version, using"
" vendor.txt specified version)"
)
actual_version = expected_version
elif parse_version(actual_version) != parse_version(expected_version):
extra_message = (
" (CONFLICT: vendor.txt suggests version should"
" be {})".format(expected_version)
)
logger.info("%s==%s%s", module_name, actual_version, extra_message)
def show_vendor_versions() -> None:
logger.info("vendored library versions:")
vendor_txt_versions = create_vendor_txt_map()
with indent_log():
show_actual_vendor_versions(vendor_txt_versions)
def show_tags(options: Values) -> None:
tag_limit = 10
target_python = make_target_python(options)
tags = target_python.get_tags()
# Display the target options that were explicitly provided.
formatted_target = target_python.format_given()
suffix = ""
if formatted_target:
suffix = f" (target: {formatted_target})"
msg = "Compatible tags: {}{}".format(len(tags), suffix)
logger.info(msg)
if options.verbose < 1 and len(tags) > tag_limit:
tags_limited = True
tags = tags[:tag_limit]
else:
tags_limited = False
with indent_log():
for tag in tags:
logger.info(str(tag))
if tags_limited:
msg = (
"...\n[First {tag_limit} tags shown. Pass --verbose to show all.]"
).format(tag_limit=tag_limit)
logger.info(msg)
def ca_bundle_info(config: Configuration) -> str:
levels = set()
for key, _ in config.items():
levels.add(key.split(".")[0])
if not levels:
return "Not specified"
levels_that_override_global = ["install", "wheel", "download"]
global_overriding_level = [
level for level in levels if level in levels_that_override_global
]
if not global_overriding_level:
return "global"
if "global" in levels:
levels.remove("global")
return ", ".join(levels)
class DebugCommand(Command):
"""
Display debug information.
"""
usage = """
%prog <options>"""
ignore_require_venv = True
def add_options(self) -> None:
cmdoptions.add_target_python_options(self.cmd_opts)
self.parser.insert_option_group(0, self.cmd_opts)
self.parser.config.load()
def run(self, options: Values, args: List[str]) -> int:
logger.warning(
"This command is only meant for debugging. "
"Do not use this with automation for parsing and getting these "
"details, since the output and options of this command may "
"change without notice."
)
show_value("pip version", get_pip_version())
show_value("sys.version", sys.version)
show_value("sys.executable", sys.executable)
show_value("sys.getdefaultencoding", sys.getdefaultencoding())
show_value("sys.getfilesystemencoding", sys.getfilesystemencoding())
show_value(
"locale.getpreferredencoding",
locale.getpreferredencoding(),
)
show_value("sys.platform", sys.platform)
show_sys_implementation()
show_value("'cert' config value", ca_bundle_info(self.parser.config))
show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE"))
show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE"))
show_value("pip._vendor.certifi.where()", where())
show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED)
show_vendor_versions()
show_tags(options)
return SUCCESS

View File

@ -0,0 +1,149 @@
import logging
import os
from optparse import Values
from typing import List
from pip._internal.cli import cmdoptions
from pip._internal.cli.cmdoptions import make_target_python
from pip._internal.cli.req_command import RequirementCommand, with_cleanup
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.operations.build.build_tracker import get_build_tracker
from pip._internal.req.req_install import (
LegacySetupPyOptionsCheckMode,
check_legacy_setup_py_options,
)
from pip._internal.utils.misc import ensure_dir, normalize_path, write_output
from pip._internal.utils.temp_dir import TempDirectory
logger = logging.getLogger(__name__)
class DownloadCommand(RequirementCommand):
"""
Download packages from:
- PyPI (and other indexes) using requirement specifiers.
- VCS project urls.
- Local project directories.
- Local or remote source archives.
pip also supports downloading from "requirements files", which provide
an easy way to specify a whole environment to be downloaded.
"""
usage = """
%prog [options] <requirement specifier> [package-index-options] ...
%prog [options] -r <requirements file> [package-index-options] ...
%prog [options] <vcs project url> ...
%prog [options] <local project path> ...
%prog [options] <archive url/path> ..."""
def add_options(self) -> None:
self.cmd_opts.add_option(cmdoptions.constraints())
self.cmd_opts.add_option(cmdoptions.requirements())
self.cmd_opts.add_option(cmdoptions.no_deps())
self.cmd_opts.add_option(cmdoptions.global_options())
self.cmd_opts.add_option(cmdoptions.no_binary())
self.cmd_opts.add_option(cmdoptions.only_binary())
self.cmd_opts.add_option(cmdoptions.prefer_binary())
self.cmd_opts.add_option(cmdoptions.src())
self.cmd_opts.add_option(cmdoptions.pre())
self.cmd_opts.add_option(cmdoptions.require_hashes())
self.cmd_opts.add_option(cmdoptions.progress_bar())
self.cmd_opts.add_option(cmdoptions.no_build_isolation())
self.cmd_opts.add_option(cmdoptions.use_pep517())
self.cmd_opts.add_option(cmdoptions.no_use_pep517())
self.cmd_opts.add_option(cmdoptions.check_build_deps())
self.cmd_opts.add_option(cmdoptions.ignore_requires_python())
self.cmd_opts.add_option(
"-d",
"--dest",
"--destination-dir",
"--destination-directory",
dest="download_dir",
metavar="dir",
default=os.curdir,
help="Download packages into <dir>.",
)
cmdoptions.add_target_python_options(self.cmd_opts)
index_opts = cmdoptions.make_option_group(
cmdoptions.index_group,
self.parser,
)
self.parser.insert_option_group(0, index_opts)
self.parser.insert_option_group(0, self.cmd_opts)
@with_cleanup
def run(self, options: Values, args: List[str]) -> int:
options.ignore_installed = True
# editable doesn't really make sense for `pip download`, but the bowels
# of the RequirementSet code require that property.
options.editables = []
cmdoptions.check_dist_restriction(options)
options.download_dir = normalize_path(options.download_dir)
ensure_dir(options.download_dir)
session = self.get_default_session(options)
target_python = make_target_python(options)
finder = self._build_package_finder(
options=options,
session=session,
target_python=target_python,
ignore_requires_python=options.ignore_requires_python,
)
build_tracker = self.enter_context(get_build_tracker())
directory = TempDirectory(
delete=not options.no_clean,
kind="download",
globally_managed=True,
)
reqs = self.get_requirements(args, options, finder, session)
check_legacy_setup_py_options(
options, reqs, LegacySetupPyOptionsCheckMode.DOWNLOAD
)
preparer = self.make_requirement_preparer(
temp_build_dir=directory,
options=options,
build_tracker=build_tracker,
session=session,
finder=finder,
download_dir=options.download_dir,
use_user_site=False,
verbosity=self.verbosity,
)
resolver = self.make_resolver(
preparer=preparer,
finder=finder,
options=options,
ignore_requires_python=options.ignore_requires_python,
use_pep517=options.use_pep517,
py_version_info=options.python_version,
)
self.trace_basic_info(finder)
requirement_set = resolver.resolve(reqs, check_supported_wheels=True)
downloaded: List[str] = []
for req in requirement_set.requirements.values():
if req.satisfied_by is None:
assert req.name is not None
preparer.save_linked_requirement(req)
downloaded.append(req.name)
if downloaded:
write_output("Successfully downloaded %s", " ".join(downloaded))
return SUCCESS

View File

@ -0,0 +1,97 @@
import sys
from optparse import Values
from typing import List
from pip._internal.cli import cmdoptions
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.operations.freeze import freeze
from pip._internal.utils.compat import stdlib_pkgs
DEV_PKGS = {"pip", "setuptools", "distribute", "wheel"}
class FreezeCommand(Command):
"""
Output installed packages in requirements format.
packages are listed in a case-insensitive sorted order.
"""
usage = """
%prog [options]"""
log_streams = ("ext://sys.stderr", "ext://sys.stderr")
def add_options(self) -> None:
self.cmd_opts.add_option(
"-r",
"--requirement",
dest="requirements",
action="append",
default=[],
metavar="file",
help=(
"Use the order in the given requirements file and its "
"comments when generating output. This option can be "
"used multiple times."
),
)
self.cmd_opts.add_option(
"-l",
"--local",
dest="local",
action="store_true",
default=False,
help=(
"If in a virtualenv that has global access, do not output "
"globally-installed packages."
),
)
self.cmd_opts.add_option(
"--user",
dest="user",
action="store_true",
default=False,
help="Only output packages installed in user-site.",
)
self.cmd_opts.add_option(cmdoptions.list_path())
self.cmd_opts.add_option(
"--all",
dest="freeze_all",
action="store_true",
help=(
"Do not skip these packages in the output:"
" {}".format(", ".join(DEV_PKGS))
),
)
self.cmd_opts.add_option(
"--exclude-editable",
dest="exclude_editable",
action="store_true",
help="Exclude editable package from output.",
)
self.cmd_opts.add_option(cmdoptions.list_exclude())
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
skip = set(stdlib_pkgs)
if not options.freeze_all:
skip.update(DEV_PKGS)
if options.excludes:
skip.update(options.excludes)
cmdoptions.check_list_path_option(options)
for line in freeze(
requirement=options.requirements,
local_only=options.local,
user_only=options.user,
paths=options.path,
isolated=options.isolated_mode,
skip=skip,
exclude_editable=options.exclude_editable,
):
sys.stdout.write(line + "\n")
return SUCCESS

View File

@ -0,0 +1,59 @@
import hashlib
import logging
import sys
from optparse import Values
from typing import List
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.utils.hashes import FAVORITE_HASH, STRONG_HASHES
from pip._internal.utils.misc import read_chunks, write_output
logger = logging.getLogger(__name__)
class HashCommand(Command):
"""
Compute a hash of a local package archive.
These can be used with --hash in a requirements file to do repeatable
installs.
"""
usage = "%prog [options] <file> ..."
ignore_require_venv = True
def add_options(self) -> None:
self.cmd_opts.add_option(
"-a",
"--algorithm",
dest="algorithm",
choices=STRONG_HASHES,
action="store",
default=FAVORITE_HASH,
help="The hash algorithm to use: one of {}".format(
", ".join(STRONG_HASHES)
),
)
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
if not args:
self.parser.print_usage(sys.stderr)
return ERROR
algorithm = options.algorithm
for path in args:
write_output(
"%s:\n--hash=%s:%s", path, algorithm, _hash_of_file(path, algorithm)
)
return SUCCESS
def _hash_of_file(path: str, algorithm: str) -> str:
"""Return the hash digest of a file."""
with open(path, "rb") as archive:
hash = hashlib.new(algorithm)
for chunk in read_chunks(archive):
hash.update(chunk)
return hash.hexdigest()

View File

@ -0,0 +1,41 @@
from optparse import Values
from typing import List
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.exceptions import CommandError
class HelpCommand(Command):
"""Show help for commands"""
usage = """
%prog <command>"""
ignore_require_venv = True
def run(self, options: Values, args: List[str]) -> int:
from pip._internal.commands import (
commands_dict,
create_command,
get_similar_commands,
)
try:
# 'pip help' with no args is handled by pip.__init__.parseopt()
cmd_name = args[0] # the command we need help for
except IndexError:
return SUCCESS
if cmd_name not in commands_dict:
guess = get_similar_commands(cmd_name)
msg = [f'unknown command "{cmd_name}"']
if guess:
msg.append(f'maybe you meant "{guess}"')
raise CommandError(" - ".join(msg))
command = create_command(cmd_name)
command.parser.print_help()
return SUCCESS

View File

@ -0,0 +1,138 @@
import logging
from optparse import Values
from typing import Any, Iterable, List, Optional, Union
from pip._vendor.packaging.version import LegacyVersion, Version
from pip._internal.cli import cmdoptions
from pip._internal.cli.req_command import IndexGroupCommand
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.commands.search import print_dist_installation_info
from pip._internal.exceptions import CommandError, DistributionNotFound, PipError
from pip._internal.index.collector import LinkCollector
from pip._internal.index.package_finder import PackageFinder
from pip._internal.models.selection_prefs import SelectionPreferences
from pip._internal.models.target_python import TargetPython
from pip._internal.network.session import PipSession
from pip._internal.utils.misc import write_output
logger = logging.getLogger(__name__)
class IndexCommand(IndexGroupCommand):
"""
Inspect information available from package indexes.
"""
usage = """
%prog versions <package>
"""
def add_options(self) -> None:
cmdoptions.add_target_python_options(self.cmd_opts)
self.cmd_opts.add_option(cmdoptions.ignore_requires_python())
self.cmd_opts.add_option(cmdoptions.pre())
self.cmd_opts.add_option(cmdoptions.no_binary())
self.cmd_opts.add_option(cmdoptions.only_binary())
index_opts = cmdoptions.make_option_group(
cmdoptions.index_group,
self.parser,
)
self.parser.insert_option_group(0, index_opts)
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
handlers = {
"versions": self.get_available_package_versions,
}
logger.warning(
"pip index is currently an experimental command. "
"It may be removed/changed in a future release "
"without prior warning."
)
# Determine action
if not args or args[0] not in handlers:
logger.error(
"Need an action (%s) to perform.",
", ".join(sorted(handlers)),
)
return ERROR
action = args[0]
# Error handling happens here, not in the action-handlers.
try:
handlers[action](options, args[1:])
except PipError as e:
logger.error(e.args[0])
return ERROR
return SUCCESS
def _build_package_finder(
self,
options: Values,
session: PipSession,
target_python: Optional[TargetPython] = None,
ignore_requires_python: Optional[bool] = None,
) -> PackageFinder:
"""
Create a package finder appropriate to the index command.
"""
link_collector = LinkCollector.create(session, options=options)
# Pass allow_yanked=False to ignore yanked versions.
selection_prefs = SelectionPreferences(
allow_yanked=False,
allow_all_prereleases=options.pre,
ignore_requires_python=ignore_requires_python,
)
return PackageFinder.create(
link_collector=link_collector,
selection_prefs=selection_prefs,
target_python=target_python,
)
def get_available_package_versions(self, options: Values, args: List[Any]) -> None:
if len(args) != 1:
raise CommandError("You need to specify exactly one argument")
target_python = cmdoptions.make_target_python(options)
query = args[0]
with self._build_session(options) as session:
finder = self._build_package_finder(
options=options,
session=session,
target_python=target_python,
ignore_requires_python=options.ignore_requires_python,
)
versions: Iterable[Union[LegacyVersion, Version]] = (
candidate.version for candidate in finder.find_all_candidates(query)
)
if not options.pre:
# Remove prereleases
versions = (
version for version in versions if not version.is_prerelease
)
versions = set(versions)
if not versions:
raise DistributionNotFound(
"No matching distribution found for {}".format(query)
)
formatted_versions = [str(ver) for ver in sorted(versions, reverse=True)]
latest = formatted_versions[0]
write_output("{} ({})".format(query, latest))
write_output("Available versions: {}".format(", ".join(formatted_versions)))
print_dist_installation_info(query, latest)

View File

@ -0,0 +1,97 @@
import logging
from optparse import Values
from typing import Any, Dict, List
from pip._vendor.packaging.markers import default_environment
from pip._vendor.rich import print_json
from pip import __version__
from pip._internal.cli import cmdoptions
from pip._internal.cli.req_command import Command
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.metadata import BaseDistribution, get_environment
from pip._internal.utils.compat import stdlib_pkgs
from pip._internal.utils.urls import path_to_url
logger = logging.getLogger(__name__)
class InspectCommand(Command):
"""
Inspect the content of a Python environment and produce a report in JSON format.
"""
ignore_require_venv = True
usage = """
%prog [options]"""
def add_options(self) -> None:
self.cmd_opts.add_option(
"--local",
action="store_true",
default=False,
help=(
"If in a virtualenv that has global access, do not list "
"globally-installed packages."
),
)
self.cmd_opts.add_option(
"--user",
dest="user",
action="store_true",
default=False,
help="Only output packages installed in user-site.",
)
self.cmd_opts.add_option(cmdoptions.list_path())
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
logger.warning(
"pip inspect is currently an experimental command. "
"The output format may change in a future release without prior warning."
)
cmdoptions.check_list_path_option(options)
dists = get_environment(options.path).iter_installed_distributions(
local_only=options.local,
user_only=options.user,
skip=set(stdlib_pkgs),
)
output = {
"version": "0",
"pip_version": __version__,
"installed": [self._dist_to_dict(dist) for dist in dists],
"environment": default_environment(),
# TODO tags? scheme?
}
print_json(data=output)
return SUCCESS
def _dist_to_dict(self, dist: BaseDistribution) -> Dict[str, Any]:
res: Dict[str, Any] = {
"metadata": dist.metadata_dict,
"metadata_location": dist.info_location,
}
# direct_url. Note that we don't have download_info (as in the installation
# report) since it is not recorded in installed metadata.
direct_url = dist.direct_url
if direct_url is not None:
res["direct_url"] = direct_url.to_dict()
else:
# Emulate direct_url for legacy editable installs.
editable_project_location = dist.editable_project_location
if editable_project_location is not None:
res["direct_url"] = {
"url": path_to_url(editable_project_location),
"dir_info": {
"editable": True,
},
}
# installer
installer = dist.installer
if dist.installer:
res["installer"] = installer
# requested
if dist.installed_with_dist_info:
res["requested"] = dist.requested
return res

View File

@ -0,0 +1,860 @@
import errno
import json
import operator
import os
import shutil
import site
from optparse import SUPPRESS_HELP, Values
from typing import Iterable, List, Optional
from pip._vendor.packaging.utils import canonicalize_name
from pip._vendor.rich import print_json
from pip._internal.cache import WheelCache
from pip._internal.cli import cmdoptions
from pip._internal.cli.cmdoptions import make_target_python
from pip._internal.cli.req_command import (
RequirementCommand,
warn_if_run_as_root,
with_cleanup,
)
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.exceptions import CommandError, InstallationError
from pip._internal.locations import get_scheme
from pip._internal.metadata import get_environment
from pip._internal.models.format_control import FormatControl
from pip._internal.models.installation_report import InstallationReport
from pip._internal.operations.build.build_tracker import get_build_tracker
from pip._internal.operations.check import ConflictDetails, check_install_conflicts
from pip._internal.req import install_given_reqs
from pip._internal.req.req_install import (
InstallRequirement,
LegacySetupPyOptionsCheckMode,
check_legacy_setup_py_options,
)
from pip._internal.utils.compat import WINDOWS
from pip._internal.utils.deprecation import (
LegacyInstallReasonFailedBdistWheel,
deprecated,
)
from pip._internal.utils.distutils_args import parse_distutils_args
from pip._internal.utils.filesystem import test_writable_dir
from pip._internal.utils.logging import getLogger
from pip._internal.utils.misc import (
ensure_dir,
get_pip_version,
protect_pip_from_modification_on_windows,
write_output,
)
from pip._internal.utils.temp_dir import TempDirectory
from pip._internal.utils.virtualenv import (
running_under_virtualenv,
virtualenv_no_global,
)
from pip._internal.wheel_builder import (
BdistWheelAllowedPredicate,
build,
should_build_for_install_command,
)
logger = getLogger(__name__)
def get_check_bdist_wheel_allowed(
format_control: FormatControl,
) -> BdistWheelAllowedPredicate:
def check_binary_allowed(req: InstallRequirement) -> bool:
canonical_name = canonicalize_name(req.name or "")
allowed_formats = format_control.get_allowed_formats(canonical_name)
return "binary" in allowed_formats
return check_binary_allowed
class InstallCommand(RequirementCommand):
"""
Install packages from:
- PyPI (and other indexes) using requirement specifiers.
- VCS project urls.
- Local project directories.
- Local or remote source archives.
pip also supports installing from "requirements files", which provide
an easy way to specify a whole environment to be installed.
"""
usage = """
%prog [options] <requirement specifier> [package-index-options] ...
%prog [options] -r <requirements file> [package-index-options] ...
%prog [options] [-e] <vcs project url> ...
%prog [options] [-e] <local project path> ...
%prog [options] <archive url/path> ..."""
def add_options(self) -> None:
self.cmd_opts.add_option(cmdoptions.requirements())
self.cmd_opts.add_option(cmdoptions.constraints())
self.cmd_opts.add_option(cmdoptions.no_deps())
self.cmd_opts.add_option(cmdoptions.pre())
self.cmd_opts.add_option(cmdoptions.editable())
self.cmd_opts.add_option(
"--dry-run",
action="store_true",
dest="dry_run",
default=False,
help=(
"Don't actually install anything, just print what would be. "
"Can be used in combination with --ignore-installed "
"to 'resolve' the requirements."
),
)
self.cmd_opts.add_option(
"-t",
"--target",
dest="target_dir",
metavar="dir",
default=None,
help=(
"Install packages into <dir>. "
"By default this will not replace existing files/folders in "
"<dir>. Use --upgrade to replace existing packages in <dir> "
"with new versions."
),
)
cmdoptions.add_target_python_options(self.cmd_opts)
self.cmd_opts.add_option(
"--user",
dest="use_user_site",
action="store_true",
help=(
"Install to the Python user install directory for your "
"platform. Typically ~/.local/, or %APPDATA%\\Python on "
"Windows. (See the Python documentation for site.USER_BASE "
"for full details.)"
),
)
self.cmd_opts.add_option(
"--no-user",
dest="use_user_site",
action="store_false",
help=SUPPRESS_HELP,
)
self.cmd_opts.add_option(
"--root",
dest="root_path",
metavar="dir",
default=None,
help="Install everything relative to this alternate root directory.",
)
self.cmd_opts.add_option(
"--prefix",
dest="prefix_path",
metavar="dir",
default=None,
help=(
"Installation prefix where lib, bin and other top-level "
"folders are placed"
),
)
self.cmd_opts.add_option(cmdoptions.src())
self.cmd_opts.add_option(
"-U",
"--upgrade",
dest="upgrade",
action="store_true",
help=(
"Upgrade all specified packages to the newest available "
"version. The handling of dependencies depends on the "
"upgrade-strategy used."
),
)
self.cmd_opts.add_option(
"--upgrade-strategy",
dest="upgrade_strategy",
default="only-if-needed",
choices=["only-if-needed", "eager"],
help=(
"Determines how dependency upgrading should be handled "
"[default: %default]. "
'"eager" - dependencies are upgraded regardless of '
"whether the currently installed version satisfies the "
"requirements of the upgraded package(s). "
'"only-if-needed" - are upgraded only when they do not '
"satisfy the requirements of the upgraded package(s)."
),
)
self.cmd_opts.add_option(
"--force-reinstall",
dest="force_reinstall",
action="store_true",
help="Reinstall all packages even if they are already up-to-date.",
)
self.cmd_opts.add_option(
"-I",
"--ignore-installed",
dest="ignore_installed",
action="store_true",
help=(
"Ignore the installed packages, overwriting them. "
"This can break your system if the existing package "
"is of a different version or was installed "
"with a different package manager!"
),
)
self.cmd_opts.add_option(cmdoptions.ignore_requires_python())
self.cmd_opts.add_option(cmdoptions.no_build_isolation())
self.cmd_opts.add_option(cmdoptions.use_pep517())
self.cmd_opts.add_option(cmdoptions.no_use_pep517())
self.cmd_opts.add_option(cmdoptions.check_build_deps())
self.cmd_opts.add_option(cmdoptions.config_settings())
self.cmd_opts.add_option(cmdoptions.install_options())
self.cmd_opts.add_option(cmdoptions.global_options())
self.cmd_opts.add_option(
"--compile",
action="store_true",
dest="compile",
default=True,
help="Compile Python source files to bytecode",
)
self.cmd_opts.add_option(
"--no-compile",
action="store_false",
dest="compile",
help="Do not compile Python source files to bytecode",
)
self.cmd_opts.add_option(
"--no-warn-script-location",
action="store_false",
dest="warn_script_location",
default=True,
help="Do not warn when installing scripts outside PATH",
)
self.cmd_opts.add_option(
"--no-warn-conflicts",
action="store_false",
dest="warn_about_conflicts",
default=True,
help="Do not warn about broken dependencies",
)
self.cmd_opts.add_option(cmdoptions.no_binary())
self.cmd_opts.add_option(cmdoptions.only_binary())
self.cmd_opts.add_option(cmdoptions.prefer_binary())
self.cmd_opts.add_option(cmdoptions.require_hashes())
self.cmd_opts.add_option(cmdoptions.progress_bar())
self.cmd_opts.add_option(cmdoptions.root_user_action())
index_opts = cmdoptions.make_option_group(
cmdoptions.index_group,
self.parser,
)
self.parser.insert_option_group(0, index_opts)
self.parser.insert_option_group(0, self.cmd_opts)
self.cmd_opts.add_option(
"--report",
dest="json_report_file",
metavar="file",
default=None,
help=(
"Generate a JSON file describing what pip did to install "
"the provided requirements. "
"Can be used in combination with --dry-run and --ignore-installed "
"to 'resolve' the requirements. "
"When - is used as file name it writes to stdout. "
"When writing to stdout, please combine with the --quiet option "
"to avoid mixing pip logging output with JSON output."
),
)
@with_cleanup
def run(self, options: Values, args: List[str]) -> int:
if options.use_user_site and options.target_dir is not None:
raise CommandError("Can not combine '--user' and '--target'")
upgrade_strategy = "to-satisfy-only"
if options.upgrade:
upgrade_strategy = options.upgrade_strategy
cmdoptions.check_dist_restriction(options, check_target=True)
install_options = options.install_options or []
logger.verbose("Using %s", get_pip_version())
options.use_user_site = decide_user_install(
options.use_user_site,
prefix_path=options.prefix_path,
target_dir=options.target_dir,
root_path=options.root_path,
isolated_mode=options.isolated_mode,
)
target_temp_dir: Optional[TempDirectory] = None
target_temp_dir_path: Optional[str] = None
if options.target_dir:
options.ignore_installed = True
options.target_dir = os.path.abspath(options.target_dir)
if (
# fmt: off
os.path.exists(options.target_dir) and
not os.path.isdir(options.target_dir)
# fmt: on
):
raise CommandError(
"Target path exists but is not a directory, will not continue."
)
# Create a target directory for using with the target option
target_temp_dir = TempDirectory(kind="target")
target_temp_dir_path = target_temp_dir.path
self.enter_context(target_temp_dir)
global_options = options.global_options or []
session = self.get_default_session(options)
target_python = make_target_python(options)
finder = self._build_package_finder(
options=options,
session=session,
target_python=target_python,
ignore_requires_python=options.ignore_requires_python,
)
build_tracker = self.enter_context(get_build_tracker())
directory = TempDirectory(
delete=not options.no_clean,
kind="install",
globally_managed=True,
)
try:
reqs = self.get_requirements(args, options, finder, session)
check_legacy_setup_py_options(
options, reqs, LegacySetupPyOptionsCheckMode.INSTALL
)
if "no-binary-enable-wheel-cache" in options.features_enabled:
# TODO: remove format_control from WheelCache when the deprecation cycle
# is over
wheel_cache = WheelCache(options.cache_dir)
else:
if options.format_control.no_binary:
deprecated(
reason=(
"--no-binary currently disables reading from "
"the cache of locally built wheels. In the future "
"--no-binary will not influence the wheel cache."
),
replacement="to use the --no-cache-dir option",
feature_flag="no-binary-enable-wheel-cache",
issue=11453,
gone_in="23.1",
)
wheel_cache = WheelCache(options.cache_dir, options.format_control)
# Only when installing is it permitted to use PEP 660.
# In other circumstances (pip wheel, pip download) we generate
# regular (i.e. non editable) metadata and wheels.
for req in reqs:
req.permit_editable_wheels = True
reject_location_related_install_options(reqs, options.install_options)
preparer = self.make_requirement_preparer(
temp_build_dir=directory,
options=options,
build_tracker=build_tracker,
session=session,
finder=finder,
use_user_site=options.use_user_site,
verbosity=self.verbosity,
)
resolver = self.make_resolver(
preparer=preparer,
finder=finder,
options=options,
wheel_cache=wheel_cache,
use_user_site=options.use_user_site,
ignore_installed=options.ignore_installed,
ignore_requires_python=options.ignore_requires_python,
force_reinstall=options.force_reinstall,
upgrade_strategy=upgrade_strategy,
use_pep517=options.use_pep517,
)
self.trace_basic_info(finder)
requirement_set = resolver.resolve(
reqs, check_supported_wheels=not options.target_dir
)
if options.json_report_file:
logger.warning(
"--report is currently an experimental option. "
"The output format may change in a future release "
"without prior warning."
)
report = InstallationReport(requirement_set.requirements_to_install)
if options.json_report_file == "-":
print_json(data=report.to_dict())
else:
with open(options.json_report_file, "w", encoding="utf-8") as f:
json.dump(report.to_dict(), f, indent=2, ensure_ascii=False)
if options.dry_run:
would_install_items = sorted(
(r.metadata["name"], r.metadata["version"])
for r in requirement_set.requirements_to_install
)
if would_install_items:
write_output(
"Would install %s",
" ".join("-".join(item) for item in would_install_items),
)
return SUCCESS
try:
pip_req = requirement_set.get_requirement("pip")
except KeyError:
modifying_pip = False
else:
# If we're not replacing an already installed pip,
# we're not modifying it.
modifying_pip = pip_req.satisfied_by is None
protect_pip_from_modification_on_windows(modifying_pip=modifying_pip)
check_bdist_wheel_allowed = get_check_bdist_wheel_allowed(
finder.format_control
)
reqs_to_build = [
r
for r in requirement_set.requirements.values()
if should_build_for_install_command(r, check_bdist_wheel_allowed)
]
_, build_failures = build(
reqs_to_build,
wheel_cache=wheel_cache,
verify=True,
build_options=[],
global_options=global_options,
)
# If we're using PEP 517, we cannot do a legacy setup.py install
# so we fail here.
pep517_build_failure_names: List[str] = [
r.name for r in build_failures if r.use_pep517 # type: ignore
]
if pep517_build_failure_names:
raise InstallationError(
"Could not build wheels for {}, which is required to "
"install pyproject.toml-based projects".format(
", ".join(pep517_build_failure_names)
)
)
# For now, we just warn about failures building legacy
# requirements, as we'll fall through to a setup.py install for
# those.
for r in build_failures:
if not r.use_pep517:
r.legacy_install_reason = LegacyInstallReasonFailedBdistWheel
to_install = resolver.get_installation_order(requirement_set)
# Check for conflicts in the package set we're installing.
conflicts: Optional[ConflictDetails] = None
should_warn_about_conflicts = (
not options.ignore_dependencies and options.warn_about_conflicts
)
if should_warn_about_conflicts:
conflicts = self._determine_conflicts(to_install)
# Don't warn about script install locations if
# --target or --prefix has been specified
warn_script_location = options.warn_script_location
if options.target_dir or options.prefix_path:
warn_script_location = False
installed = install_given_reqs(
to_install,
install_options,
global_options,
root=options.root_path,
home=target_temp_dir_path,
prefix=options.prefix_path,
warn_script_location=warn_script_location,
use_user_site=options.use_user_site,
pycompile=options.compile,
)
lib_locations = get_lib_location_guesses(
user=options.use_user_site,
home=target_temp_dir_path,
root=options.root_path,
prefix=options.prefix_path,
isolated=options.isolated_mode,
)
env = get_environment(lib_locations)
installed.sort(key=operator.attrgetter("name"))
items = []
for result in installed:
item = result.name
try:
installed_dist = env.get_distribution(item)
if installed_dist is not None:
item = f"{item}-{installed_dist.version}"
except Exception:
pass
items.append(item)
if conflicts is not None:
self._warn_about_conflicts(
conflicts,
resolver_variant=self.determine_resolver_variant(options),
)
installed_desc = " ".join(items)
if installed_desc:
write_output(
"Successfully installed %s",
installed_desc,
)
except OSError as error:
show_traceback = self.verbosity >= 1
message = create_os_error_message(
error,
show_traceback,
options.use_user_site,
)
logger.error(message, exc_info=show_traceback) # noqa
return ERROR
if options.target_dir:
assert target_temp_dir
self._handle_target_dir(
options.target_dir, target_temp_dir, options.upgrade
)
if options.root_user_action == "warn":
warn_if_run_as_root()
return SUCCESS
def _handle_target_dir(
self, target_dir: str, target_temp_dir: TempDirectory, upgrade: bool
) -> None:
ensure_dir(target_dir)
# Checking both purelib and platlib directories for installed
# packages to be moved to target directory
lib_dir_list = []
# Checking both purelib and platlib directories for installed
# packages to be moved to target directory
scheme = get_scheme("", home=target_temp_dir.path)
purelib_dir = scheme.purelib
platlib_dir = scheme.platlib
data_dir = scheme.data
if os.path.exists(purelib_dir):
lib_dir_list.append(purelib_dir)
if os.path.exists(platlib_dir) and platlib_dir != purelib_dir:
lib_dir_list.append(platlib_dir)
if os.path.exists(data_dir):
lib_dir_list.append(data_dir)
for lib_dir in lib_dir_list:
for item in os.listdir(lib_dir):
if lib_dir == data_dir:
ddir = os.path.join(data_dir, item)
if any(s.startswith(ddir) for s in lib_dir_list[:-1]):
continue
target_item_dir = os.path.join(target_dir, item)
if os.path.exists(target_item_dir):
if not upgrade:
logger.warning(
"Target directory %s already exists. Specify "
"--upgrade to force replacement.",
target_item_dir,
)
continue
if os.path.islink(target_item_dir):
logger.warning(
"Target directory %s already exists and is "
"a link. pip will not automatically replace "
"links, please remove if replacement is "
"desired.",
target_item_dir,
)
continue
if os.path.isdir(target_item_dir):
shutil.rmtree(target_item_dir)
else:
os.remove(target_item_dir)
shutil.move(os.path.join(lib_dir, item), target_item_dir)
def _determine_conflicts(
self, to_install: List[InstallRequirement]
) -> Optional[ConflictDetails]:
try:
return check_install_conflicts(to_install)
except Exception:
logger.exception(
"Error while checking for conflicts. Please file an issue on "
"pip's issue tracker: https://github.com/pypa/pip/issues/new"
)
return None
def _warn_about_conflicts(
self, conflict_details: ConflictDetails, resolver_variant: str
) -> None:
package_set, (missing, conflicting) = conflict_details
if not missing and not conflicting:
return
parts: List[str] = []
if resolver_variant == "legacy":
parts.append(
"pip's legacy dependency resolver does not consider dependency "
"conflicts when selecting packages. This behaviour is the "
"source of the following dependency conflicts."
)
else:
assert resolver_variant == "2020-resolver"
parts.append(
"pip's dependency resolver does not currently take into account "
"all the packages that are installed. This behaviour is the "
"source of the following dependency conflicts."
)
# NOTE: There is some duplication here, with commands/check.py
for project_name in missing:
version = package_set[project_name][0]
for dependency in missing[project_name]:
message = (
"{name} {version} requires {requirement}, "
"which is not installed."
).format(
name=project_name,
version=version,
requirement=dependency[1],
)
parts.append(message)
for project_name in conflicting:
version = package_set[project_name][0]
for dep_name, dep_version, req in conflicting[project_name]:
message = (
"{name} {version} requires {requirement}, but {you} have "
"{dep_name} {dep_version} which is incompatible."
).format(
name=project_name,
version=version,
requirement=req,
dep_name=dep_name,
dep_version=dep_version,
you=("you" if resolver_variant == "2020-resolver" else "you'll"),
)
parts.append(message)
logger.critical("\n".join(parts))
def get_lib_location_guesses(
user: bool = False,
home: Optional[str] = None,
root: Optional[str] = None,
isolated: bool = False,
prefix: Optional[str] = None,
) -> List[str]:
scheme = get_scheme(
"",
user=user,
home=home,
root=root,
isolated=isolated,
prefix=prefix,
)
return [scheme.purelib, scheme.platlib]
def site_packages_writable(root: Optional[str], isolated: bool) -> bool:
return all(
test_writable_dir(d)
for d in set(get_lib_location_guesses(root=root, isolated=isolated))
)
def decide_user_install(
use_user_site: Optional[bool],
prefix_path: Optional[str] = None,
target_dir: Optional[str] = None,
root_path: Optional[str] = None,
isolated_mode: bool = False,
) -> bool:
"""Determine whether to do a user install based on the input options.
If use_user_site is False, no additional checks are done.
If use_user_site is True, it is checked for compatibility with other
options.
If use_user_site is None, the default behaviour depends on the environment,
which is provided by the other arguments.
"""
# In some cases (config from tox), use_user_site can be set to an integer
# rather than a bool, which 'use_user_site is False' wouldn't catch.
if (use_user_site is not None) and (not use_user_site):
logger.debug("Non-user install by explicit request")
return False
if use_user_site:
if prefix_path:
raise CommandError(
"Can not combine '--user' and '--prefix' as they imply "
"different installation locations"
)
if virtualenv_no_global():
raise InstallationError(
"Can not perform a '--user' install. User site-packages "
"are not visible in this virtualenv."
)
logger.debug("User install by explicit request")
return True
# If we are here, user installs have not been explicitly requested/avoided
assert use_user_site is None
# user install incompatible with --prefix/--target
if prefix_path or target_dir:
logger.debug("Non-user install due to --prefix or --target option")
return False
# If user installs are not enabled, choose a non-user install
if not site.ENABLE_USER_SITE:
logger.debug("Non-user install because user site-packages disabled")
return False
# If we have permission for a non-user install, do that,
# otherwise do a user install.
if site_packages_writable(root=root_path, isolated=isolated_mode):
logger.debug("Non-user install because site-packages writeable")
return False
logger.info(
"Defaulting to user installation because normal site-packages "
"is not writeable"
)
return True
def reject_location_related_install_options(
requirements: List[InstallRequirement], options: Optional[List[str]]
) -> None:
"""If any location-changing --install-option arguments were passed for
requirements or on the command-line, then show a deprecation warning.
"""
def format_options(option_names: Iterable[str]) -> List[str]:
return ["--{}".format(name.replace("_", "-")) for name in option_names]
offenders = []
for requirement in requirements:
install_options = requirement.install_options
location_options = parse_distutils_args(install_options)
if location_options:
offenders.append(
"{!r} from {}".format(
format_options(location_options.keys()), requirement
)
)
if options:
location_options = parse_distutils_args(options)
if location_options:
offenders.append(
"{!r} from command line".format(format_options(location_options.keys()))
)
if not offenders:
return
raise CommandError(
"Location-changing options found in --install-option: {}."
" This is unsupported, use pip-level options like --user,"
" --prefix, --root, and --target instead.".format("; ".join(offenders))
)
def create_os_error_message(
error: OSError, show_traceback: bool, using_user_site: bool
) -> str:
"""Format an error message for an OSError
It may occur anytime during the execution of the install command.
"""
parts = []
# Mention the error if we are not going to show a traceback
parts.append("Could not install packages due to an OSError")
if not show_traceback:
parts.append(": ")
parts.append(str(error))
else:
parts.append(".")
# Spilt the error indication from a helper message (if any)
parts[-1] += "\n"
# Suggest useful actions to the user:
# (1) using user site-packages or (2) verifying the permissions
if error.errno == errno.EACCES:
user_option_part = "Consider using the `--user` option"
permissions_part = "Check the permissions"
if not running_under_virtualenv() and not using_user_site:
parts.extend(
[
user_option_part,
" or ",
permissions_part.lower(),
]
)
else:
parts.append(permissions_part)
parts.append(".\n")
# Suggest the user to enable Long Paths if path length is
# more than 260
if (
WINDOWS
and error.errno == errno.ENOENT
and error.filename
and len(error.filename) > 260
):
parts.append(
"HINT: This error might have occurred since "
"this system does not have Windows Long Path "
"support enabled. You can find information on "
"how to enable this at "
"https://pip.pypa.io/warnings/enable-long-paths\n"
)
return "".join(parts).strip() + "\n"

View File

@ -0,0 +1,365 @@
import json
import logging
from optparse import Values
from typing import TYPE_CHECKING, Generator, List, Optional, Sequence, Tuple, cast
from pip._vendor.packaging.utils import canonicalize_name
from pip._internal.cli import cmdoptions
from pip._internal.cli.req_command import IndexGroupCommand
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.exceptions import CommandError
from pip._internal.index.collector import LinkCollector
from pip._internal.index.package_finder import PackageFinder
from pip._internal.metadata import BaseDistribution, get_environment
from pip._internal.models.selection_prefs import SelectionPreferences
from pip._internal.network.session import PipSession
from pip._internal.utils.compat import stdlib_pkgs
from pip._internal.utils.misc import tabulate, write_output
if TYPE_CHECKING:
from pip._internal.metadata.base import DistributionVersion
class _DistWithLatestInfo(BaseDistribution):
"""Give the distribution object a couple of extra fields.
These will be populated during ``get_outdated()``. This is dirty but
makes the rest of the code much cleaner.
"""
latest_version: DistributionVersion
latest_filetype: str
_ProcessedDists = Sequence[_DistWithLatestInfo]
logger = logging.getLogger(__name__)
class ListCommand(IndexGroupCommand):
"""
List installed packages, including editables.
Packages are listed in a case-insensitive sorted order.
"""
ignore_require_venv = True
usage = """
%prog [options]"""
def add_options(self) -> None:
self.cmd_opts.add_option(
"-o",
"--outdated",
action="store_true",
default=False,
help="List outdated packages",
)
self.cmd_opts.add_option(
"-u",
"--uptodate",
action="store_true",
default=False,
help="List uptodate packages",
)
self.cmd_opts.add_option(
"-e",
"--editable",
action="store_true",
default=False,
help="List editable projects.",
)
self.cmd_opts.add_option(
"-l",
"--local",
action="store_true",
default=False,
help=(
"If in a virtualenv that has global access, do not list "
"globally-installed packages."
),
)
self.cmd_opts.add_option(
"--user",
dest="user",
action="store_true",
default=False,
help="Only output packages installed in user-site.",
)
self.cmd_opts.add_option(cmdoptions.list_path())
self.cmd_opts.add_option(
"--pre",
action="store_true",
default=False,
help=(
"Include pre-release and development versions. By default, "
"pip only finds stable versions."
),
)
self.cmd_opts.add_option(
"--format",
action="store",
dest="list_format",
default="columns",
choices=("columns", "freeze", "json"),
help="Select the output format among: columns (default), freeze, or json",
)
self.cmd_opts.add_option(
"--not-required",
action="store_true",
dest="not_required",
help="List packages that are not dependencies of installed packages.",
)
self.cmd_opts.add_option(
"--exclude-editable",
action="store_false",
dest="include_editable",
help="Exclude editable package from output.",
)
self.cmd_opts.add_option(
"--include-editable",
action="store_true",
dest="include_editable",
help="Include editable package from output.",
default=True,
)
self.cmd_opts.add_option(cmdoptions.list_exclude())
index_opts = cmdoptions.make_option_group(cmdoptions.index_group, self.parser)
self.parser.insert_option_group(0, index_opts)
self.parser.insert_option_group(0, self.cmd_opts)
def _build_package_finder(
self, options: Values, session: PipSession
) -> PackageFinder:
"""
Create a package finder appropriate to this list command.
"""
link_collector = LinkCollector.create(session, options=options)
# Pass allow_yanked=False to ignore yanked versions.
selection_prefs = SelectionPreferences(
allow_yanked=False,
allow_all_prereleases=options.pre,
)
return PackageFinder.create(
link_collector=link_collector,
selection_prefs=selection_prefs,
)
def run(self, options: Values, args: List[str]) -> int:
if options.outdated and options.uptodate:
raise CommandError("Options --outdated and --uptodate cannot be combined.")
if options.outdated and options.list_format == "freeze":
raise CommandError(
"List format 'freeze' can not be used with the --outdated option."
)
cmdoptions.check_list_path_option(options)
skip = set(stdlib_pkgs)
if options.excludes:
skip.update(canonicalize_name(n) for n in options.excludes)
packages: "_ProcessedDists" = [
cast("_DistWithLatestInfo", d)
for d in get_environment(options.path).iter_installed_distributions(
local_only=options.local,
user_only=options.user,
editables_only=options.editable,
include_editables=options.include_editable,
skip=skip,
)
]
# get_not_required must be called firstly in order to find and
# filter out all dependencies correctly. Otherwise a package
# can't be identified as requirement because some parent packages
# could be filtered out before.
if options.not_required:
packages = self.get_not_required(packages, options)
if options.outdated:
packages = self.get_outdated(packages, options)
elif options.uptodate:
packages = self.get_uptodate(packages, options)
self.output_package_listing(packages, options)
return SUCCESS
def get_outdated(
self, packages: "_ProcessedDists", options: Values
) -> "_ProcessedDists":
return [
dist
for dist in self.iter_packages_latest_infos(packages, options)
if dist.latest_version > dist.version
]
def get_uptodate(
self, packages: "_ProcessedDists", options: Values
) -> "_ProcessedDists":
return [
dist
for dist in self.iter_packages_latest_infos(packages, options)
if dist.latest_version == dist.version
]
def get_not_required(
self, packages: "_ProcessedDists", options: Values
) -> "_ProcessedDists":
dep_keys = {
canonicalize_name(dep.name)
for dist in packages
for dep in (dist.iter_dependencies() or ())
}
# Create a set to remove duplicate packages, and cast it to a list
# to keep the return type consistent with get_outdated and
# get_uptodate
return list({pkg for pkg in packages if pkg.canonical_name not in dep_keys})
def iter_packages_latest_infos(
self, packages: "_ProcessedDists", options: Values
) -> Generator["_DistWithLatestInfo", None, None]:
with self._build_session(options) as session:
finder = self._build_package_finder(options, session)
def latest_info(
dist: "_DistWithLatestInfo",
) -> Optional["_DistWithLatestInfo"]:
all_candidates = finder.find_all_candidates(dist.canonical_name)
if not options.pre:
# Remove prereleases
all_candidates = [
candidate
for candidate in all_candidates
if not candidate.version.is_prerelease
]
evaluator = finder.make_candidate_evaluator(
project_name=dist.canonical_name,
)
best_candidate = evaluator.sort_best_candidate(all_candidates)
if best_candidate is None:
return None
remote_version = best_candidate.version
if best_candidate.link.is_wheel:
typ = "wheel"
else:
typ = "sdist"
dist.latest_version = remote_version
dist.latest_filetype = typ
return dist
for dist in map(latest_info, packages):
if dist is not None:
yield dist
def output_package_listing(
self, packages: "_ProcessedDists", options: Values
) -> None:
packages = sorted(
packages,
key=lambda dist: dist.canonical_name,
)
if options.list_format == "columns" and packages:
data, header = format_for_columns(packages, options)
self.output_package_listing_columns(data, header)
elif options.list_format == "freeze":
for dist in packages:
if options.verbose >= 1:
write_output(
"%s==%s (%s)", dist.raw_name, dist.version, dist.location
)
else:
write_output("%s==%s", dist.raw_name, dist.version)
elif options.list_format == "json":
write_output(format_for_json(packages, options))
def output_package_listing_columns(
self, data: List[List[str]], header: List[str]
) -> None:
# insert the header first: we need to know the size of column names
if len(data) > 0:
data.insert(0, header)
pkg_strings, sizes = tabulate(data)
# Create and add a separator.
if len(data) > 0:
pkg_strings.insert(1, " ".join(map(lambda x: "-" * x, sizes)))
for val in pkg_strings:
write_output(val)
def format_for_columns(
pkgs: "_ProcessedDists", options: Values
) -> Tuple[List[List[str]], List[str]]:
"""
Convert the package data into something usable
by output_package_listing_columns.
"""
header = ["Package", "Version"]
running_outdated = options.outdated
if running_outdated:
header.extend(["Latest", "Type"])
has_editables = any(x.editable for x in pkgs)
if has_editables:
header.append("Editable project location")
if options.verbose >= 1:
header.append("Location")
if options.verbose >= 1:
header.append("Installer")
data = []
for proj in pkgs:
# if we're working on the 'outdated' list, separate out the
# latest_version and type
row = [proj.raw_name, str(proj.version)]
if running_outdated:
row.append(str(proj.latest_version))
row.append(proj.latest_filetype)
if has_editables:
row.append(proj.editable_project_location or "")
if options.verbose >= 1:
row.append(proj.location or "")
if options.verbose >= 1:
row.append(proj.installer)
data.append(row)
return data, header
def format_for_json(packages: "_ProcessedDists", options: Values) -> str:
data = []
for dist in packages:
info = {
"name": dist.raw_name,
"version": str(dist.version),
}
if options.verbose >= 1:
info["location"] = dist.location or ""
info["installer"] = dist.installer
if options.outdated:
info["latest_version"] = str(dist.latest_version)
info["latest_filetype"] = dist.latest_filetype
editable_project_location = dist.editable_project_location
if editable_project_location:
info["editable_project_location"] = editable_project_location
data.append(info)
return json.dumps(data)

View File

@ -0,0 +1,174 @@
import logging
import shutil
import sys
import textwrap
import xmlrpc.client
from collections import OrderedDict
from optparse import Values
from typing import TYPE_CHECKING, Dict, List, Optional
from pip._vendor.packaging.version import parse as parse_version
from pip._internal.cli.base_command import Command
from pip._internal.cli.req_command import SessionCommandMixin
from pip._internal.cli.status_codes import NO_MATCHES_FOUND, SUCCESS
from pip._internal.exceptions import CommandError
from pip._internal.metadata import get_default_environment
from pip._internal.models.index import PyPI
from pip._internal.network.xmlrpc import PipXmlrpcTransport
from pip._internal.utils.logging import indent_log
from pip._internal.utils.misc import write_output
if TYPE_CHECKING:
from typing import TypedDict
class TransformedHit(TypedDict):
name: str
summary: str
versions: List[str]
logger = logging.getLogger(__name__)
class SearchCommand(Command, SessionCommandMixin):
"""Search for PyPI packages whose name or summary contains <query>."""
usage = """
%prog [options] <query>"""
ignore_require_venv = True
def add_options(self) -> None:
self.cmd_opts.add_option(
"-i",
"--index",
dest="index",
metavar="URL",
default=PyPI.pypi_url,
help="Base URL of Python Package Index (default %default)",
)
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
if not args:
raise CommandError("Missing required argument (search query).")
query = args
pypi_hits = self.search(query, options)
hits = transform_hits(pypi_hits)
terminal_width = None
if sys.stdout.isatty():
terminal_width = shutil.get_terminal_size()[0]
print_results(hits, terminal_width=terminal_width)
if pypi_hits:
return SUCCESS
return NO_MATCHES_FOUND
def search(self, query: List[str], options: Values) -> List[Dict[str, str]]:
index_url = options.index
session = self.get_default_session(options)
transport = PipXmlrpcTransport(index_url, session)
pypi = xmlrpc.client.ServerProxy(index_url, transport)
try:
hits = pypi.search({"name": query, "summary": query}, "or")
except xmlrpc.client.Fault as fault:
message = "XMLRPC request failed [code: {code}]\n{string}".format(
code=fault.faultCode,
string=fault.faultString,
)
raise CommandError(message)
assert isinstance(hits, list)
return hits
def transform_hits(hits: List[Dict[str, str]]) -> List["TransformedHit"]:
"""
The list from pypi is really a list of versions. We want a list of
packages with the list of versions stored inline. This converts the
list from pypi into one we can use.
"""
packages: Dict[str, "TransformedHit"] = OrderedDict()
for hit in hits:
name = hit["name"]
summary = hit["summary"]
version = hit["version"]
if name not in packages.keys():
packages[name] = {
"name": name,
"summary": summary,
"versions": [version],
}
else:
packages[name]["versions"].append(version)
# if this is the highest version, replace summary and score
if version == highest_version(packages[name]["versions"]):
packages[name]["summary"] = summary
return list(packages.values())
def print_dist_installation_info(name: str, latest: str) -> None:
env = get_default_environment()
dist = env.get_distribution(name)
if dist is not None:
with indent_log():
if dist.version == latest:
write_output("INSTALLED: %s (latest)", dist.version)
else:
write_output("INSTALLED: %s", dist.version)
if parse_version(latest).pre:
write_output(
"LATEST: %s (pre-release; install"
" with `pip install --pre`)",
latest,
)
else:
write_output("LATEST: %s", latest)
def print_results(
hits: List["TransformedHit"],
name_column_width: Optional[int] = None,
terminal_width: Optional[int] = None,
) -> None:
if not hits:
return
if name_column_width is None:
name_column_width = (
max(
[
len(hit["name"]) + len(highest_version(hit.get("versions", ["-"])))
for hit in hits
]
)
+ 4
)
for hit in hits:
name = hit["name"]
summary = hit["summary"] or ""
latest = highest_version(hit.get("versions", ["-"]))
if terminal_width is not None:
target_width = terminal_width - name_column_width - 5
if target_width > 10:
# wrap and indent summary to fit terminal
summary_lines = textwrap.wrap(summary, target_width)
summary = ("\n" + " " * (name_column_width + 3)).join(summary_lines)
name_latest = f"{name} ({latest})"
line = f"{name_latest:{name_column_width}} - {summary}"
try:
write_output(line)
print_dist_installation_info(name, latest)
except UnicodeEncodeError:
pass
def highest_version(versions: List[str]) -> str:
return max(versions, key=parse_version)

View File

@ -0,0 +1,183 @@
import logging
from optparse import Values
from typing import Generator, Iterable, Iterator, List, NamedTuple, Optional
from pip._vendor.packaging.utils import canonicalize_name
from pip._internal.cli.base_command import Command
from pip._internal.cli.status_codes import ERROR, SUCCESS
from pip._internal.metadata import BaseDistribution, get_default_environment
from pip._internal.utils.misc import write_output
logger = logging.getLogger(__name__)
class ShowCommand(Command):
"""
Show information about one or more installed packages.
The output is in RFC-compliant mail header format.
"""
usage = """
%prog [options] <package> ..."""
ignore_require_venv = True
def add_options(self) -> None:
self.cmd_opts.add_option(
"-f",
"--files",
dest="files",
action="store_true",
default=False,
help="Show the full list of installed files for each package.",
)
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
if not args:
logger.warning("ERROR: Please provide a package name or names.")
return ERROR
query = args
results = search_packages_info(query)
if not print_results(
results, list_files=options.files, verbose=options.verbose
):
return ERROR
return SUCCESS
class _PackageInfo(NamedTuple):
name: str
version: str
location: str
requires: List[str]
required_by: List[str]
installer: str
metadata_version: str
classifiers: List[str]
summary: str
homepage: str
project_urls: List[str]
author: str
author_email: str
license: str
entry_points: List[str]
files: Optional[List[str]]
def search_packages_info(query: List[str]) -> Generator[_PackageInfo, None, None]:
"""
Gather details from installed distributions. Print distribution name,
version, location, and installed files. Installed files requires a
pip generated 'installed-files.txt' in the distributions '.egg-info'
directory.
"""
env = get_default_environment()
installed = {dist.canonical_name: dist for dist in env.iter_all_distributions()}
query_names = [canonicalize_name(name) for name in query]
missing = sorted(
[name for name, pkg in zip(query, query_names) if pkg not in installed]
)
if missing:
logger.warning("Package(s) not found: %s", ", ".join(missing))
def _get_requiring_packages(current_dist: BaseDistribution) -> Iterator[str]:
return (
dist.metadata["Name"] or "UNKNOWN"
for dist in installed.values()
if current_dist.canonical_name
in {canonicalize_name(d.name) for d in dist.iter_dependencies()}
)
for query_name in query_names:
try:
dist = installed[query_name]
except KeyError:
continue
requires = sorted((req.name for req in dist.iter_dependencies()), key=str.lower)
required_by = sorted(_get_requiring_packages(dist), key=str.lower)
try:
entry_points_text = dist.read_text("entry_points.txt")
entry_points = entry_points_text.splitlines(keepends=False)
except FileNotFoundError:
entry_points = []
files_iter = dist.iter_declared_entries()
if files_iter is None:
files: Optional[List[str]] = None
else:
files = sorted(files_iter)
metadata = dist.metadata
yield _PackageInfo(
name=dist.raw_name,
version=str(dist.version),
location=dist.location or "",
requires=requires,
required_by=required_by,
installer=dist.installer,
metadata_version=dist.metadata_version or "",
classifiers=metadata.get_all("Classifier", []),
summary=metadata.get("Summary", ""),
homepage=metadata.get("Home-page", ""),
project_urls=metadata.get_all("Project-URL", []),
author=metadata.get("Author", ""),
author_email=metadata.get("Author-email", ""),
license=metadata.get("License", ""),
entry_points=entry_points,
files=files,
)
def print_results(
distributions: Iterable[_PackageInfo],
list_files: bool,
verbose: bool,
) -> bool:
"""
Print the information from installed distributions found.
"""
results_printed = False
for i, dist in enumerate(distributions):
results_printed = True
if i > 0:
write_output("---")
write_output("Name: %s", dist.name)
write_output("Version: %s", dist.version)
write_output("Summary: %s", dist.summary)
write_output("Home-page: %s", dist.homepage)
write_output("Author: %s", dist.author)
write_output("Author-email: %s", dist.author_email)
write_output("License: %s", dist.license)
write_output("Location: %s", dist.location)
write_output("Requires: %s", ", ".join(dist.requires))
write_output("Required-by: %s", ", ".join(dist.required_by))
if verbose:
write_output("Metadata-Version: %s", dist.metadata_version)
write_output("Installer: %s", dist.installer)
write_output("Classifiers:")
for classifier in dist.classifiers:
write_output(" %s", classifier)
write_output("Entry-points:")
for entry in dist.entry_points:
write_output(" %s", entry.strip())
write_output("Project-URLs:")
for project_url in dist.project_urls:
write_output(" %s", project_url)
if list_files:
write_output("Files:")
if dist.files is None:
write_output("Cannot locate RECORD or installed-files.txt")
else:
for line in dist.files:
write_output(" %s", line.strip())
return results_printed

View File

@ -0,0 +1,106 @@
import logging
from optparse import Values
from typing import List
from pip._vendor.packaging.utils import canonicalize_name
from pip._internal.cli import cmdoptions
from pip._internal.cli.base_command import Command
from pip._internal.cli.req_command import SessionCommandMixin, warn_if_run_as_root
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.exceptions import InstallationError
from pip._internal.req import parse_requirements
from pip._internal.req.constructors import (
install_req_from_line,
install_req_from_parsed_requirement,
)
from pip._internal.utils.misc import protect_pip_from_modification_on_windows
logger = logging.getLogger(__name__)
class UninstallCommand(Command, SessionCommandMixin):
"""
Uninstall packages.
pip is able to uninstall most installed packages. Known exceptions are:
- Pure distutils packages installed with ``python setup.py install``, which
leave behind no metadata to determine what files were installed.
- Script wrappers installed by ``python setup.py develop``.
"""
usage = """
%prog [options] <package> ...
%prog [options] -r <requirements file> ..."""
def add_options(self) -> None:
self.cmd_opts.add_option(
"-r",
"--requirement",
dest="requirements",
action="append",
default=[],
metavar="file",
help=(
"Uninstall all the packages listed in the given requirements "
"file. This option can be used multiple times."
),
)
self.cmd_opts.add_option(
"-y",
"--yes",
dest="yes",
action="store_true",
help="Don't ask for confirmation of uninstall deletions.",
)
self.cmd_opts.add_option(cmdoptions.root_user_action())
self.parser.insert_option_group(0, self.cmd_opts)
def run(self, options: Values, args: List[str]) -> int:
session = self.get_default_session(options)
reqs_to_uninstall = {}
for name in args:
req = install_req_from_line(
name,
isolated=options.isolated_mode,
)
if req.name:
reqs_to_uninstall[canonicalize_name(req.name)] = req
else:
logger.warning(
"Invalid requirement: %r ignored -"
" the uninstall command expects named"
" requirements.",
name,
)
for filename in options.requirements:
for parsed_req in parse_requirements(
filename, options=options, session=session
):
req = install_req_from_parsed_requirement(
parsed_req, isolated=options.isolated_mode
)
if req.name:
reqs_to_uninstall[canonicalize_name(req.name)] = req
if not reqs_to_uninstall:
raise InstallationError(
f"You must give at least one requirement to {self.name} (see "
f'"pip help {self.name}")'
)
protect_pip_from_modification_on_windows(
modifying_pip="pip" in reqs_to_uninstall
)
for req in reqs_to_uninstall.values():
uninstall_pathset = req.uninstall(
auto_confirm=options.yes,
verbose=self.verbosity > 0,
)
if uninstall_pathset:
uninstall_pathset.commit()
if options.root_user_action == "warn":
warn_if_run_as_root()
return SUCCESS

View File

@ -0,0 +1,203 @@
import logging
import os
import shutil
from optparse import Values
from typing import List
from pip._internal.cache import WheelCache
from pip._internal.cli import cmdoptions
from pip._internal.cli.req_command import RequirementCommand, with_cleanup
from pip._internal.cli.status_codes import SUCCESS
from pip._internal.exceptions import CommandError
from pip._internal.operations.build.build_tracker import get_build_tracker
from pip._internal.req.req_install import (
InstallRequirement,
LegacySetupPyOptionsCheckMode,
check_legacy_setup_py_options,
)
from pip._internal.utils.deprecation import deprecated
from pip._internal.utils.misc import ensure_dir, normalize_path
from pip._internal.utils.temp_dir import TempDirectory
from pip._internal.wheel_builder import build, should_build_for_wheel_command
logger = logging.getLogger(__name__)
class WheelCommand(RequirementCommand):
"""
Build Wheel archives for your requirements and dependencies.
Wheel is a built-package format, and offers the advantage of not
recompiling your software during every install. For more details, see the
wheel docs: https://wheel.readthedocs.io/en/latest/
'pip wheel' uses the build system interface as described here:
https://pip.pypa.io/en/stable/reference/build-system/
"""
usage = """
%prog [options] <requirement specifier> ...
%prog [options] -r <requirements file> ...
%prog [options] [-e] <vcs project url> ...
%prog [options] [-e] <local project path> ...
%prog [options] <archive url/path> ..."""
def add_options(self) -> None:
self.cmd_opts.add_option(
"-w",
"--wheel-dir",
dest="wheel_dir",
metavar="dir",
default=os.curdir,
help=(
"Build wheels into <dir>, where the default is the "
"current working directory."
),
)
self.cmd_opts.add_option(cmdoptions.no_binary())
self.cmd_opts.add_option(cmdoptions.only_binary())
self.cmd_opts.add_option(cmdoptions.prefer_binary())
self.cmd_opts.add_option(cmdoptions.no_build_isolation())
self.cmd_opts.add_option(cmdoptions.use_pep517())
self.cmd_opts.add_option(cmdoptions.no_use_pep517())
self.cmd_opts.add_option(cmdoptions.check_build_deps())
self.cmd_opts.add_option(cmdoptions.constraints())
self.cmd_opts.add_option(cmdoptions.editable())
self.cmd_opts.add_option(cmdoptions.requirements())
self.cmd_opts.add_option(cmdoptions.src())
self.cmd_opts.add_option(cmdoptions.ignore_requires_python())
self.cmd_opts.add_option(cmdoptions.no_deps())
self.cmd_opts.add_option(cmdoptions.progress_bar())
self.cmd_opts.add_option(
"--no-verify",
dest="no_verify",
action="store_true",
default=False,
help="Don't verify if built wheel is valid.",
)
self.cmd_opts.add_option(cmdoptions.config_settings())
self.cmd_opts.add_option(cmdoptions.build_options())
self.cmd_opts.add_option(cmdoptions.global_options())
self.cmd_opts.add_option(
"--pre",
action="store_true",
default=False,
help=(
"Include pre-release and development versions. By default, "
"pip only finds stable versions."
),
)
self.cmd_opts.add_option(cmdoptions.require_hashes())
index_opts = cmdoptions.make_option_group(
cmdoptions.index_group,
self.parser,
)
self.parser.insert_option_group(0, index_opts)
self.parser.insert_option_group(0, self.cmd_opts)
@with_cleanup
def run(self, options: Values, args: List[str]) -> int:
session = self.get_default_session(options)
finder = self._build_package_finder(options, session)
wheel_cache = WheelCache(options.cache_dir, options.format_control)
options.wheel_dir = normalize_path(options.wheel_dir)
ensure_dir(options.wheel_dir)
build_tracker = self.enter_context(get_build_tracker())
directory = TempDirectory(
delete=not options.no_clean,
kind="wheel",
globally_managed=True,
)
reqs = self.get_requirements(args, options, finder, session)
check_legacy_setup_py_options(
options, reqs, LegacySetupPyOptionsCheckMode.WHEEL
)
if "no-binary-enable-wheel-cache" in options.features_enabled:
# TODO: remove format_control from WheelCache when the deprecation cycle
# is over
wheel_cache = WheelCache(options.cache_dir)
else:
if options.format_control.no_binary:
deprecated(
reason=(
"--no-binary currently disables reading from "
"the cache of locally built wheels. In the future "
"--no-binary will not influence the wheel cache."
),
replacement="to use the --no-cache-dir option",
feature_flag="no-binary-enable-wheel-cache",
issue=11453,
gone_in="23.1",
)
wheel_cache = WheelCache(options.cache_dir, options.format_control)
preparer = self.make_requirement_preparer(
temp_build_dir=directory,
options=options,
build_tracker=build_tracker,
session=session,
finder=finder,
download_dir=options.wheel_dir,
use_user_site=False,
verbosity=self.verbosity,
)
resolver = self.make_resolver(
preparer=preparer,
finder=finder,
options=options,
wheel_cache=wheel_cache,
ignore_requires_python=options.ignore_requires_python,
use_pep517=options.use_pep517,
)
self.trace_basic_info(finder)
requirement_set = resolver.resolve(reqs, check_supported_wheels=True)
reqs_to_build: List[InstallRequirement] = []
for req in requirement_set.requirements.values():
if req.is_wheel:
preparer.save_linked_requirement(req)
elif should_build_for_wheel_command(req):
reqs_to_build.append(req)
# build wheels
build_successes, build_failures = build(
reqs_to_build,
wheel_cache=wheel_cache,
verify=(not options.no_verify),
build_options=options.build_options or [],
global_options=options.global_options or [],
)
for req in build_successes:
assert req.link and req.link.is_wheel
assert req.local_file_path
# copy from cache to target directory
try:
shutil.copy(req.local_file_path, options.wheel_dir)
except OSError as e:
logger.warning(
"Building wheel for %s failed: %s",
req.name,
e,
)
build_failures.append(req)
if len(build_failures) != 0:
raise CommandError("Failed to build one or more wheels")
return SUCCESS

View File

@ -0,0 +1,374 @@
"""Configuration management setup
Some terminology:
- name
As written in config files.
- value
Value associated with a name
- key
Name combined with it's section (section.name)
- variant
A single word describing where the configuration key-value pair came from
"""
import configparser
import locale
import os
import sys
from typing import Any, Dict, Iterable, List, NewType, Optional, Tuple
from pip._internal.exceptions import (
ConfigurationError,
ConfigurationFileCouldNotBeLoaded,
)
from pip._internal.utils import appdirs
from pip._internal.utils.compat import WINDOWS
from pip._internal.utils.logging import getLogger
from pip._internal.utils.misc import ensure_dir, enum
RawConfigParser = configparser.RawConfigParser # Shorthand
Kind = NewType("Kind", str)
CONFIG_BASENAME = "pip.ini" if WINDOWS else "pip.conf"
ENV_NAMES_IGNORED = "version", "help"
# The kinds of configurations there are.
kinds = enum(
USER="user", # User Specific
GLOBAL="global", # System Wide
SITE="site", # [Virtual] Environment Specific
ENV="env", # from PIP_CONFIG_FILE
ENV_VAR="env-var", # from Environment Variables
)
OVERRIDE_ORDER = kinds.GLOBAL, kinds.USER, kinds.SITE, kinds.ENV, kinds.ENV_VAR
VALID_LOAD_ONLY = kinds.USER, kinds.GLOBAL, kinds.SITE
logger = getLogger(__name__)
# NOTE: Maybe use the optionx attribute to normalize keynames.
def _normalize_name(name: str) -> str:
"""Make a name consistent regardless of source (environment or file)"""
name = name.lower().replace("_", "-")
if name.startswith("--"):
name = name[2:] # only prefer long opts
return name
def _disassemble_key(name: str) -> List[str]:
if "." not in name:
error_message = (
"Key does not contain dot separated section and key. "
"Perhaps you wanted to use 'global.{}' instead?"
).format(name)
raise ConfigurationError(error_message)
return name.split(".", 1)
def get_configuration_files() -> Dict[Kind, List[str]]:
global_config_files = [
os.path.join(path, CONFIG_BASENAME) for path in appdirs.site_config_dirs("pip")
]
site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME)
legacy_config_file = os.path.join(
os.path.expanduser("~"),
"pip" if WINDOWS else ".pip",
CONFIG_BASENAME,
)
new_config_file = os.path.join(appdirs.user_config_dir("pip"), CONFIG_BASENAME)
return {
kinds.GLOBAL: global_config_files,
kinds.SITE: [site_config_file],
kinds.USER: [legacy_config_file, new_config_file],
}
class Configuration:
"""Handles management of configuration.
Provides an interface to accessing and managing configuration files.
This class converts provides an API that takes "section.key-name" style
keys and stores the value associated with it as "key-name" under the
section "section".
This allows for a clean interface wherein the both the section and the
key-name are preserved in an easy to manage form in the configuration files
and the data stored is also nice.
"""
def __init__(self, isolated: bool, load_only: Optional[Kind] = None) -> None:
super().__init__()
if load_only is not None and load_only not in VALID_LOAD_ONLY:
raise ConfigurationError(
"Got invalid value for load_only - should be one of {}".format(
", ".join(map(repr, VALID_LOAD_ONLY))
)
)
self.isolated = isolated
self.load_only = load_only
# Because we keep track of where we got the data from
self._parsers: Dict[Kind, List[Tuple[str, RawConfigParser]]] = {
variant: [] for variant in OVERRIDE_ORDER
}
self._config: Dict[Kind, Dict[str, Any]] = {
variant: {} for variant in OVERRIDE_ORDER
}
self._modified_parsers: List[Tuple[str, RawConfigParser]] = []
def load(self) -> None:
"""Loads configuration from configuration files and environment"""
self._load_config_files()
if not self.isolated:
self._load_environment_vars()
def get_file_to_edit(self) -> Optional[str]:
"""Returns the file with highest priority in configuration"""
assert self.load_only is not None, "Need to be specified a file to be editing"
try:
return self._get_parser_to_modify()[0]
except IndexError:
return None
def items(self) -> Iterable[Tuple[str, Any]]:
"""Returns key-value pairs like dict.items() representing the loaded
configuration
"""
return self._dictionary.items()
def get_value(self, key: str) -> Any:
"""Get a value from the configuration."""
orig_key = key
key = _normalize_name(key)
try:
return self._dictionary[key]
except KeyError:
# disassembling triggers a more useful error message than simply
# "No such key" in the case that the key isn't in the form command.option
_disassemble_key(key)
raise ConfigurationError(f"No such key - {orig_key}")
def set_value(self, key: str, value: Any) -> None:
"""Modify a value in the configuration."""
key = _normalize_name(key)
self._ensure_have_load_only()
assert self.load_only
fname, parser = self._get_parser_to_modify()
if parser is not None:
section, name = _disassemble_key(key)
# Modify the parser and the configuration
if not parser.has_section(section):
parser.add_section(section)
parser.set(section, name, value)
self._config[self.load_only][key] = value
self._mark_as_modified(fname, parser)
def unset_value(self, key: str) -> None:
"""Unset a value in the configuration."""
orig_key = key
key = _normalize_name(key)
self._ensure_have_load_only()
assert self.load_only
if key not in self._config[self.load_only]:
raise ConfigurationError(f"No such key - {orig_key}")
fname, parser = self._get_parser_to_modify()
if parser is not None:
section, name = _disassemble_key(key)
if not (
parser.has_section(section) and parser.remove_option(section, name)
):
# The option was not removed.
raise ConfigurationError(
"Fatal Internal error [id=1]. Please report as a bug."
)
# The section may be empty after the option was removed.
if not parser.items(section):
parser.remove_section(section)
self._mark_as_modified(fname, parser)
del self._config[self.load_only][key]
def save(self) -> None:
"""Save the current in-memory state."""
self._ensure_have_load_only()
for fname, parser in self._modified_parsers:
logger.info("Writing to %s", fname)
# Ensure directory exists.
ensure_dir(os.path.dirname(fname))
with open(fname, "w") as f:
parser.write(f)
#
# Private routines
#
def _ensure_have_load_only(self) -> None:
if self.load_only is None:
raise ConfigurationError("Needed a specific file to be modifying.")
logger.debug("Will be working with %s variant only", self.load_only)
@property
def _dictionary(self) -> Dict[str, Any]:
"""A dictionary representing the loaded configuration."""
# NOTE: Dictionaries are not populated if not loaded. So, conditionals
# are not needed here.
retval = {}
for variant in OVERRIDE_ORDER:
retval.update(self._config[variant])
return retval
def _load_config_files(self) -> None:
"""Loads configuration from configuration files"""
config_files = dict(self.iter_config_files())
if config_files[kinds.ENV][0:1] == [os.devnull]:
logger.debug(
"Skipping loading configuration files due to "
"environment's PIP_CONFIG_FILE being os.devnull"
)
return
for variant, files in config_files.items():
for fname in files:
# If there's specific variant set in `load_only`, load only
# that variant, not the others.
if self.load_only is not None and variant != self.load_only:
logger.debug("Skipping file '%s' (variant: %s)", fname, variant)
continue
parser = self._load_file(variant, fname)
# Keeping track of the parsers used
self._parsers[variant].append((fname, parser))
def _load_file(self, variant: Kind, fname: str) -> RawConfigParser:
logger.verbose("For variant '%s', will try loading '%s'", variant, fname)
parser = self._construct_parser(fname)
for section in parser.sections():
items = parser.items(section)
self._config[variant].update(self._normalized_keys(section, items))
return parser
def _construct_parser(self, fname: str) -> RawConfigParser:
parser = configparser.RawConfigParser()
# If there is no such file, don't bother reading it but create the
# parser anyway, to hold the data.
# Doing this is useful when modifying and saving files, where we don't
# need to construct a parser.
if os.path.exists(fname):
locale_encoding = locale.getpreferredencoding(False)
try:
parser.read(fname, encoding=locale_encoding)
except UnicodeDecodeError:
# See https://github.com/pypa/pip/issues/4963
raise ConfigurationFileCouldNotBeLoaded(
reason=f"contains invalid {locale_encoding} characters",
fname=fname,
)
except configparser.Error as error:
# See https://github.com/pypa/pip/issues/4893
raise ConfigurationFileCouldNotBeLoaded(error=error)
return parser
def _load_environment_vars(self) -> None:
"""Loads configuration from environment variables"""
self._config[kinds.ENV_VAR].update(
self._normalized_keys(":env:", self.get_environ_vars())
)
def _normalized_keys(
self, section: str, items: Iterable[Tuple[str, Any]]
) -> Dict[str, Any]:
"""Normalizes items to construct a dictionary with normalized keys.
This routine is where the names become keys and are made the same
regardless of source - configuration files or environment.
"""
normalized = {}
for name, val in items:
key = section + "." + _normalize_name(name)
normalized[key] = val
return normalized
def get_environ_vars(self) -> Iterable[Tuple[str, str]]:
"""Returns a generator with all environmental vars with prefix PIP_"""
for key, val in os.environ.items():
if key.startswith("PIP_"):
name = key[4:].lower()
if name not in ENV_NAMES_IGNORED:
yield name, val
# XXX: This is patched in the tests.
def iter_config_files(self) -> Iterable[Tuple[Kind, List[str]]]:
"""Yields variant and configuration files associated with it.
This should be treated like items of a dictionary.
"""
# SMELL: Move the conditions out of this function
# environment variables have the lowest priority
config_file = os.environ.get("PIP_CONFIG_FILE", None)
if config_file is not None:
yield kinds.ENV, [config_file]
else:
yield kinds.ENV, []
config_files = get_configuration_files()
# at the base we have any global configuration
yield kinds.GLOBAL, config_files[kinds.GLOBAL]
# per-user configuration next
should_load_user_config = not self.isolated and not (
config_file and os.path.exists(config_file)
)
if should_load_user_config:
# The legacy config file is overridden by the new config file
yield kinds.USER, config_files[kinds.USER]
# finally virtualenv configuration first trumping others
yield kinds.SITE, config_files[kinds.SITE]
def get_values_in_config(self, variant: Kind) -> Dict[str, Any]:
"""Get values present in a config file"""
return self._config[variant]
def _get_parser_to_modify(self) -> Tuple[str, RawConfigParser]:
# Determine which parser to modify
assert self.load_only
parsers = self._parsers[self.load_only]
if not parsers:
# This should not happen if everything works correctly.
raise ConfigurationError(
"Fatal Internal error [id=2]. Please report as a bug."
)
# Use the highest priority parser.
return parsers[-1]
# XXX: This is patched in the tests.
def _mark_as_modified(self, fname: str, parser: RawConfigParser) -> None:
file_parser_tuple = (fname, parser)
if file_parser_tuple not in self._modified_parsers:
self._modified_parsers.append(file_parser_tuple)
def __repr__(self) -> str:
return f"{self.__class__.__name__}({self._dictionary!r})"

View File

@ -0,0 +1,21 @@
from pip._internal.distributions.base import AbstractDistribution
from pip._internal.distributions.sdist import SourceDistribution
from pip._internal.distributions.wheel import WheelDistribution
from pip._internal.req.req_install import InstallRequirement
def make_distribution_for_install_requirement(
install_req: InstallRequirement,
) -> AbstractDistribution:
"""Returns a Distribution for the given InstallRequirement"""
# Editable requirements will always be source distributions. They use the
# legacy logic until we create a modern standard for them.
if install_req.editable:
return SourceDistribution(install_req)
# If it's a wheel, it's a WheelDistribution
if install_req.is_wheel:
return WheelDistribution(install_req)
# Otherwise, a SourceDistribution
return SourceDistribution(install_req)

View File

@ -0,0 +1,39 @@
import abc
from pip._internal.index.package_finder import PackageFinder
from pip._internal.metadata.base import BaseDistribution
from pip._internal.req import InstallRequirement
class AbstractDistribution(metaclass=abc.ABCMeta):
"""A base class for handling installable artifacts.
The requirements for anything installable are as follows:
- we must be able to determine the requirement name
(or we can't correctly handle the non-upgrade case).
- for packages with setup requirements, we must also be able
to determine their requirements without installing additional
packages (for the same reason as run-time dependencies)
- we must be able to create a Distribution object exposing the
above metadata.
"""
def __init__(self, req: InstallRequirement) -> None:
super().__init__()
self.req = req
@abc.abstractmethod
def get_metadata_distribution(self) -> BaseDistribution:
raise NotImplementedError()
@abc.abstractmethod
def prepare_distribution_metadata(
self,
finder: PackageFinder,
build_isolation: bool,
check_build_deps: bool,
) -> None:
raise NotImplementedError()

View File

@ -0,0 +1,23 @@
from pip._internal.distributions.base import AbstractDistribution
from pip._internal.index.package_finder import PackageFinder
from pip._internal.metadata import BaseDistribution
class InstalledDistribution(AbstractDistribution):
"""Represents an installed package.
This does not need any preparation as the required information has already
been computed.
"""
def get_metadata_distribution(self) -> BaseDistribution:
assert self.req.satisfied_by is not None, "not actually installed"
return self.req.satisfied_by
def prepare_distribution_metadata(
self,
finder: PackageFinder,
build_isolation: bool,
check_build_deps: bool,
) -> None:
pass

View File

@ -0,0 +1,150 @@
import logging
from typing import Iterable, Set, Tuple
from pip._internal.build_env import BuildEnvironment
from pip._internal.distributions.base import AbstractDistribution
from pip._internal.exceptions import InstallationError
from pip._internal.index.package_finder import PackageFinder
from pip._internal.metadata import BaseDistribution
from pip._internal.utils.subprocess import runner_with_spinner_message
logger = logging.getLogger(__name__)
class SourceDistribution(AbstractDistribution):
"""Represents a source distribution.
The preparation step for these needs metadata for the packages to be
generated, either using PEP 517 or using the legacy `setup.py egg_info`.
"""
def get_metadata_distribution(self) -> BaseDistribution:
return self.req.get_dist()
def prepare_distribution_metadata(
self,
finder: PackageFinder,
build_isolation: bool,
check_build_deps: bool,
) -> None:
# Load pyproject.toml, to determine whether PEP 517 is to be used
self.req.load_pyproject_toml()
# Set up the build isolation, if this requirement should be isolated
should_isolate = self.req.use_pep517 and build_isolation
if should_isolate:
# Setup an isolated environment and install the build backend static
# requirements in it.
self._prepare_build_backend(finder)
# Check that if the requirement is editable, it either supports PEP 660 or
# has a setup.py or a setup.cfg. This cannot be done earlier because we need
# to setup the build backend to verify it supports build_editable, nor can
# it be done later, because we want to avoid installing build requirements
# needlessly. Doing it here also works around setuptools generating
# UNKNOWN.egg-info when running get_requires_for_build_wheel on a directory
# without setup.py nor setup.cfg.
self.req.isolated_editable_sanity_check()
# Install the dynamic build requirements.
self._install_build_reqs(finder)
# Check if the current environment provides build dependencies
should_check_deps = self.req.use_pep517 and check_build_deps
if should_check_deps:
pyproject_requires = self.req.pyproject_requires
assert pyproject_requires is not None
conflicting, missing = self.req.build_env.check_requirements(
pyproject_requires
)
if conflicting:
self._raise_conflicts("the backend dependencies", conflicting)
if missing:
self._raise_missing_reqs(missing)
self.req.prepare_metadata()
def _prepare_build_backend(self, finder: PackageFinder) -> None:
# Isolate in a BuildEnvironment and install the build-time
# requirements.
pyproject_requires = self.req.pyproject_requires
assert pyproject_requires is not None
self.req.build_env = BuildEnvironment()
self.req.build_env.install_requirements(
finder, pyproject_requires, "overlay", kind="build dependencies"
)
conflicting, missing = self.req.build_env.check_requirements(
self.req.requirements_to_check
)
if conflicting:
self._raise_conflicts("PEP 517/518 supported requirements", conflicting)
if missing:
logger.warning(
"Missing build requirements in pyproject.toml for %s.",
self.req,
)
logger.warning(
"The project does not specify a build backend, and "
"pip cannot fall back to setuptools without %s.",
" and ".join(map(repr, sorted(missing))),
)
def _get_build_requires_wheel(self) -> Iterable[str]:
with self.req.build_env:
runner = runner_with_spinner_message("Getting requirements to build wheel")
backend = self.req.pep517_backend
assert backend is not None
with backend.subprocess_runner(runner):
return backend.get_requires_for_build_wheel()
def _get_build_requires_editable(self) -> Iterable[str]:
with self.req.build_env:
runner = runner_with_spinner_message(
"Getting requirements to build editable"
)
backend = self.req.pep517_backend
assert backend is not None
with backend.subprocess_runner(runner):
return backend.get_requires_for_build_editable()
def _install_build_reqs(self, finder: PackageFinder) -> None:
# Install any extra build dependencies that the backend requests.
# This must be done in a second pass, as the pyproject.toml
# dependencies must be installed before we can call the backend.
if (
self.req.editable
and self.req.permit_editable_wheels
and self.req.supports_pyproject_editable()
):
build_reqs = self._get_build_requires_editable()
else:
build_reqs = self._get_build_requires_wheel()
conflicting, missing = self.req.build_env.check_requirements(build_reqs)
if conflicting:
self._raise_conflicts("the backend dependencies", conflicting)
self.req.build_env.install_requirements(
finder, missing, "normal", kind="backend dependencies"
)
def _raise_conflicts(
self, conflicting_with: str, conflicting_reqs: Set[Tuple[str, str]]
) -> None:
format_string = (
"Some build dependencies for {requirement} "
"conflict with {conflicting_with}: {description}."
)
error_message = format_string.format(
requirement=self.req,
conflicting_with=conflicting_with,
description=", ".join(
f"{installed} is incompatible with {wanted}"
for installed, wanted in sorted(conflicting_reqs)
),
)
raise InstallationError(error_message)
def _raise_missing_reqs(self, missing: Set[str]) -> None:
format_string = (
"Some build dependencies for {requirement} are missing: {missing}."
)
error_message = format_string.format(
requirement=self.req, missing=", ".join(map(repr, sorted(missing)))
)
raise InstallationError(error_message)

View File

@ -0,0 +1,34 @@
from pip._vendor.packaging.utils import canonicalize_name
from pip._internal.distributions.base import AbstractDistribution
from pip._internal.index.package_finder import PackageFinder
from pip._internal.metadata import (
BaseDistribution,
FilesystemWheel,
get_wheel_distribution,
)
class WheelDistribution(AbstractDistribution):
"""Represents a wheel distribution.
This does not need any preparation as wheels can be directly unpacked.
"""
def get_metadata_distribution(self) -> BaseDistribution:
"""Loads the metadata from the wheel file into memory and returns a
Distribution that uses it, not relying on the wheel file or
requirement.
"""
assert self.req.local_file_path, "Set as part of preparation during download"
assert self.req.name, "Wheels are never unnamed"
wheel = FilesystemWheel(self.req.local_file_path)
return get_wheel_distribution(wheel, canonicalize_name(self.req.name))
def prepare_distribution_metadata(
self,
finder: PackageFinder,
build_isolation: bool,
check_build_deps: bool,
) -> None:
pass

View File

@ -0,0 +1,660 @@
"""Exceptions used throughout package.
This module MUST NOT try to import from anything within `pip._internal` to
operate. This is expected to be importable from any/all files within the
subpackage and, thus, should not depend on them.
"""
import configparser
import re
from itertools import chain, groupby, repeat
from typing import TYPE_CHECKING, Dict, List, Optional, Union
from pip._vendor.requests.models import Request, Response
from pip._vendor.rich.console import Console, ConsoleOptions, RenderResult
from pip._vendor.rich.markup import escape
from pip._vendor.rich.text import Text
if TYPE_CHECKING:
from hashlib import _Hash
from typing import Literal
from pip._internal.metadata import BaseDistribution
from pip._internal.req.req_install import InstallRequirement
#
# Scaffolding
#
def _is_kebab_case(s: str) -> bool:
return re.match(r"^[a-z]+(-[a-z]+)*$", s) is not None
def _prefix_with_indent(
s: Union[Text, str],
console: Console,
*,
prefix: str,
indent: str,
) -> Text:
if isinstance(s, Text):
text = s
else:
text = console.render_str(s)
return console.render_str(prefix, overflow="ignore") + console.render_str(
f"\n{indent}", overflow="ignore"
).join(text.split(allow_blank=True))
class PipError(Exception):
"""The base pip error."""
class DiagnosticPipError(PipError):
"""An error, that presents diagnostic information to the user.
This contains a bunch of logic, to enable pretty presentation of our error
messages. Each error gets a unique reference. Each error can also include
additional context, a hint and/or a note -- which are presented with the
main error message in a consistent style.
This is adapted from the error output styling in `sphinx-theme-builder`.
"""
reference: str
def __init__(
self,
*,
kind: 'Literal["error", "warning"]' = "error",
reference: Optional[str] = None,
message: Union[str, Text],
context: Optional[Union[str, Text]],
hint_stmt: Optional[Union[str, Text]],
note_stmt: Optional[Union[str, Text]] = None,
link: Optional[str] = None,
) -> None:
# Ensure a proper reference is provided.
if reference is None:
assert hasattr(self, "reference"), "error reference not provided!"
reference = self.reference
assert _is_kebab_case(reference), "error reference must be kebab-case!"
self.kind = kind
self.reference = reference
self.message = message
self.context = context
self.note_stmt = note_stmt
self.hint_stmt = hint_stmt
self.link = link
super().__init__(f"<{self.__class__.__name__}: {self.reference}>")
def __repr__(self) -> str:
return (
f"<{self.__class__.__name__}("
f"reference={self.reference!r}, "
f"message={self.message!r}, "
f"context={self.context!r}, "
f"note_stmt={self.note_stmt!r}, "
f"hint_stmt={self.hint_stmt!r}"
")>"
)
def __rich_console__(
self,
console: Console,
options: ConsoleOptions,
) -> RenderResult:
colour = "red" if self.kind == "error" else "yellow"
yield f"[{colour} bold]{self.kind}[/]: [bold]{self.reference}[/]"
yield ""
if not options.ascii_only:
# Present the main message, with relevant context indented.
if self.context is not None:
yield _prefix_with_indent(
self.message,
console,
prefix=f"[{colour}]×[/] ",
indent=f"[{colour}]│[/] ",
)
yield _prefix_with_indent(
self.context,
console,
prefix=f"[{colour}]╰─>[/] ",
indent=f"[{colour}] [/] ",
)
else:
yield _prefix_with_indent(
self.message,
console,
prefix="[red]×[/] ",
indent=" ",
)
else:
yield self.message
if self.context is not None:
yield ""
yield self.context
if self.note_stmt is not None or self.hint_stmt is not None:
yield ""
if self.note_stmt is not None:
yield _prefix_with_indent(
self.note_stmt,
console,
prefix="[magenta bold]note[/]: ",
indent=" ",
)
if self.hint_stmt is not None:
yield _prefix_with_indent(
self.hint_stmt,
console,
prefix="[cyan bold]hint[/]: ",
indent=" ",
)
if self.link is not None:
yield ""
yield f"Link: {self.link}"
#
# Actual Errors
#
class ConfigurationError(PipError):
"""General exception in configuration"""
class InstallationError(PipError):
"""General exception during installation"""
class UninstallationError(PipError):
"""General exception during uninstallation"""
class MissingPyProjectBuildRequires(DiagnosticPipError):
"""Raised when pyproject.toml has `build-system`, but no `build-system.requires`."""
reference = "missing-pyproject-build-system-requires"
def __init__(self, *, package: str) -> None:
super().__init__(
message=f"Can not process {escape(package)}",
context=Text(
"This package has an invalid pyproject.toml file.\n"
"The [build-system] table is missing the mandatory `requires` key."
),
note_stmt="This is an issue with the package mentioned above, not pip.",
hint_stmt=Text("See PEP 518 for the detailed specification."),
)
class InvalidPyProjectBuildRequires(DiagnosticPipError):
"""Raised when pyproject.toml an invalid `build-system.requires`."""
reference = "invalid-pyproject-build-system-requires"
def __init__(self, *, package: str, reason: str) -> None:
super().__init__(
message=f"Can not process {escape(package)}",
context=Text(
"This package has an invalid `build-system.requires` key in "
f"pyproject.toml.\n{reason}"
),
note_stmt="This is an issue with the package mentioned above, not pip.",
hint_stmt=Text("See PEP 518 for the detailed specification."),
)
class NoneMetadataError(PipError):
"""Raised when accessing a Distribution's "METADATA" or "PKG-INFO".
This signifies an inconsistency, when the Distribution claims to have
the metadata file (if not, raise ``FileNotFoundError`` instead), but is
not actually able to produce its content. This may be due to permission
errors.
"""
def __init__(
self,
dist: "BaseDistribution",
metadata_name: str,
) -> None:
"""
:param dist: A Distribution object.
:param metadata_name: The name of the metadata being accessed
(can be "METADATA" or "PKG-INFO").
"""
self.dist = dist
self.metadata_name = metadata_name
def __str__(self) -> str:
# Use `dist` in the error message because its stringification
# includes more information, like the version and location.
return "None {} metadata found for distribution: {}".format(
self.metadata_name,
self.dist,
)
class UserInstallationInvalid(InstallationError):
"""A --user install is requested on an environment without user site."""
def __str__(self) -> str:
return "User base directory is not specified"
class InvalidSchemeCombination(InstallationError):
def __str__(self) -> str:
before = ", ".join(str(a) for a in self.args[:-1])
return f"Cannot set {before} and {self.args[-1]} together"
class DistributionNotFound(InstallationError):
"""Raised when a distribution cannot be found to satisfy a requirement"""
class RequirementsFileParseError(InstallationError):
"""Raised when a general error occurs parsing a requirements file line."""
class BestVersionAlreadyInstalled(PipError):
"""Raised when the most up-to-date version of a package is already
installed."""
class BadCommand(PipError):
"""Raised when virtualenv or a command is not found"""
class CommandError(PipError):
"""Raised when there is an error in command-line arguments"""
class PreviousBuildDirError(PipError):
"""Raised when there's a previous conflicting build directory"""
class NetworkConnectionError(PipError):
"""HTTP connection error"""
def __init__(
self,
error_msg: str,
response: Optional[Response] = None,
request: Optional[Request] = None,
) -> None:
"""
Initialize NetworkConnectionError with `request` and `response`
objects.
"""
self.response = response
self.request = request
self.error_msg = error_msg
if (
self.response is not None
and not self.request
and hasattr(response, "request")
):
self.request = self.response.request
super().__init__(error_msg, response, request)
def __str__(self) -> str:
return str(self.error_msg)
class InvalidWheelFilename(InstallationError):
"""Invalid wheel filename."""
class UnsupportedWheel(InstallationError):
"""Unsupported wheel."""
class InvalidWheel(InstallationError):
"""Invalid (e.g. corrupt) wheel."""
def __init__(self, location: str, name: str):
self.location = location
self.name = name
def __str__(self) -> str:
return f"Wheel '{self.name}' located at {self.location} is invalid."
class MetadataInconsistent(InstallationError):
"""Built metadata contains inconsistent information.
This is raised when the metadata contains values (e.g. name and version)
that do not match the information previously obtained from sdist filename,
user-supplied ``#egg=`` value, or an install requirement name.
"""
def __init__(
self, ireq: "InstallRequirement", field: str, f_val: str, m_val: str
) -> None:
self.ireq = ireq
self.field = field
self.f_val = f_val
self.m_val = m_val
def __str__(self) -> str:
return (
f"Requested {self.ireq} has inconsistent {self.field}: "
f"expected {self.f_val!r}, but metadata has {self.m_val!r}"
)
class LegacyInstallFailure(DiagnosticPipError):
"""Error occurred while executing `setup.py install`"""
reference = "legacy-install-failure"
def __init__(self, package_details: str) -> None:
super().__init__(
message="Encountered error while trying to install package.",
context=package_details,
hint_stmt="See above for output from the failure.",
note_stmt="This is an issue with the package mentioned above, not pip.",
)
class InstallationSubprocessError(DiagnosticPipError, InstallationError):
"""A subprocess call failed."""
reference = "subprocess-exited-with-error"
def __init__(
self,
*,
command_description: str,
exit_code: int,
output_lines: Optional[List[str]],
) -> None:
if output_lines is None:
output_prompt = Text("See above for output.")
else:
output_prompt = (
Text.from_markup(f"[red][{len(output_lines)} lines of output][/]\n")
+ Text("".join(output_lines))
+ Text.from_markup(R"[red]\[end of output][/]")
)
super().__init__(
message=(
f"[green]{escape(command_description)}[/] did not run successfully.\n"
f"exit code: {exit_code}"
),
context=output_prompt,
hint_stmt=None,
note_stmt=(
"This error originates from a subprocess, and is likely not a "
"problem with pip."
),
)
self.command_description = command_description
self.exit_code = exit_code
def __str__(self) -> str:
return f"{self.command_description} exited with {self.exit_code}"
class MetadataGenerationFailed(InstallationSubprocessError, InstallationError):
reference = "metadata-generation-failed"
def __init__(
self,
*,
package_details: str,
) -> None:
super(InstallationSubprocessError, self).__init__(
message="Encountered error while generating package metadata.",
context=escape(package_details),
hint_stmt="See above for details.",
note_stmt="This is an issue with the package mentioned above, not pip.",
)
def __str__(self) -> str:
return "metadata generation failed"
class HashErrors(InstallationError):
"""Multiple HashError instances rolled into one for reporting"""
def __init__(self) -> None:
self.errors: List["HashError"] = []
def append(self, error: "HashError") -> None:
self.errors.append(error)
def __str__(self) -> str:
lines = []
self.errors.sort(key=lambda e: e.order)
for cls, errors_of_cls in groupby(self.errors, lambda e: e.__class__):
lines.append(cls.head)
lines.extend(e.body() for e in errors_of_cls)
if lines:
return "\n".join(lines)
return ""
def __bool__(self) -> bool:
return bool(self.errors)
class HashError(InstallationError):
"""
A failure to verify a package against known-good hashes
:cvar order: An int sorting hash exception classes by difficulty of
recovery (lower being harder), so the user doesn't bother fretting
about unpinned packages when he has deeper issues, like VCS
dependencies, to deal with. Also keeps error reports in a
deterministic order.
:cvar head: A section heading for display above potentially many
exceptions of this kind
:ivar req: The InstallRequirement that triggered this error. This is
pasted on after the exception is instantiated, because it's not
typically available earlier.
"""
req: Optional["InstallRequirement"] = None
head = ""
order: int = -1
def body(self) -> str:
"""Return a summary of me for display under the heading.
This default implementation simply prints a description of the
triggering requirement.
:param req: The InstallRequirement that provoked this error, with
its link already populated by the resolver's _populate_link().
"""
return f" {self._requirement_name()}"
def __str__(self) -> str:
return f"{self.head}\n{self.body()}"
def _requirement_name(self) -> str:
"""Return a description of the requirement that triggered me.
This default implementation returns long description of the req, with
line numbers
"""
return str(self.req) if self.req else "unknown package"
class VcsHashUnsupported(HashError):
"""A hash was provided for a version-control-system-based requirement, but
we don't have a method for hashing those."""
order = 0
head = (
"Can't verify hashes for these requirements because we don't "
"have a way to hash version control repositories:"
)
class DirectoryUrlHashUnsupported(HashError):
"""A hash was provided for a version-control-system-based requirement, but
we don't have a method for hashing those."""
order = 1
head = (
"Can't verify hashes for these file:// requirements because they "
"point to directories:"
)
class HashMissing(HashError):
"""A hash was needed for a requirement but is absent."""
order = 2
head = (
"Hashes are required in --require-hashes mode, but they are "
"missing from some requirements. Here is a list of those "
"requirements along with the hashes their downloaded archives "
"actually had. Add lines like these to your requirements files to "
"prevent tampering. (If you did not enable --require-hashes "
"manually, note that it turns on automatically when any package "
"has a hash.)"
)
def __init__(self, gotten_hash: str) -> None:
"""
:param gotten_hash: The hash of the (possibly malicious) archive we
just downloaded
"""
self.gotten_hash = gotten_hash
def body(self) -> str:
# Dodge circular import.
from pip._internal.utils.hashes import FAVORITE_HASH
package = None
if self.req:
# In the case of URL-based requirements, display the original URL
# seen in the requirements file rather than the package name,
# so the output can be directly copied into the requirements file.
package = (
self.req.original_link
if self.req.original_link
# In case someone feeds something downright stupid
# to InstallRequirement's constructor.
else getattr(self.req, "req", None)
)
return " {} --hash={}:{}".format(
package or "unknown package", FAVORITE_HASH, self.gotten_hash
)
class HashUnpinned(HashError):
"""A requirement had a hash specified but was not pinned to a specific
version."""
order = 3
head = (
"In --require-hashes mode, all requirements must have their "
"versions pinned with ==. These do not:"
)
class HashMismatch(HashError):
"""
Distribution file hash values don't match.
:ivar package_name: The name of the package that triggered the hash
mismatch. Feel free to write to this after the exception is raise to
improve its error message.
"""
order = 4
head = (
"THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS "
"FILE. If you have updated the package versions, please update "
"the hashes. Otherwise, examine the package contents carefully; "
"someone may have tampered with them."
)
def __init__(self, allowed: Dict[str, List[str]], gots: Dict[str, "_Hash"]) -> None:
"""
:param allowed: A dict of algorithm names pointing to lists of allowed
hex digests
:param gots: A dict of algorithm names pointing to hashes we
actually got from the files under suspicion
"""
self.allowed = allowed
self.gots = gots
def body(self) -> str:
return " {}:\n{}".format(self._requirement_name(), self._hash_comparison())
def _hash_comparison(self) -> str:
"""
Return a comparison of actual and expected hash values.
Example::
Expected sha256 abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde
or 123451234512345123451234512345123451234512345
Got bcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdefbcdef
"""
def hash_then_or(hash_name: str) -> "chain[str]":
# For now, all the decent hashes have 6-char names, so we can get
# away with hard-coding space literals.
return chain([hash_name], repeat(" or"))
lines: List[str] = []
for hash_name, expecteds in self.allowed.items():
prefix = hash_then_or(hash_name)
lines.extend(
(" Expected {} {}".format(next(prefix), e)) for e in expecteds
)
lines.append(
" Got {}\n".format(self.gots[hash_name].hexdigest())
)
return "\n".join(lines)
class UnsupportedPythonVersion(InstallationError):
"""Unsupported python version according to Requires-Python package
metadata."""
class ConfigurationFileCouldNotBeLoaded(ConfigurationError):
"""When there are errors while loading a configuration file"""
def __init__(
self,
reason: str = "could not be loaded",
fname: Optional[str] = None,
error: Optional[configparser.Error] = None,
) -> None:
super().__init__(error)
self.reason = reason
self.fname = fname
self.error = error
def __str__(self) -> str:
if self.fname is not None:
message_part = f" in {self.fname}."
else:
assert self.error is not None
message_part = f".\n{self.error}\n"
return f"Configuration file {self.reason}{message_part}"

View File

@ -0,0 +1,2 @@
"""Index interaction code
"""

View File

@ -0,0 +1,505 @@
"""
The main purpose of this module is to expose LinkCollector.collect_sources().
"""
import collections
import email.message
import functools
import itertools
import json
import logging
import os
import urllib.parse
import urllib.request
from html.parser import HTMLParser
from optparse import Values
from typing import (
TYPE_CHECKING,
Callable,
Dict,
Iterable,
List,
MutableMapping,
NamedTuple,
Optional,
Sequence,
Tuple,
Union,
)
from pip._vendor import requests
from pip._vendor.requests import Response
from pip._vendor.requests.exceptions import RetryError, SSLError
from pip._internal.exceptions import NetworkConnectionError
from pip._internal.models.link import Link
from pip._internal.models.search_scope import SearchScope
from pip._internal.network.session import PipSession
from pip._internal.network.utils import raise_for_status
from pip._internal.utils.filetypes import is_archive_file
from pip._internal.utils.misc import redact_auth_from_url
from pip._internal.vcs import vcs
from .sources import CandidatesFromPage, LinkSource, build_source
if TYPE_CHECKING:
from typing import Protocol
else:
Protocol = object
logger = logging.getLogger(__name__)
ResponseHeaders = MutableMapping[str, str]
def _match_vcs_scheme(url: str) -> Optional[str]:
"""Look for VCS schemes in the URL.
Returns the matched VCS scheme, or None if there's no match.
"""
for scheme in vcs.schemes:
if url.lower().startswith(scheme) and url[len(scheme)] in "+:":
return scheme
return None
class _NotAPIContent(Exception):
def __init__(self, content_type: str, request_desc: str) -> None:
super().__init__(content_type, request_desc)
self.content_type = content_type
self.request_desc = request_desc
def _ensure_api_header(response: Response) -> None:
"""
Check the Content-Type header to ensure the response contains a Simple
API Response.
Raises `_NotAPIContent` if the content type is not a valid content-type.
"""
content_type = response.headers.get("Content-Type", "Unknown")
content_type_l = content_type.lower()
if content_type_l.startswith(
(
"text/html",
"application/vnd.pypi.simple.v1+html",
"application/vnd.pypi.simple.v1+json",
)
):
return
raise _NotAPIContent(content_type, response.request.method)
class _NotHTTP(Exception):
pass
def _ensure_api_response(url: str, session: PipSession) -> None:
"""
Send a HEAD request to the URL, and ensure the response contains a simple
API Response.
Raises `_NotHTTP` if the URL is not available for a HEAD request, or
`_NotAPIContent` if the content type is not a valid content type.
"""
scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url)
if scheme not in {"http", "https"}:
raise _NotHTTP()
resp = session.head(url, allow_redirects=True)
raise_for_status(resp)
_ensure_api_header(resp)
def _get_simple_response(url: str, session: PipSession) -> Response:
"""Access an Simple API response with GET, and return the response.
This consists of three parts:
1. If the URL looks suspiciously like an archive, send a HEAD first to
check the Content-Type is HTML or Simple API, to avoid downloading a
large file. Raise `_NotHTTP` if the content type cannot be determined, or
`_NotAPIContent` if it is not HTML or a Simple API.
2. Actually perform the request. Raise HTTP exceptions on network failures.
3. Check the Content-Type header to make sure we got a Simple API response,
and raise `_NotAPIContent` otherwise.
"""
if is_archive_file(Link(url).filename):
_ensure_api_response(url, session=session)
logger.debug("Getting page %s", redact_auth_from_url(url))
resp = session.get(
url,
headers={
"Accept": ", ".join(
[
"application/vnd.pypi.simple.v1+json",
"application/vnd.pypi.simple.v1+html; q=0.1",
"text/html; q=0.01",
]
),
# We don't want to blindly returned cached data for
# /simple/, because authors generally expecting that
# twine upload && pip install will function, but if
# they've done a pip install in the last ~10 minutes
# it won't. Thus by setting this to zero we will not
# blindly use any cached data, however the benefit of
# using max-age=0 instead of no-cache, is that we will
# still support conditional requests, so we will still
# minimize traffic sent in cases where the page hasn't
# changed at all, we will just always incur the round
# trip for the conditional GET now instead of only
# once per 10 minutes.
# For more information, please see pypa/pip#5670.
"Cache-Control": "max-age=0",
},
)
raise_for_status(resp)
# The check for archives above only works if the url ends with
# something that looks like an archive. However that is not a
# requirement of an url. Unless we issue a HEAD request on every
# url we cannot know ahead of time for sure if something is a
# Simple API response or not. However we can check after we've
# downloaded it.
_ensure_api_header(resp)
logger.debug(
"Fetched page %s as %s",
redact_auth_from_url(url),
resp.headers.get("Content-Type", "Unknown"),
)
return resp
def _get_encoding_from_headers(headers: ResponseHeaders) -> Optional[str]:
"""Determine if we have any encoding information in our headers."""
if headers and "Content-Type" in headers:
m = email.message.Message()
m["content-type"] = headers["Content-Type"]
charset = m.get_param("charset")
if charset:
return str(charset)
return None
class CacheablePageContent:
def __init__(self, page: "IndexContent") -> None:
assert page.cache_link_parsing
self.page = page
def __eq__(self, other: object) -> bool:
return isinstance(other, type(self)) and self.page.url == other.page.url
def __hash__(self) -> int:
return hash(self.page.url)
class ParseLinks(Protocol):
def __call__(self, page: "IndexContent") -> Iterable[Link]:
...
def with_cached_index_content(fn: ParseLinks) -> ParseLinks:
"""
Given a function that parses an Iterable[Link] from an IndexContent, cache the
function's result (keyed by CacheablePageContent), unless the IndexContent
`page` has `page.cache_link_parsing == False`.
"""
@functools.lru_cache(maxsize=None)
def wrapper(cacheable_page: CacheablePageContent) -> List[Link]:
return list(fn(cacheable_page.page))
@functools.wraps(fn)
def wrapper_wrapper(page: "IndexContent") -> List[Link]:
if page.cache_link_parsing:
return wrapper(CacheablePageContent(page))
return list(fn(page))
return wrapper_wrapper
@with_cached_index_content
def parse_links(page: "IndexContent") -> Iterable[Link]:
"""
Parse a Simple API's Index Content, and yield its anchor elements as Link objects.
"""
content_type_l = page.content_type.lower()
if content_type_l.startswith("application/vnd.pypi.simple.v1+json"):
data = json.loads(page.content)
for file in data.get("files", []):
link = Link.from_json(file, page.url)
if link is None:
continue
yield link
return
parser = HTMLLinkParser(page.url)
encoding = page.encoding or "utf-8"
parser.feed(page.content.decode(encoding))
url = page.url
base_url = parser.base_url or url
for anchor in parser.anchors:
link = Link.from_element(anchor, page_url=url, base_url=base_url)
if link is None:
continue
yield link
class IndexContent:
"""Represents one response (or page), along with its URL"""
def __init__(
self,
content: bytes,
content_type: str,
encoding: Optional[str],
url: str,
cache_link_parsing: bool = True,
) -> None:
"""
:param encoding: the encoding to decode the given content.
:param url: the URL from which the HTML was downloaded.
:param cache_link_parsing: whether links parsed from this page's url
should be cached. PyPI index urls should
have this set to False, for example.
"""
self.content = content
self.content_type = content_type
self.encoding = encoding
self.url = url
self.cache_link_parsing = cache_link_parsing
def __str__(self) -> str:
return redact_auth_from_url(self.url)
class HTMLLinkParser(HTMLParser):
"""
HTMLParser that keeps the first base HREF and a list of all anchor
elements' attributes.
"""
def __init__(self, url: str) -> None:
super().__init__(convert_charrefs=True)
self.url: str = url
self.base_url: Optional[str] = None
self.anchors: List[Dict[str, Optional[str]]] = []
def handle_starttag(self, tag: str, attrs: List[Tuple[str, Optional[str]]]) -> None:
if tag == "base" and self.base_url is None:
href = self.get_href(attrs)
if href is not None:
self.base_url = href
elif tag == "a":
self.anchors.append(dict(attrs))
def get_href(self, attrs: List[Tuple[str, Optional[str]]]) -> Optional[str]:
for name, value in attrs:
if name == "href":
return value
return None
def _handle_get_simple_fail(
link: Link,
reason: Union[str, Exception],
meth: Optional[Callable[..., None]] = None,
) -> None:
if meth is None:
meth = logger.debug
meth("Could not fetch URL %s: %s - skipping", link, reason)
def _make_index_content(
response: Response, cache_link_parsing: bool = True
) -> IndexContent:
encoding = _get_encoding_from_headers(response.headers)
return IndexContent(
response.content,
response.headers["Content-Type"],
encoding=encoding,
url=response.url,
cache_link_parsing=cache_link_parsing,
)
def _get_index_content(link: Link, *, session: PipSession) -> Optional["IndexContent"]:
url = link.url.split("#", 1)[0]
# Check for VCS schemes that do not support lookup as web pages.
vcs_scheme = _match_vcs_scheme(url)
if vcs_scheme:
logger.warning(
"Cannot look at %s URL %s because it does not support lookup as web pages.",
vcs_scheme,
link,
)
return None
# Tack index.html onto file:// URLs that point to directories
scheme, _, path, _, _, _ = urllib.parse.urlparse(url)
if scheme == "file" and os.path.isdir(urllib.request.url2pathname(path)):
# add trailing slash if not present so urljoin doesn't trim
# final segment
if not url.endswith("/"):
url += "/"
# TODO: In the future, it would be nice if pip supported PEP 691
# style respones in the file:// URLs, however there's no
# standard file extension for application/vnd.pypi.simple.v1+json
# so we'll need to come up with something on our own.
url = urllib.parse.urljoin(url, "index.html")
logger.debug(" file: URL is directory, getting %s", url)
try:
resp = _get_simple_response(url, session=session)
except _NotHTTP:
logger.warning(
"Skipping page %s because it looks like an archive, and cannot "
"be checked by a HTTP HEAD request.",
link,
)
except _NotAPIContent as exc:
logger.warning(
"Skipping page %s because the %s request got Content-Type: %s. "
"The only supported Content-Types are application/vnd.pypi.simple.v1+json, "
"application/vnd.pypi.simple.v1+html, and text/html",
link,
exc.request_desc,
exc.content_type,
)
except NetworkConnectionError as exc:
_handle_get_simple_fail(link, exc)
except RetryError as exc:
_handle_get_simple_fail(link, exc)
except SSLError as exc:
reason = "There was a problem confirming the ssl certificate: "
reason += str(exc)
_handle_get_simple_fail(link, reason, meth=logger.info)
except requests.ConnectionError as exc:
_handle_get_simple_fail(link, f"connection error: {exc}")
except requests.Timeout:
_handle_get_simple_fail(link, "timed out")
else:
return _make_index_content(resp, cache_link_parsing=link.cache_link_parsing)
return None
class CollectedSources(NamedTuple):
find_links: Sequence[Optional[LinkSource]]
index_urls: Sequence[Optional[LinkSource]]
class LinkCollector:
"""
Responsible for collecting Link objects from all configured locations,
making network requests as needed.
The class's main method is its collect_sources() method.
"""
def __init__(
self,
session: PipSession,
search_scope: SearchScope,
) -> None:
self.search_scope = search_scope
self.session = session
@classmethod
def create(
cls,
session: PipSession,
options: Values,
suppress_no_index: bool = False,
) -> "LinkCollector":
"""
:param session: The Session to use to make requests.
:param suppress_no_index: Whether to ignore the --no-index option
when constructing the SearchScope object.
"""
index_urls = [options.index_url] + options.extra_index_urls
if options.no_index and not suppress_no_index:
logger.debug(
"Ignoring indexes: %s",
",".join(redact_auth_from_url(url) for url in index_urls),
)
index_urls = []
# Make sure find_links is a list before passing to create().
find_links = options.find_links or []
search_scope = SearchScope.create(
find_links=find_links,
index_urls=index_urls,
no_index=options.no_index,
)
link_collector = LinkCollector(
session=session,
search_scope=search_scope,
)
return link_collector
@property
def find_links(self) -> List[str]:
return self.search_scope.find_links
def fetch_response(self, location: Link) -> Optional[IndexContent]:
"""
Fetch an HTML page containing package links.
"""
return _get_index_content(location, session=self.session)
def collect_sources(
self,
project_name: str,
candidates_from_page: CandidatesFromPage,
) -> CollectedSources:
# The OrderedDict calls deduplicate sources by URL.
index_url_sources = collections.OrderedDict(
build_source(
loc,
candidates_from_page=candidates_from_page,
page_validator=self.session.is_secure_origin,
expand_dir=False,
cache_link_parsing=False,
)
for loc in self.search_scope.get_index_urls_locations(project_name)
).values()
find_links_sources = collections.OrderedDict(
build_source(
loc,
candidates_from_page=candidates_from_page,
page_validator=self.session.is_secure_origin,
expand_dir=True,
cache_link_parsing=True,
)
for loc in self.find_links
).values()
if logger.isEnabledFor(logging.DEBUG):
lines = [
f"* {s.link}"
for s in itertools.chain(find_links_sources, index_url_sources)
if s is not None and s.link is not None
]
lines = [
f"{len(lines)} location(s) to search "
f"for versions of {project_name}:"
] + lines
logger.debug("\n".join(lines))
return CollectedSources(
find_links=list(find_links_sources),
index_urls=list(index_url_sources),
)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,224 @@
import logging
import mimetypes
import os
import pathlib
from typing import Callable, Iterable, Optional, Tuple
from pip._internal.models.candidate import InstallationCandidate
from pip._internal.models.link import Link
from pip._internal.utils.urls import path_to_url, url_to_path
from pip._internal.vcs import is_url
logger = logging.getLogger(__name__)
FoundCandidates = Iterable[InstallationCandidate]
FoundLinks = Iterable[Link]
CandidatesFromPage = Callable[[Link], Iterable[InstallationCandidate]]
PageValidator = Callable[[Link], bool]
class LinkSource:
@property
def link(self) -> Optional[Link]:
"""Returns the underlying link, if there's one."""
raise NotImplementedError()
def page_candidates(self) -> FoundCandidates:
"""Candidates found by parsing an archive listing HTML file."""
raise NotImplementedError()
def file_links(self) -> FoundLinks:
"""Links found by specifying archives directly."""
raise NotImplementedError()
def _is_html_file(file_url: str) -> bool:
return mimetypes.guess_type(file_url, strict=False)[0] == "text/html"
class _FlatDirectorySource(LinkSource):
"""Link source specified by ``--find-links=<path-to-dir>``.
This looks the content of the directory, and returns:
* ``page_candidates``: Links listed on each HTML file in the directory.
* ``file_candidates``: Archives in the directory.
"""
def __init__(
self,
candidates_from_page: CandidatesFromPage,
path: str,
) -> None:
self._candidates_from_page = candidates_from_page
self._path = pathlib.Path(os.path.realpath(path))
@property
def link(self) -> Optional[Link]:
return None
def page_candidates(self) -> FoundCandidates:
for path in self._path.iterdir():
url = path_to_url(str(path))
if not _is_html_file(url):
continue
yield from self._candidates_from_page(Link(url))
def file_links(self) -> FoundLinks:
for path in self._path.iterdir():
url = path_to_url(str(path))
if _is_html_file(url):
continue
yield Link(url)
class _LocalFileSource(LinkSource):
"""``--find-links=<path-or-url>`` or ``--[extra-]index-url=<path-or-url>``.
If a URL is supplied, it must be a ``file:`` URL. If a path is supplied to
the option, it is converted to a URL first. This returns:
* ``page_candidates``: Links listed on an HTML file.
* ``file_candidates``: The non-HTML file.
"""
def __init__(
self,
candidates_from_page: CandidatesFromPage,
link: Link,
) -> None:
self._candidates_from_page = candidates_from_page
self._link = link
@property
def link(self) -> Optional[Link]:
return self._link
def page_candidates(self) -> FoundCandidates:
if not _is_html_file(self._link.url):
return
yield from self._candidates_from_page(self._link)
def file_links(self) -> FoundLinks:
if _is_html_file(self._link.url):
return
yield self._link
class _RemoteFileSource(LinkSource):
"""``--find-links=<url>`` or ``--[extra-]index-url=<url>``.
This returns:
* ``page_candidates``: Links listed on an HTML file.
* ``file_candidates``: The non-HTML file.
"""
def __init__(
self,
candidates_from_page: CandidatesFromPage,
page_validator: PageValidator,
link: Link,
) -> None:
self._candidates_from_page = candidates_from_page
self._page_validator = page_validator
self._link = link
@property
def link(self) -> Optional[Link]:
return self._link
def page_candidates(self) -> FoundCandidates:
if not self._page_validator(self._link):
return
yield from self._candidates_from_page(self._link)
def file_links(self) -> FoundLinks:
yield self._link
class _IndexDirectorySource(LinkSource):
"""``--[extra-]index-url=<path-to-directory>``.
This is treated like a remote URL; ``candidates_from_page`` contains logic
for this by appending ``index.html`` to the link.
"""
def __init__(
self,
candidates_from_page: CandidatesFromPage,
link: Link,
) -> None:
self._candidates_from_page = candidates_from_page
self._link = link
@property
def link(self) -> Optional[Link]:
return self._link
def page_candidates(self) -> FoundCandidates:
yield from self._candidates_from_page(self._link)
def file_links(self) -> FoundLinks:
return ()
def build_source(
location: str,
*,
candidates_from_page: CandidatesFromPage,
page_validator: PageValidator,
expand_dir: bool,
cache_link_parsing: bool,
) -> Tuple[Optional[str], Optional[LinkSource]]:
path: Optional[str] = None
url: Optional[str] = None
if os.path.exists(location): # Is a local path.
url = path_to_url(location)
path = location
elif location.startswith("file:"): # A file: URL.
url = location
path = url_to_path(location)
elif is_url(location):
url = location
if url is None:
msg = (
"Location '%s' is ignored: "
"it is either a non-existing path or lacks a specific scheme."
)
logger.warning(msg, location)
return (None, None)
if path is None:
source: LinkSource = _RemoteFileSource(
candidates_from_page=candidates_from_page,
page_validator=page_validator,
link=Link(url, cache_link_parsing=cache_link_parsing),
)
return (url, source)
if os.path.isdir(path):
if expand_dir:
source = _FlatDirectorySource(
candidates_from_page=candidates_from_page,
path=path,
)
else:
source = _IndexDirectorySource(
candidates_from_page=candidates_from_page,
link=Link(url, cache_link_parsing=cache_link_parsing),
)
return (url, source)
elif os.path.isfile(path):
source = _LocalFileSource(
candidates_from_page=candidates_from_page,
link=Link(url, cache_link_parsing=cache_link_parsing),
)
return (url, source)
logger.warning(
"Location '%s' is ignored: it is neither a file nor a directory.",
location,
)
return (url, None)

View File

@ -0,0 +1,528 @@
import functools
import logging
import os
import pathlib
import sys
import sysconfig
from typing import Any, Dict, Generator, List, Optional, Tuple
from pip._internal.models.scheme import SCHEME_KEYS, Scheme
from pip._internal.utils.compat import WINDOWS
from pip._internal.utils.deprecation import deprecated
from pip._internal.utils.virtualenv import running_under_virtualenv
from . import _sysconfig
from .base import (
USER_CACHE_DIR,
get_major_minor_version,
get_src_prefix,
is_osx_framework,
site_packages,
user_site,
)
__all__ = [
"USER_CACHE_DIR",
"get_bin_prefix",
"get_bin_user",
"get_major_minor_version",
"get_platlib",
"get_prefixed_libs",
"get_purelib",
"get_scheme",
"get_src_prefix",
"site_packages",
"user_site",
]
logger = logging.getLogger(__name__)
_PLATLIBDIR: str = getattr(sys, "platlibdir", "lib")
_USE_SYSCONFIG_DEFAULT = sys.version_info >= (3, 10)
def _should_use_sysconfig() -> bool:
"""This function determines the value of _USE_SYSCONFIG.
By default, pip uses sysconfig on Python 3.10+.
But Python distributors can override this decision by setting:
sysconfig._PIP_USE_SYSCONFIG = True / False
Rationale in https://github.com/pypa/pip/issues/10647
This is a function for testability, but should be constant during any one
run.
"""
return bool(getattr(sysconfig, "_PIP_USE_SYSCONFIG", _USE_SYSCONFIG_DEFAULT))
_USE_SYSCONFIG = _should_use_sysconfig()
if not _USE_SYSCONFIG:
# Import distutils lazily to avoid deprecation warnings,
# but import it soon enough that it is in memory and available during
# a pip reinstall.
from . import _distutils
# Be noisy about incompatibilities if this platforms "should" be using
# sysconfig, but is explicitly opting out and using distutils instead.
if _USE_SYSCONFIG_DEFAULT and not _USE_SYSCONFIG:
_MISMATCH_LEVEL = logging.WARNING
else:
_MISMATCH_LEVEL = logging.DEBUG
def _looks_like_bpo_44860() -> bool:
"""The resolution to bpo-44860 will change this incorrect platlib.
See <https://bugs.python.org/issue44860>.
"""
from distutils.command.install import INSTALL_SCHEMES
try:
unix_user_platlib = INSTALL_SCHEMES["unix_user"]["platlib"]
except KeyError:
return False
return unix_user_platlib == "$usersite"
def _looks_like_red_hat_patched_platlib_purelib(scheme: Dict[str, str]) -> bool:
platlib = scheme["platlib"]
if "/$platlibdir/" in platlib:
platlib = platlib.replace("/$platlibdir/", f"/{_PLATLIBDIR}/")
if "/lib64/" not in platlib:
return False
unpatched = platlib.replace("/lib64/", "/lib/")
return unpatched.replace("$platbase/", "$base/") == scheme["purelib"]
@functools.lru_cache(maxsize=None)
def _looks_like_red_hat_lib() -> bool:
"""Red Hat patches platlib in unix_prefix and unix_home, but not purelib.
This is the only way I can see to tell a Red Hat-patched Python.
"""
from distutils.command.install import INSTALL_SCHEMES
return all(
k in INSTALL_SCHEMES
and _looks_like_red_hat_patched_platlib_purelib(INSTALL_SCHEMES[k])
for k in ("unix_prefix", "unix_home")
)
@functools.lru_cache(maxsize=None)
def _looks_like_debian_scheme() -> bool:
"""Debian adds two additional schemes."""
from distutils.command.install import INSTALL_SCHEMES
return "deb_system" in INSTALL_SCHEMES and "unix_local" in INSTALL_SCHEMES
@functools.lru_cache(maxsize=None)
def _looks_like_red_hat_scheme() -> bool:
"""Red Hat patches ``sys.prefix`` and ``sys.exec_prefix``.
Red Hat's ``00251-change-user-install-location.patch`` changes the install
command's ``prefix`` and ``exec_prefix`` to append ``"/local"``. This is
(fortunately?) done quite unconditionally, so we create a default command
object without any configuration to detect this.
"""
from distutils.command.install import install
from distutils.dist import Distribution
cmd: Any = install(Distribution())
cmd.finalize_options()
return (
cmd.exec_prefix == f"{os.path.normpath(sys.exec_prefix)}/local"
and cmd.prefix == f"{os.path.normpath(sys.prefix)}/local"
)
@functools.lru_cache(maxsize=None)
def _looks_like_slackware_scheme() -> bool:
"""Slackware patches sysconfig but fails to patch distutils and site.
Slackware changes sysconfig's user scheme to use ``"lib64"`` for the lib
path, but does not do the same to the site module.
"""
if user_site is None: # User-site not available.
return False
try:
paths = sysconfig.get_paths(scheme="posix_user", expand=False)
except KeyError: # User-site not available.
return False
return "/lib64/" in paths["purelib"] and "/lib64/" not in user_site
@functools.lru_cache(maxsize=None)
def _looks_like_msys2_mingw_scheme() -> bool:
"""MSYS2 patches distutils and sysconfig to use a UNIX-like scheme.
However, MSYS2 incorrectly patches sysconfig ``nt`` scheme. The fix is
likely going to be included in their 3.10 release, so we ignore the warning.
See msys2/MINGW-packages#9319.
MSYS2 MINGW's patch uses lowercase ``"lib"`` instead of the usual uppercase,
and is missing the final ``"site-packages"``.
"""
paths = sysconfig.get_paths("nt", expand=False)
return all(
"Lib" not in p and "lib" in p and not p.endswith("site-packages")
for p in (paths[key] for key in ("platlib", "purelib"))
)
def _fix_abiflags(parts: Tuple[str]) -> Generator[str, None, None]:
ldversion = sysconfig.get_config_var("LDVERSION")
abiflags = getattr(sys, "abiflags", None)
# LDVERSION does not end with sys.abiflags. Just return the path unchanged.
if not ldversion or not abiflags or not ldversion.endswith(abiflags):
yield from parts
return
# Strip sys.abiflags from LDVERSION-based path components.
for part in parts:
if part.endswith(ldversion):
part = part[: (0 - len(abiflags))]
yield part
@functools.lru_cache(maxsize=None)
def _warn_mismatched(old: pathlib.Path, new: pathlib.Path, *, key: str) -> None:
issue_url = "https://github.com/pypa/pip/issues/10151"
message = (
"Value for %s does not match. Please report this to <%s>"
"\ndistutils: %s"
"\nsysconfig: %s"
)
logger.log(_MISMATCH_LEVEL, message, key, issue_url, old, new)
def _warn_if_mismatch(old: pathlib.Path, new: pathlib.Path, *, key: str) -> bool:
if old == new:
return False
_warn_mismatched(old, new, key=key)
return True
@functools.lru_cache(maxsize=None)
def _log_context(
*,
user: bool = False,
home: Optional[str] = None,
root: Optional[str] = None,
prefix: Optional[str] = None,
) -> None:
parts = [
"Additional context:",
"user = %r",
"home = %r",
"root = %r",
"prefix = %r",
]
logger.log(_MISMATCH_LEVEL, "\n".join(parts), user, home, root, prefix)
def get_scheme(
dist_name: str,
user: bool = False,
home: Optional[str] = None,
root: Optional[str] = None,
isolated: bool = False,
prefix: Optional[str] = None,
) -> Scheme:
new = _sysconfig.get_scheme(
dist_name,
user=user,
home=home,
root=root,
isolated=isolated,
prefix=prefix,
)
if _USE_SYSCONFIG:
return new
old = _distutils.get_scheme(
dist_name,
user=user,
home=home,
root=root,
isolated=isolated,
prefix=prefix,
)
warning_contexts = []
for k in SCHEME_KEYS:
old_v = pathlib.Path(getattr(old, k))
new_v = pathlib.Path(getattr(new, k))
if old_v == new_v:
continue
# distutils incorrectly put PyPy packages under ``site-packages/python``
# in the ``posix_home`` scheme, but PyPy devs said they expect the
# directory name to be ``pypy`` instead. So we treat this as a bug fix
# and not warn about it. See bpo-43307 and python/cpython#24628.
skip_pypy_special_case = (
sys.implementation.name == "pypy"
and home is not None
and k in ("platlib", "purelib")
and old_v.parent == new_v.parent
and old_v.name.startswith("python")
and new_v.name.startswith("pypy")
)
if skip_pypy_special_case:
continue
# sysconfig's ``osx_framework_user`` does not include ``pythonX.Y`` in
# the ``include`` value, but distutils's ``headers`` does. We'll let
# CPython decide whether this is a bug or feature. See bpo-43948.
skip_osx_framework_user_special_case = (
user
and is_osx_framework()
and k == "headers"
and old_v.parent.parent == new_v.parent
and old_v.parent.name.startswith("python")
)
if skip_osx_framework_user_special_case:
continue
# On Red Hat and derived Linux distributions, distutils is patched to
# use "lib64" instead of "lib" for platlib.
if k == "platlib" and _looks_like_red_hat_lib():
continue
# On Python 3.9+, sysconfig's posix_user scheme sets platlib against
# sys.platlibdir, but distutils's unix_user incorrectly coninutes
# using the same $usersite for both platlib and purelib. This creates a
# mismatch when sys.platlibdir is not "lib".
skip_bpo_44860 = (
user
and k == "platlib"
and not WINDOWS
and sys.version_info >= (3, 9)
and _PLATLIBDIR != "lib"
and _looks_like_bpo_44860()
)
if skip_bpo_44860:
continue
# Slackware incorrectly patches posix_user to use lib64 instead of lib,
# but not usersite to match the location.
skip_slackware_user_scheme = (
user
and k in ("platlib", "purelib")
and not WINDOWS
and _looks_like_slackware_scheme()
)
if skip_slackware_user_scheme:
continue
# Both Debian and Red Hat patch Python to place the system site under
# /usr/local instead of /usr. Debian also places lib in dist-packages
# instead of site-packages, but the /usr/local check should cover it.
skip_linux_system_special_case = (
not (user or home or prefix or running_under_virtualenv())
and old_v.parts[1:3] == ("usr", "local")
and len(new_v.parts) > 1
and new_v.parts[1] == "usr"
and (len(new_v.parts) < 3 or new_v.parts[2] != "local")
and (_looks_like_red_hat_scheme() or _looks_like_debian_scheme())
)
if skip_linux_system_special_case:
continue
# On Python 3.7 and earlier, sysconfig does not include sys.abiflags in
# the "pythonX.Y" part of the path, but distutils does.
skip_sysconfig_abiflag_bug = (
sys.version_info < (3, 8)
and not WINDOWS
and k in ("headers", "platlib", "purelib")
and tuple(_fix_abiflags(old_v.parts)) == new_v.parts
)
if skip_sysconfig_abiflag_bug:
continue
# MSYS2 MINGW's sysconfig patch does not include the "site-packages"
# part of the path. This is incorrect and will be fixed in MSYS.
skip_msys2_mingw_bug = (
WINDOWS and k in ("platlib", "purelib") and _looks_like_msys2_mingw_scheme()
)
if skip_msys2_mingw_bug:
continue
# CPython's POSIX install script invokes pip (via ensurepip) against the
# interpreter located in the source tree, not the install site. This
# triggers special logic in sysconfig that's not present in distutils.
# https://github.com/python/cpython/blob/8c21941ddaf/Lib/sysconfig.py#L178-L194
skip_cpython_build = (
sysconfig.is_python_build(check_home=True)
and not WINDOWS
and k in ("headers", "include", "platinclude")
)
if skip_cpython_build:
continue
warning_contexts.append((old_v, new_v, f"scheme.{k}"))
if not warning_contexts:
return old
# Check if this path mismatch is caused by distutils config files. Those
# files will no longer work once we switch to sysconfig, so this raises a
# deprecation message for them.
default_old = _distutils.distutils_scheme(
dist_name,
user,
home,
root,
isolated,
prefix,
ignore_config_files=True,
)
if any(default_old[k] != getattr(old, k) for k in SCHEME_KEYS):
deprecated(
reason=(
"Configuring installation scheme with distutils config files "
"is deprecated and will no longer work in the near future. If you "
"are using a Homebrew or Linuxbrew Python, please see discussion "
"at https://github.com/Homebrew/homebrew-core/issues/76621"
),
replacement=None,
gone_in=None,
)
return old
# Post warnings about this mismatch so user can report them back.
for old_v, new_v, key in warning_contexts:
_warn_mismatched(old_v, new_v, key=key)
_log_context(user=user, home=home, root=root, prefix=prefix)
return old
def get_bin_prefix() -> str:
new = _sysconfig.get_bin_prefix()
if _USE_SYSCONFIG:
return new
old = _distutils.get_bin_prefix()
if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="bin_prefix"):
_log_context()
return old
def get_bin_user() -> str:
return _sysconfig.get_scheme("", user=True).scripts
def _looks_like_deb_system_dist_packages(value: str) -> bool:
"""Check if the value is Debian's APT-controlled dist-packages.
Debian's ``distutils.sysconfig.get_python_lib()`` implementation returns the
default package path controlled by APT, but does not patch ``sysconfig`` to
do the same. This is similar to the bug worked around in ``get_scheme()``,
but here the default is ``deb_system`` instead of ``unix_local``. Ultimately
we can't do anything about this Debian bug, and this detection allows us to
skip the warning when needed.
"""
if not _looks_like_debian_scheme():
return False
if value == "/usr/lib/python3/dist-packages":
return True
return False
def get_purelib() -> str:
"""Return the default pure-Python lib location."""
new = _sysconfig.get_purelib()
if _USE_SYSCONFIG:
return new
old = _distutils.get_purelib()
if _looks_like_deb_system_dist_packages(old):
return old
if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="purelib"):
_log_context()
return old
def get_platlib() -> str:
"""Return the default platform-shared lib location."""
new = _sysconfig.get_platlib()
if _USE_SYSCONFIG:
return new
from . import _distutils
old = _distutils.get_platlib()
if _looks_like_deb_system_dist_packages(old):
return old
if _warn_if_mismatch(pathlib.Path(old), pathlib.Path(new), key="platlib"):
_log_context()
return old
def _deduplicated(v1: str, v2: str) -> List[str]:
"""Deduplicate values from a list."""
if v1 == v2:
return [v1]
return [v1, v2]
def _looks_like_apple_library(path: str) -> bool:
"""Apple patches sysconfig to *always* look under */Library/Python*."""
if sys.platform[:6] != "darwin":
return False
return path == f"/Library/Python/{get_major_minor_version()}/site-packages"
def get_prefixed_libs(prefix: str) -> List[str]:
"""Return the lib locations under ``prefix``."""
new_pure, new_plat = _sysconfig.get_prefixed_libs(prefix)
if _USE_SYSCONFIG:
return _deduplicated(new_pure, new_plat)
old_pure, old_plat = _distutils.get_prefixed_libs(prefix)
old_lib_paths = _deduplicated(old_pure, old_plat)
# Apple's Python (shipped with Xcode and Command Line Tools) hard-code
# platlib and purelib to '/Library/Python/X.Y/site-packages'. This will
# cause serious build isolation bugs when Apple starts shipping 3.10 because
# pip will install build backends to the wrong location. This tells users
# who is at fault so Apple may notice it and fix the issue in time.
if all(_looks_like_apple_library(p) for p in old_lib_paths):
deprecated(
reason=(
"Python distributed by Apple's Command Line Tools incorrectly "
"patches sysconfig to always point to '/Library/Python'. This "
"will cause build isolation to operate incorrectly on Python "
"3.10 or later. Please help report this to Apple so they can "
"fix this. https://developer.apple.com/bug-reporting/"
),
replacement=None,
gone_in=None,
)
return old_lib_paths
warned = [
_warn_if_mismatch(
pathlib.Path(old_pure),
pathlib.Path(new_pure),
key="prefixed-purelib",
),
_warn_if_mismatch(
pathlib.Path(old_plat),
pathlib.Path(new_plat),
key="prefixed-platlib",
),
]
if any(warned):
_log_context(prefix=prefix)
return old_lib_paths

View File

@ -0,0 +1,180 @@
"""Locations where we look for configs, install stuff, etc"""
# The following comment should be removed at some point in the future.
# mypy: strict-optional=False
# If pip's going to use distutils, it should not be using the copy that setuptools
# might have injected into the environment. This is done by removing the injected
# shim, if it's injected.
#
# See https://github.com/pypa/pip/issues/8761 for the original discussion and
# rationale for why this is done within pip.
try:
__import__("_distutils_hack").remove_shim()
except (ImportError, AttributeError):
pass
import logging
import os
import sys
from distutils.cmd import Command as DistutilsCommand
from distutils.command.install import SCHEME_KEYS
from distutils.command.install import install as distutils_install_command
from distutils.sysconfig import get_python_lib
from typing import Dict, List, Optional, Tuple, Union, cast
from pip._internal.models.scheme import Scheme
from pip._internal.utils.compat import WINDOWS
from pip._internal.utils.virtualenv import running_under_virtualenv
from .base import get_major_minor_version
logger = logging.getLogger(__name__)
def distutils_scheme(
dist_name: str,
user: bool = False,
home: Optional[str] = None,
root: Optional[str] = None,
isolated: bool = False,
prefix: Optional[str] = None,
*,
ignore_config_files: bool = False,
) -> Dict[str, str]:
"""
Return a distutils install scheme
"""
from distutils.dist import Distribution
dist_args: Dict[str, Union[str, List[str]]] = {"name": dist_name}
if isolated:
dist_args["script_args"] = ["--no-user-cfg"]
d = Distribution(dist_args)
if not ignore_config_files:
try:
d.parse_config_files()
except UnicodeDecodeError:
# Typeshed does not include find_config_files() for some reason.
paths = d.find_config_files() # type: ignore
logger.warning(
"Ignore distutils configs in %s due to encoding errors.",
", ".join(os.path.basename(p) for p in paths),
)
obj: Optional[DistutilsCommand] = None
obj = d.get_command_obj("install", create=True)
assert obj is not None
i = cast(distutils_install_command, obj)
# NOTE: setting user or home has the side-effect of creating the home dir
# or user base for installations during finalize_options()
# ideally, we'd prefer a scheme class that has no side-effects.
assert not (user and prefix), f"user={user} prefix={prefix}"
assert not (home and prefix), f"home={home} prefix={prefix}"
i.user = user or i.user
if user or home:
i.prefix = ""
i.prefix = prefix or i.prefix
i.home = home or i.home
i.root = root or i.root
i.finalize_options()
scheme = {}
for key in SCHEME_KEYS:
scheme[key] = getattr(i, "install_" + key)
# install_lib specified in setup.cfg should install *everything*
# into there (i.e. it takes precedence over both purelib and
# platlib). Note, i.install_lib is *always* set after
# finalize_options(); we only want to override here if the user
# has explicitly requested it hence going back to the config
if "install_lib" in d.get_option_dict("install"):
scheme.update(dict(purelib=i.install_lib, platlib=i.install_lib))
if running_under_virtualenv():
if home:
prefix = home
elif user:
prefix = i.install_userbase
else:
prefix = i.prefix
scheme["headers"] = os.path.join(
prefix,
"include",
"site",
f"python{get_major_minor_version()}",
dist_name,
)
if root is not None:
path_no_drive = os.path.splitdrive(os.path.abspath(scheme["headers"]))[1]
scheme["headers"] = os.path.join(root, path_no_drive[1:])
return scheme
def get_scheme(
dist_name: str,
user: bool = False,
home: Optional[str] = None,
root: Optional[str] = None,
isolated: bool = False,
prefix: Optional[str] = None,
) -> Scheme:
"""
Get the "scheme" corresponding to the input parameters. The distutils
documentation provides the context for the available schemes:
https://docs.python.org/3/install/index.html#alternate-installation
:param dist_name: the name of the package to retrieve the scheme for, used
in the headers scheme path
:param user: indicates to use the "user" scheme
:param home: indicates to use the "home" scheme and provides the base
directory for the same
:param root: root under which other directories are re-based
:param isolated: equivalent to --no-user-cfg, i.e. do not consider
~/.pydistutils.cfg (posix) or ~/pydistutils.cfg (non-posix) for
scheme paths
:param prefix: indicates to use the "prefix" scheme and provides the
base directory for the same
"""
scheme = distutils_scheme(dist_name, user, home, root, isolated, prefix)
return Scheme(
platlib=scheme["platlib"],
purelib=scheme["purelib"],
headers=scheme["headers"],
scripts=scheme["scripts"],
data=scheme["data"],
)
def get_bin_prefix() -> str:
# XXX: In old virtualenv versions, sys.prefix can contain '..' components,
# so we need to call normpath to eliminate them.
prefix = os.path.normpath(sys.prefix)
if WINDOWS:
bin_py = os.path.join(prefix, "Scripts")
# buildout uses 'bin' on Windows too?
if not os.path.exists(bin_py):
bin_py = os.path.join(prefix, "bin")
return bin_py
# Forcing to use /usr/local/bin for standard macOS framework installs
# Also log to ~/Library/Logs/ for use with the Console.app log viewer
if sys.platform[:6] == "darwin" and prefix[:16] == "/System/Library/":
return "/usr/local/bin"
return os.path.join(prefix, "bin")
def get_purelib() -> str:
return get_python_lib(plat_specific=False)
def get_platlib() -> str:
return get_python_lib(plat_specific=True)
def get_prefixed_libs(prefix: str) -> Tuple[str, str]:
return (
get_python_lib(plat_specific=False, prefix=prefix),
get_python_lib(plat_specific=True, prefix=prefix),
)

View File

@ -0,0 +1,218 @@
import logging
import os
import sys
import sysconfig
import typing
from pip._internal.exceptions import InvalidSchemeCombination, UserInstallationInvalid
from pip._internal.models.scheme import SCHEME_KEYS, Scheme
from pip._internal.utils.virtualenv import running_under_virtualenv
from .base import change_root, get_major_minor_version, is_osx_framework
logger = logging.getLogger(__name__)
# Notes on _infer_* functions.
# Unfortunately ``get_default_scheme()`` didn't exist before 3.10, so there's no
# way to ask things like "what is the '_prefix' scheme on this platform". These
# functions try to answer that with some heuristics while accounting for ad-hoc
# platforms not covered by CPython's default sysconfig implementation. If the
# ad-hoc implementation does not fully implement sysconfig, we'll fall back to
# a POSIX scheme.
_AVAILABLE_SCHEMES = set(sysconfig.get_scheme_names())
_PREFERRED_SCHEME_API = getattr(sysconfig, "get_preferred_scheme", None)
def _should_use_osx_framework_prefix() -> bool:
"""Check for Apple's ``osx_framework_library`` scheme.
Python distributed by Apple's Command Line Tools has this special scheme
that's used when:
* This is a framework build.
* We are installing into the system prefix.
This does not account for ``pip install --prefix`` (also means we're not
installing to the system prefix), which should use ``posix_prefix``, but
logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But
since ``prefix`` is not available for ``sysconfig.get_default_scheme()``,
which is the stdlib replacement for ``_infer_prefix()``, presumably Apple
wouldn't be able to magically switch between ``osx_framework_library`` and
``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library``
means its behavior is consistent whether we use the stdlib implementation
or our own, and we deal with this special case in ``get_scheme()`` instead.
"""
return (
"osx_framework_library" in _AVAILABLE_SCHEMES
and not running_under_virtualenv()
and is_osx_framework()
)
def _infer_prefix() -> str:
"""Try to find a prefix scheme for the current platform.
This tries:
* A special ``osx_framework_library`` for Python distributed by Apple's
Command Line Tools, when not running in a virtual environment.
* Implementation + OS, used by PyPy on Windows (``pypy_nt``).
* Implementation without OS, used by PyPy on POSIX (``pypy``).
* OS + "prefix", used by CPython on POSIX (``posix_prefix``).
* Just the OS name, used by CPython on Windows (``nt``).
If none of the above works, fall back to ``posix_prefix``.
"""
if _PREFERRED_SCHEME_API:
return _PREFERRED_SCHEME_API("prefix")
if _should_use_osx_framework_prefix():
return "osx_framework_library"
implementation_suffixed = f"{sys.implementation.name}_{os.name}"
if implementation_suffixed in _AVAILABLE_SCHEMES:
return implementation_suffixed
if sys.implementation.name in _AVAILABLE_SCHEMES:
return sys.implementation.name
suffixed = f"{os.name}_prefix"
if suffixed in _AVAILABLE_SCHEMES:
return suffixed
if os.name in _AVAILABLE_SCHEMES: # On Windows, prefx is just called "nt".
return os.name
return "posix_prefix"
def _infer_user() -> str:
"""Try to find a user scheme for the current platform."""
if _PREFERRED_SCHEME_API:
return _PREFERRED_SCHEME_API("user")
if is_osx_framework() and not running_under_virtualenv():
suffixed = "osx_framework_user"
else:
suffixed = f"{os.name}_user"
if suffixed in _AVAILABLE_SCHEMES:
return suffixed
if "posix_user" not in _AVAILABLE_SCHEMES: # User scheme unavailable.
raise UserInstallationInvalid()
return "posix_user"
def _infer_home() -> str:
"""Try to find a home for the current platform."""
if _PREFERRED_SCHEME_API:
return _PREFERRED_SCHEME_API("home")
suffixed = f"{os.name}_home"
if suffixed in _AVAILABLE_SCHEMES:
return suffixed
return "posix_home"
# Update these keys if the user sets a custom home.
_HOME_KEYS = [
"installed_base",
"base",
"installed_platbase",
"platbase",
"prefix",
"exec_prefix",
]
if sysconfig.get_config_var("userbase") is not None:
_HOME_KEYS.append("userbase")
def get_scheme(
dist_name: str,
user: bool = False,
home: typing.Optional[str] = None,
root: typing.Optional[str] = None,
isolated: bool = False,
prefix: typing.Optional[str] = None,
) -> Scheme:
"""
Get the "scheme" corresponding to the input parameters.
:param dist_name: the name of the package to retrieve the scheme for, used
in the headers scheme path
:param user: indicates to use the "user" scheme
:param home: indicates to use the "home" scheme
:param root: root under which other directories are re-based
:param isolated: ignored, but kept for distutils compatibility (where
this controls whether the user-site pydistutils.cfg is honored)
:param prefix: indicates to use the "prefix" scheme and provides the
base directory for the same
"""
if user and prefix:
raise InvalidSchemeCombination("--user", "--prefix")
if home and prefix:
raise InvalidSchemeCombination("--home", "--prefix")
if home is not None:
scheme_name = _infer_home()
elif user:
scheme_name = _infer_user()
else:
scheme_name = _infer_prefix()
# Special case: When installing into a custom prefix, use posix_prefix
# instead of osx_framework_library. See _should_use_osx_framework_prefix()
# docstring for details.
if prefix is not None and scheme_name == "osx_framework_library":
scheme_name = "posix_prefix"
if home is not None:
variables = {k: home for k in _HOME_KEYS}
elif prefix is not None:
variables = {k: prefix for k in _HOME_KEYS}
else:
variables = {}
paths = sysconfig.get_paths(scheme=scheme_name, vars=variables)
# Logic here is very arbitrary, we're doing it for compatibility, don't ask.
# 1. Pip historically uses a special header path in virtual environments.
# 2. If the distribution name is not known, distutils uses 'UNKNOWN'. We
# only do the same when not running in a virtual environment because
# pip's historical header path logic (see point 1) did not do this.
if running_under_virtualenv():
if user:
base = variables.get("userbase", sys.prefix)
else:
base = variables.get("base", sys.prefix)
python_xy = f"python{get_major_minor_version()}"
paths["include"] = os.path.join(base, "include", "site", python_xy)
elif not dist_name:
dist_name = "UNKNOWN"
scheme = Scheme(
platlib=paths["platlib"],
purelib=paths["purelib"],
headers=os.path.join(paths["include"], dist_name),
scripts=paths["scripts"],
data=paths["data"],
)
if root is not None:
for key in SCHEME_KEYS:
value = change_root(root, getattr(scheme, key))
setattr(scheme, key, value)
return scheme
def get_bin_prefix() -> str:
# Forcing to use /usr/local/bin for standard macOS framework installs.
if sys.platform[:6] == "darwin" and sys.prefix[:16] == "/System/Library/":
return "/usr/local/bin"
return sysconfig.get_paths()["scripts"]
def get_purelib() -> str:
return sysconfig.get_paths()["purelib"]
def get_platlib() -> str:
return sysconfig.get_paths()["platlib"]
def get_prefixed_libs(prefix: str) -> typing.Tuple[str, str]:
paths = sysconfig.get_paths(vars={"base": prefix, "platbase": prefix})
return (paths["purelib"], paths["platlib"])

View File

@ -0,0 +1,81 @@
import functools
import os
import site
import sys
import sysconfig
import typing
from pip._internal.exceptions import InstallationError
from pip._internal.utils import appdirs
from pip._internal.utils.virtualenv import running_under_virtualenv
# Application Directories
USER_CACHE_DIR = appdirs.user_cache_dir("pip")
# FIXME doesn't account for venv linked to global site-packages
site_packages: typing.Optional[str] = sysconfig.get_path("purelib")
def get_major_minor_version() -> str:
"""
Return the major-minor version of the current Python as a string, e.g.
"3.7" or "3.10".
"""
return "{}.{}".format(*sys.version_info)
def change_root(new_root: str, pathname: str) -> str:
"""Return 'pathname' with 'new_root' prepended.
If 'pathname' is relative, this is equivalent to os.path.join(new_root, pathname).
Otherwise, it requires making 'pathname' relative and then joining the
two, which is tricky on DOS/Windows and Mac OS.
This is borrowed from Python's standard library's distutils module.
"""
if os.name == "posix":
if not os.path.isabs(pathname):
return os.path.join(new_root, pathname)
else:
return os.path.join(new_root, pathname[1:])
elif os.name == "nt":
(drive, path) = os.path.splitdrive(pathname)
if path[0] == "\\":
path = path[1:]
return os.path.join(new_root, path)
else:
raise InstallationError(
f"Unknown platform: {os.name}\n"
"Can not change root path prefix on unknown platform."
)
def get_src_prefix() -> str:
if running_under_virtualenv():
src_prefix = os.path.join(sys.prefix, "src")
else:
# FIXME: keep src in cwd for now (it is not a temporary folder)
try:
src_prefix = os.path.join(os.getcwd(), "src")
except OSError:
# In case the current working directory has been renamed or deleted
sys.exit("The folder you are executing pip from can no longer be found.")
# under macOS + virtualenv sys.prefix is not properly resolved
# it is something like /path/to/python/bin/..
return os.path.abspath(src_prefix)
try:
# Use getusersitepackages if this is present, as it ensures that the
# value is initialised properly.
user_site: typing.Optional[str] = site.getusersitepackages()
except AttributeError:
user_site = site.USER_SITE
@functools.lru_cache(maxsize=None)
def is_osx_framework() -> bool:
return bool(sysconfig.get_config_var("PYTHONFRAMEWORK"))

View File

@ -0,0 +1,12 @@
from typing import List, Optional
def main(args: Optional[List[str]] = None) -> int:
"""This is preserved for old console scripts that may still be referencing
it.
For additional details, see https://github.com/pypa/pip/issues/7498.
"""
from pip._internal.utils.entrypoints import _wrapper
return _wrapper(args)

View File

@ -0,0 +1,127 @@
import contextlib
import functools
import os
import sys
from typing import TYPE_CHECKING, List, Optional, Type, cast
from pip._internal.utils.misc import strtobool
from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel
if TYPE_CHECKING:
from typing import Protocol
else:
Protocol = object
__all__ = [
"BaseDistribution",
"BaseEnvironment",
"FilesystemWheel",
"MemoryWheel",
"Wheel",
"get_default_environment",
"get_environment",
"get_wheel_distribution",
"select_backend",
]
def _should_use_importlib_metadata() -> bool:
"""Whether to use the ``importlib.metadata`` or ``pkg_resources`` backend.
By default, pip uses ``importlib.metadata`` on Python 3.11+, and
``pkg_resourcess`` otherwise. This can be overridden by a couple of ways:
* If environment variable ``_PIP_USE_IMPORTLIB_METADATA`` is set, it
dictates whether ``importlib.metadata`` is used, regardless of Python
version.
* On Python 3.11+, Python distributors can patch ``importlib.metadata``
to add a global constant ``_PIP_USE_IMPORTLIB_METADATA = False``. This
makes pip use ``pkg_resources`` (unless the user set the aforementioned
environment variable to *True*).
"""
with contextlib.suppress(KeyError, ValueError):
return bool(strtobool(os.environ["_PIP_USE_IMPORTLIB_METADATA"]))
if sys.version_info < (3, 11):
return False
import importlib.metadata
return bool(getattr(importlib.metadata, "_PIP_USE_IMPORTLIB_METADATA", True))
class Backend(Protocol):
Distribution: Type[BaseDistribution]
Environment: Type[BaseEnvironment]
@functools.lru_cache(maxsize=None)
def select_backend() -> Backend:
if _should_use_importlib_metadata():
from . import importlib
return cast(Backend, importlib)
from . import pkg_resources
return cast(Backend, pkg_resources)
def get_default_environment() -> BaseEnvironment:
"""Get the default representation for the current environment.
This returns an Environment instance from the chosen backend. The default
Environment instance should be built from ``sys.path`` and may use caching
to share instance state accorss calls.
"""
return select_backend().Environment.default()
def get_environment(paths: Optional[List[str]]) -> BaseEnvironment:
"""Get a representation of the environment specified by ``paths``.
This returns an Environment instance from the chosen backend based on the
given import paths. The backend must build a fresh instance representing
the state of installed distributions when this function is called.
"""
return select_backend().Environment.from_paths(paths)
def get_directory_distribution(directory: str) -> BaseDistribution:
"""Get the distribution metadata representation in the specified directory.
This returns a Distribution instance from the chosen backend based on
the given on-disk ``.dist-info`` directory.
"""
return select_backend().Distribution.from_directory(directory)
def get_wheel_distribution(wheel: Wheel, canonical_name: str) -> BaseDistribution:
"""Get the representation of the specified wheel's distribution metadata.
This returns a Distribution instance from the chosen backend based on
the given wheel's ``.dist-info`` directory.
:param canonical_name: Normalized project name of the given wheel.
"""
return select_backend().Distribution.from_wheel(wheel, canonical_name)
def get_metadata_distribution(
metadata_contents: bytes,
filename: str,
canonical_name: str,
) -> BaseDistribution:
"""Get the dist representation of the specified METADATA file contents.
This returns a Distribution instance from the chosen backend sourced from the data
in `metadata_contents`.
:param metadata_contents: Contents of a METADATA file within a dist, or one served
via PEP 658.
:param filename: Filename for the dist this metadata represents.
:param canonical_name: Normalized project name of the given dist.
"""
return select_backend().Distribution.from_metadata_file_contents(
metadata_contents,
filename,
canonical_name,
)

View File

@ -0,0 +1,84 @@
# Extracted from https://github.com/pfmoore/pkg_metadata
from email.header import Header, decode_header, make_header
from email.message import Message
from typing import Any, Dict, List, Union
METADATA_FIELDS = [
# Name, Multiple-Use
("Metadata-Version", False),
("Name", False),
("Version", False),
("Dynamic", True),
("Platform", True),
("Supported-Platform", True),
("Summary", False),
("Description", False),
("Description-Content-Type", False),
("Keywords", False),
("Home-page", False),
("Download-URL", False),
("Author", False),
("Author-email", False),
("Maintainer", False),
("Maintainer-email", False),
("License", False),
("Classifier", True),
("Requires-Dist", True),
("Requires-Python", False),
("Requires-External", True),
("Project-URL", True),
("Provides-Extra", True),
("Provides-Dist", True),
("Obsoletes-Dist", True),
]
def json_name(field: str) -> str:
return field.lower().replace("-", "_")
def msg_to_json(msg: Message) -> Dict[str, Any]:
"""Convert a Message object into a JSON-compatible dictionary."""
def sanitise_header(h: Union[Header, str]) -> str:
if isinstance(h, Header):
chunks = []
for bytes, encoding in decode_header(h):
if encoding == "unknown-8bit":
try:
# See if UTF-8 works
bytes.decode("utf-8")
encoding = "utf-8"
except UnicodeDecodeError:
# If not, latin1 at least won't fail
encoding = "latin1"
chunks.append((bytes, encoding))
return str(make_header(chunks))
return str(h)
result = {}
for field, multi in METADATA_FIELDS:
if field not in msg:
continue
key = json_name(field)
if multi:
value: Union[str, List[str]] = [
sanitise_header(v) for v in msg.get_all(field)
]
else:
value = sanitise_header(msg.get(field))
if key == "keywords":
# Accept both comma-separated and space-separated
# forms, for better compatibility with old data.
if "," in value:
value = [v.strip() for v in value.split(",")]
else:
value = value.split()
result[key] = value
payload = msg.get_payload()
if payload:
result["description"] = payload
return result

View File

@ -0,0 +1,688 @@
import csv
import email.message
import functools
import json
import logging
import pathlib
import re
import zipfile
from typing import (
IO,
TYPE_CHECKING,
Any,
Collection,
Container,
Dict,
Iterable,
Iterator,
List,
NamedTuple,
Optional,
Tuple,
Union,
)
from pip._vendor.packaging.requirements import Requirement
from pip._vendor.packaging.specifiers import InvalidSpecifier, SpecifierSet
from pip._vendor.packaging.utils import NormalizedName
from pip._vendor.packaging.version import LegacyVersion, Version
from pip._internal.exceptions import NoneMetadataError
from pip._internal.locations import site_packages, user_site
from pip._internal.models.direct_url import (
DIRECT_URL_METADATA_NAME,
DirectUrl,
DirectUrlValidationError,
)
from pip._internal.utils.compat import stdlib_pkgs # TODO: Move definition here.
from pip._internal.utils.egg_link import egg_link_path_from_sys_path
from pip._internal.utils.misc import is_local, normalize_path
from pip._internal.utils.packaging import safe_extra
from pip._internal.utils.urls import url_to_path
from ._json import msg_to_json
if TYPE_CHECKING:
from typing import Protocol
else:
Protocol = object
DistributionVersion = Union[LegacyVersion, Version]
InfoPath = Union[str, pathlib.PurePath]
logger = logging.getLogger(__name__)
class BaseEntryPoint(Protocol):
@property
def name(self) -> str:
raise NotImplementedError()
@property
def value(self) -> str:
raise NotImplementedError()
@property
def group(self) -> str:
raise NotImplementedError()
def _convert_installed_files_path(
entry: Tuple[str, ...],
info: Tuple[str, ...],
) -> str:
"""Convert a legacy installed-files.txt path into modern RECORD path.
The legacy format stores paths relative to the info directory, while the
modern format stores paths relative to the package root, e.g. the
site-packages directory.
:param entry: Path parts of the installed-files.txt entry.
:param info: Path parts of the egg-info directory relative to package root.
:returns: The converted entry.
For best compatibility with symlinks, this does not use ``abspath()`` or
``Path.resolve()``, but tries to work with path parts:
1. While ``entry`` starts with ``..``, remove the equal amounts of parts
from ``info``; if ``info`` is empty, start appending ``..`` instead.
2. Join the two directly.
"""
while entry and entry[0] == "..":
if not info or info[-1] == "..":
info += ("..",)
else:
info = info[:-1]
entry = entry[1:]
return str(pathlib.Path(*info, *entry))
class RequiresEntry(NamedTuple):
requirement: str
extra: str
marker: str
class BaseDistribution(Protocol):
@classmethod
def from_directory(cls, directory: str) -> "BaseDistribution":
"""Load the distribution from a metadata directory.
:param directory: Path to a metadata directory, e.g. ``.dist-info``.
"""
raise NotImplementedError()
@classmethod
def from_metadata_file_contents(
cls,
metadata_contents: bytes,
filename: str,
project_name: str,
) -> "BaseDistribution":
"""Load the distribution from the contents of a METADATA file.
This is used to implement PEP 658 by generating a "shallow" dist object that can
be used for resolution without downloading or building the actual dist yet.
:param metadata_contents: The contents of a METADATA file.
:param filename: File name for the dist with this metadata.
:param project_name: Name of the project this dist represents.
"""
raise NotImplementedError()
@classmethod
def from_wheel(cls, wheel: "Wheel", name: str) -> "BaseDistribution":
"""Load the distribution from a given wheel.
:param wheel: A concrete wheel definition.
:param name: File name of the wheel.
:raises InvalidWheel: Whenever loading of the wheel causes a
:py:exc:`zipfile.BadZipFile` exception to be thrown.
:raises UnsupportedWheel: If the wheel is a valid zip, but malformed
internally.
"""
raise NotImplementedError()
def __repr__(self) -> str:
return f"{self.raw_name} {self.version} ({self.location})"
def __str__(self) -> str:
return f"{self.raw_name} {self.version}"
@property
def location(self) -> Optional[str]:
"""Where the distribution is loaded from.
A string value is not necessarily a filesystem path, since distributions
can be loaded from other sources, e.g. arbitrary zip archives. ``None``
means the distribution is created in-memory.
Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If
this is a symbolic link, we want to preserve the relative path between
it and files in the distribution.
"""
raise NotImplementedError()
@property
def editable_project_location(self) -> Optional[str]:
"""The project location for editable distributions.
This is the directory where pyproject.toml or setup.py is located.
None if the distribution is not installed in editable mode.
"""
# TODO: this property is relatively costly to compute, memoize it ?
direct_url = self.direct_url
if direct_url:
if direct_url.is_local_editable():
return url_to_path(direct_url.url)
else:
# Search for an .egg-link file by walking sys.path, as it was
# done before by dist_is_editable().
egg_link_path = egg_link_path_from_sys_path(self.raw_name)
if egg_link_path:
# TODO: get project location from second line of egg_link file
# (https://github.com/pypa/pip/issues/10243)
return self.location
return None
@property
def installed_location(self) -> Optional[str]:
"""The distribution's "installed" location.
This should generally be a ``site-packages`` directory. This is
usually ``dist.location``, except for legacy develop-installed packages,
where ``dist.location`` is the source code location, and this is where
the ``.egg-link`` file is.
The returned location is normalized (in particular, with symlinks removed).
"""
raise NotImplementedError()
@property
def info_location(self) -> Optional[str]:
"""Location of the .[egg|dist]-info directory or file.
Similarly to ``location``, a string value is not necessarily a
filesystem path. ``None`` means the distribution is created in-memory.
For a modern .dist-info installation on disk, this should be something
like ``{location}/{raw_name}-{version}.dist-info``.
Do not canonicalize this value with e.g. ``pathlib.Path.resolve()``. If
this is a symbolic link, we want to preserve the relative path between
it and other files in the distribution.
"""
raise NotImplementedError()
@property
def installed_by_distutils(self) -> bool:
"""Whether this distribution is installed with legacy distutils format.
A distribution installed with "raw" distutils not patched by setuptools
uses one single file at ``info_location`` to store metadata. We need to
treat this specially on uninstallation.
"""
info_location = self.info_location
if not info_location:
return False
return pathlib.Path(info_location).is_file()
@property
def installed_as_egg(self) -> bool:
"""Whether this distribution is installed as an egg.
This usually indicates the distribution was installed by (older versions
of) easy_install.
"""
location = self.location
if not location:
return False
return location.endswith(".egg")
@property
def installed_with_setuptools_egg_info(self) -> bool:
"""Whether this distribution is installed with the ``.egg-info`` format.
This usually indicates the distribution was installed with setuptools
with an old pip version or with ``single-version-externally-managed``.
Note that this ensure the metadata store is a directory. distutils can
also installs an ``.egg-info``, but as a file, not a directory. This
property is *False* for that case. Also see ``installed_by_distutils``.
"""
info_location = self.info_location
if not info_location:
return False
if not info_location.endswith(".egg-info"):
return False
return pathlib.Path(info_location).is_dir()
@property
def installed_with_dist_info(self) -> bool:
"""Whether this distribution is installed with the "modern format".
This indicates a "modern" installation, e.g. storing metadata in the
``.dist-info`` directory. This applies to installations made by
setuptools (but through pip, not directly), or anything using the
standardized build backend interface (PEP 517).
"""
info_location = self.info_location
if not info_location:
return False
if not info_location.endswith(".dist-info"):
return False
return pathlib.Path(info_location).is_dir()
@property
def canonical_name(self) -> NormalizedName:
raise NotImplementedError()
@property
def version(self) -> DistributionVersion:
raise NotImplementedError()
@property
def setuptools_filename(self) -> str:
"""Convert a project name to its setuptools-compatible filename.
This is a copy of ``pkg_resources.to_filename()`` for compatibility.
"""
return self.raw_name.replace("-", "_")
@property
def direct_url(self) -> Optional[DirectUrl]:
"""Obtain a DirectUrl from this distribution.
Returns None if the distribution has no `direct_url.json` metadata,
or if `direct_url.json` is invalid.
"""
try:
content = self.read_text(DIRECT_URL_METADATA_NAME)
except FileNotFoundError:
return None
try:
return DirectUrl.from_json(content)
except (
UnicodeDecodeError,
json.JSONDecodeError,
DirectUrlValidationError,
) as e:
logger.warning(
"Error parsing %s for %s: %s",
DIRECT_URL_METADATA_NAME,
self.canonical_name,
e,
)
return None
@property
def installer(self) -> str:
try:
installer_text = self.read_text("INSTALLER")
except (OSError, ValueError, NoneMetadataError):
return "" # Fail silently if the installer file cannot be read.
for line in installer_text.splitlines():
cleaned_line = line.strip()
if cleaned_line:
return cleaned_line
return ""
@property
def requested(self) -> bool:
return self.is_file("REQUESTED")
@property
def editable(self) -> bool:
return bool(self.editable_project_location)
@property
def local(self) -> bool:
"""If distribution is installed in the current virtual environment.
Always True if we're not in a virtualenv.
"""
if self.installed_location is None:
return False
return is_local(self.installed_location)
@property
def in_usersite(self) -> bool:
if self.installed_location is None or user_site is None:
return False
return self.installed_location.startswith(normalize_path(user_site))
@property
def in_site_packages(self) -> bool:
if self.installed_location is None or site_packages is None:
return False
return self.installed_location.startswith(normalize_path(site_packages))
def is_file(self, path: InfoPath) -> bool:
"""Check whether an entry in the info directory is a file."""
raise NotImplementedError()
def iter_distutils_script_names(self) -> Iterator[str]:
"""Find distutils 'scripts' entries metadata.
If 'scripts' is supplied in ``setup.py``, distutils records those in the
installed distribution's ``scripts`` directory, a file for each script.
"""
raise NotImplementedError()
def read_text(self, path: InfoPath) -> str:
"""Read a file in the info directory.
:raise FileNotFoundError: If ``path`` does not exist in the directory.
:raise NoneMetadataError: If ``path`` exists in the info directory, but
cannot be read.
"""
raise NotImplementedError()
def iter_entry_points(self) -> Iterable[BaseEntryPoint]:
raise NotImplementedError()
def _metadata_impl(self) -> email.message.Message:
raise NotImplementedError()
@functools.lru_cache(maxsize=1)
def _metadata_cached(self) -> email.message.Message:
# When we drop python 3.7 support, move this to the metadata property and use
# functools.cached_property instead of lru_cache.
metadata = self._metadata_impl()
self._add_egg_info_requires(metadata)
return metadata
@property
def metadata(self) -> email.message.Message:
"""Metadata of distribution parsed from e.g. METADATA or PKG-INFO.
This should return an empty message if the metadata file is unavailable.
:raises NoneMetadataError: If the metadata file is available, but does
not contain valid metadata.
"""
return self._metadata_cached()
@property
def metadata_dict(self) -> Dict[str, Any]:
"""PEP 566 compliant JSON-serializable representation of METADATA or PKG-INFO.
This should return an empty dict if the metadata file is unavailable.
:raises NoneMetadataError: If the metadata file is available, but does
not contain valid metadata.
"""
return msg_to_json(self.metadata)
@property
def metadata_version(self) -> Optional[str]:
"""Value of "Metadata-Version:" in distribution metadata, if available."""
return self.metadata.get("Metadata-Version")
@property
def raw_name(self) -> str:
"""Value of "Name:" in distribution metadata."""
# The metadata should NEVER be missing the Name: key, but if it somehow
# does, fall back to the known canonical name.
return self.metadata.get("Name", self.canonical_name)
@property
def requires_python(self) -> SpecifierSet:
"""Value of "Requires-Python:" in distribution metadata.
If the key does not exist or contains an invalid value, an empty
SpecifierSet should be returned.
"""
value = self.metadata.get("Requires-Python")
if value is None:
return SpecifierSet()
try:
# Convert to str to satisfy the type checker; this can be a Header object.
spec = SpecifierSet(str(value))
except InvalidSpecifier as e:
message = "Package %r has an invalid Requires-Python: %s"
logger.warning(message, self.raw_name, e)
return SpecifierSet()
return spec
def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]:
"""Dependencies of this distribution.
For modern .dist-info distributions, this is the collection of
"Requires-Dist:" entries in distribution metadata.
"""
raise NotImplementedError()
def iter_provided_extras(self) -> Iterable[str]:
"""Extras provided by this distribution.
For modern .dist-info distributions, this is the collection of
"Provides-Extra:" entries in distribution metadata.
"""
raise NotImplementedError()
def _iter_declared_entries_from_record(self) -> Optional[Iterator[str]]:
try:
text = self.read_text("RECORD")
except FileNotFoundError:
return None
# This extra Path-str cast normalizes entries.
return (str(pathlib.Path(row[0])) for row in csv.reader(text.splitlines()))
def _iter_declared_entries_from_legacy(self) -> Optional[Iterator[str]]:
try:
text = self.read_text("installed-files.txt")
except FileNotFoundError:
return None
paths = (p for p in text.splitlines(keepends=False) if p)
root = self.location
info = self.info_location
if root is None or info is None:
return paths
try:
info_rel = pathlib.Path(info).relative_to(root)
except ValueError: # info is not relative to root.
return paths
if not info_rel.parts: # info *is* root.
return paths
return (
_convert_installed_files_path(pathlib.Path(p).parts, info_rel.parts)
for p in paths
)
def iter_declared_entries(self) -> Optional[Iterator[str]]:
"""Iterate through file entries declared in this distribution.
For modern .dist-info distributions, this is the files listed in the
``RECORD`` metadata file. For legacy setuptools distributions, this
comes from ``installed-files.txt``, with entries normalized to be
compatible with the format used by ``RECORD``.
:return: An iterator for listed entries, or None if the distribution
contains neither ``RECORD`` nor ``installed-files.txt``.
"""
return (
self._iter_declared_entries_from_record()
or self._iter_declared_entries_from_legacy()
)
def _iter_requires_txt_entries(self) -> Iterator[RequiresEntry]:
"""Parse a ``requires.txt`` in an egg-info directory.
This is an INI-ish format where an egg-info stores dependencies. A
section name describes extra other environment markers, while each entry
is an arbitrary string (not a key-value pair) representing a dependency
as a requirement string (no markers).
There is a construct in ``importlib.metadata`` called ``Sectioned`` that
does mostly the same, but the format is currently considered private.
"""
try:
content = self.read_text("requires.txt")
except FileNotFoundError:
return
extra = marker = "" # Section-less entries don't have markers.
for line in content.splitlines():
line = line.strip()
if not line or line.startswith("#"): # Comment; ignored.
continue
if line.startswith("[") and line.endswith("]"): # A section header.
extra, _, marker = line.strip("[]").partition(":")
continue
yield RequiresEntry(requirement=line, extra=extra, marker=marker)
def _iter_egg_info_extras(self) -> Iterable[str]:
"""Get extras from the egg-info directory."""
known_extras = {""}
for entry in self._iter_requires_txt_entries():
if entry.extra in known_extras:
continue
known_extras.add(entry.extra)
yield entry.extra
def _iter_egg_info_dependencies(self) -> Iterable[str]:
"""Get distribution dependencies from the egg-info directory.
To ease parsing, this converts a legacy dependency entry into a PEP 508
requirement string. Like ``_iter_requires_txt_entries()``, there is code
in ``importlib.metadata`` that does mostly the same, but not do exactly
what we need.
Namely, ``importlib.metadata`` does not normalize the extra name before
putting it into the requirement string, which causes marker comparison
to fail because the dist-info format do normalize. This is consistent in
all currently available PEP 517 backends, although not standardized.
"""
for entry in self._iter_requires_txt_entries():
if entry.extra and entry.marker:
marker = f'({entry.marker}) and extra == "{safe_extra(entry.extra)}"'
elif entry.extra:
marker = f'extra == "{safe_extra(entry.extra)}"'
elif entry.marker:
marker = entry.marker
else:
marker = ""
if marker:
yield f"{entry.requirement} ; {marker}"
else:
yield entry.requirement
def _add_egg_info_requires(self, metadata: email.message.Message) -> None:
"""Add egg-info requires.txt information to the metadata."""
if not metadata.get_all("Requires-Dist"):
for dep in self._iter_egg_info_dependencies():
metadata["Requires-Dist"] = dep
if not metadata.get_all("Provides-Extra"):
for extra in self._iter_egg_info_extras():
metadata["Provides-Extra"] = extra
class BaseEnvironment:
"""An environment containing distributions to introspect."""
@classmethod
def default(cls) -> "BaseEnvironment":
raise NotImplementedError()
@classmethod
def from_paths(cls, paths: Optional[List[str]]) -> "BaseEnvironment":
raise NotImplementedError()
def get_distribution(self, name: str) -> Optional["BaseDistribution"]:
"""Given a requirement name, return the installed distributions.
The name may not be normalized. The implementation must canonicalize
it for lookup.
"""
raise NotImplementedError()
def _iter_distributions(self) -> Iterator["BaseDistribution"]:
"""Iterate through installed distributions.
This function should be implemented by subclass, but never called
directly. Use the public ``iter_distribution()`` instead, which
implements additional logic to make sure the distributions are valid.
"""
raise NotImplementedError()
def iter_all_distributions(self) -> Iterator[BaseDistribution]:
"""Iterate through all installed distributions without any filtering."""
for dist in self._iter_distributions():
# Make sure the distribution actually comes from a valid Python
# packaging distribution. Pip's AdjacentTempDirectory leaves folders
# e.g. ``~atplotlib.dist-info`` if cleanup was interrupted. The
# valid project name pattern is taken from PEP 508.
project_name_valid = re.match(
r"^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$",
dist.canonical_name,
flags=re.IGNORECASE,
)
if not project_name_valid:
logger.warning(
"Ignoring invalid distribution %s (%s)",
dist.canonical_name,
dist.location,
)
continue
yield dist
def iter_installed_distributions(
self,
local_only: bool = True,
skip: Container[str] = stdlib_pkgs,
include_editables: bool = True,
editables_only: bool = False,
user_only: bool = False,
) -> Iterator[BaseDistribution]:
"""Return a list of installed distributions.
This is based on ``iter_all_distributions()`` with additional filtering
options. Note that ``iter_installed_distributions()`` without arguments
is *not* equal to ``iter_all_distributions()``, since some of the
configurations exclude packages by default.
:param local_only: If True (default), only return installations
local to the current virtualenv, if in a virtualenv.
:param skip: An iterable of canonicalized project names to ignore;
defaults to ``stdlib_pkgs``.
:param include_editables: If False, don't report editables.
:param editables_only: If True, only report editables.
:param user_only: If True, only report installations in the user
site directory.
"""
it = self.iter_all_distributions()
if local_only:
it = (d for d in it if d.local)
if not include_editables:
it = (d for d in it if not d.editable)
if editables_only:
it = (d for d in it if d.editable)
if user_only:
it = (d for d in it if d.in_usersite)
return (d for d in it if d.canonical_name not in skip)
class Wheel(Protocol):
location: str
def as_zipfile(self) -> zipfile.ZipFile:
raise NotImplementedError()
class FilesystemWheel(Wheel):
def __init__(self, location: str) -> None:
self.location = location
def as_zipfile(self) -> zipfile.ZipFile:
return zipfile.ZipFile(self.location, allowZip64=True)
class MemoryWheel(Wheel):
def __init__(self, location: str, stream: IO[bytes]) -> None:
self.location = location
self.stream = stream
def as_zipfile(self) -> zipfile.ZipFile:
return zipfile.ZipFile(self.stream, allowZip64=True)

View File

@ -0,0 +1,4 @@
from ._dists import Distribution
from ._envs import Environment
__all__ = ["Distribution", "Environment"]

View File

@ -0,0 +1,55 @@
import importlib.metadata
from typing import Any, Optional, Protocol, cast
class BadMetadata(ValueError):
def __init__(self, dist: importlib.metadata.Distribution, *, reason: str) -> None:
self.dist = dist
self.reason = reason
def __str__(self) -> str:
return f"Bad metadata in {self.dist} ({self.reason})"
class BasePath(Protocol):
"""A protocol that various path objects conform.
This exists because importlib.metadata uses both ``pathlib.Path`` and
``zipfile.Path``, and we need a common base for type hints (Union does not
work well since ``zipfile.Path`` is too new for our linter setup).
This does not mean to be exhaustive, but only contains things that present
in both classes *that we need*.
"""
@property
def name(self) -> str:
raise NotImplementedError()
@property
def parent(self) -> "BasePath":
raise NotImplementedError()
def get_info_location(d: importlib.metadata.Distribution) -> Optional[BasePath]:
"""Find the path to the distribution's metadata directory.
HACK: This relies on importlib.metadata's private ``_path`` attribute. Not
all distributions exist on disk, so importlib.metadata is correct to not
expose the attribute as public. But pip's code base is old and not as clean,
so we do this to avoid having to rewrite too many things. Hopefully we can
eliminate this some day.
"""
return getattr(d, "_path", None)
def get_dist_name(dist: importlib.metadata.Distribution) -> str:
"""Get the distribution's project name.
The ``name`` attribute is only available in Python 3.10 or later. We are
targeting exactly that, but Mypy does not know this.
"""
name = cast(Any, dist).name
if not isinstance(name, str):
raise BadMetadata(dist, reason="invalid metadata entry 'name'")
return name

View File

@ -0,0 +1,224 @@
import email.message
import importlib.metadata
import os
import pathlib
import zipfile
from typing import (
Collection,
Dict,
Iterable,
Iterator,
Mapping,
Optional,
Sequence,
cast,
)
from pip._vendor.packaging.requirements import Requirement
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
from pip._vendor.packaging.version import parse as parse_version
from pip._internal.exceptions import InvalidWheel, UnsupportedWheel
from pip._internal.metadata.base import (
BaseDistribution,
BaseEntryPoint,
DistributionVersion,
InfoPath,
Wheel,
)
from pip._internal.utils.misc import normalize_path
from pip._internal.utils.packaging import safe_extra
from pip._internal.utils.temp_dir import TempDirectory
from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file
from ._compat import BasePath, get_dist_name
class WheelDistribution(importlib.metadata.Distribution):
"""An ``importlib.metadata.Distribution`` read from a wheel.
Although ``importlib.metadata.PathDistribution`` accepts ``zipfile.Path``,
its implementation is too "lazy" for pip's needs (we can't keep the ZipFile
handle open for the entire lifetime of the distribution object).
This implementation eagerly reads the entire metadata directory into the
memory instead, and operates from that.
"""
def __init__(
self,
files: Mapping[pathlib.PurePosixPath, bytes],
info_location: pathlib.PurePosixPath,
) -> None:
self._files = files
self.info_location = info_location
@classmethod
def from_zipfile(
cls,
zf: zipfile.ZipFile,
name: str,
location: str,
) -> "WheelDistribution":
info_dir, _ = parse_wheel(zf, name)
paths = (
(name, pathlib.PurePosixPath(name.split("/", 1)[-1]))
for name in zf.namelist()
if name.startswith(f"{info_dir}/")
)
files = {
relpath: read_wheel_metadata_file(zf, fullpath)
for fullpath, relpath in paths
}
info_location = pathlib.PurePosixPath(location, info_dir)
return cls(files, info_location)
def iterdir(self, path: InfoPath) -> Iterator[pathlib.PurePosixPath]:
# Only allow iterating through the metadata directory.
if pathlib.PurePosixPath(str(path)) in self._files:
return iter(self._files)
raise FileNotFoundError(path)
def read_text(self, filename: str) -> Optional[str]:
try:
data = self._files[pathlib.PurePosixPath(filename)]
except KeyError:
return None
try:
text = data.decode("utf-8")
except UnicodeDecodeError as e:
wheel = self.info_location.parent
error = f"Error decoding metadata for {wheel}: {e} in {filename} file"
raise UnsupportedWheel(error)
return text
class Distribution(BaseDistribution):
def __init__(
self,
dist: importlib.metadata.Distribution,
info_location: Optional[BasePath],
installed_location: Optional[BasePath],
) -> None:
self._dist = dist
self._info_location = info_location
self._installed_location = installed_location
@classmethod
def from_directory(cls, directory: str) -> BaseDistribution:
info_location = pathlib.Path(directory)
dist = importlib.metadata.Distribution.at(info_location)
return cls(dist, info_location, info_location.parent)
@classmethod
def from_metadata_file_contents(
cls,
metadata_contents: bytes,
filename: str,
project_name: str,
) -> BaseDistribution:
# Generate temp dir to contain the metadata file, and write the file contents.
temp_dir = pathlib.Path(
TempDirectory(kind="metadata", globally_managed=True).path
)
metadata_path = temp_dir / "METADATA"
metadata_path.write_bytes(metadata_contents)
# Construct dist pointing to the newly created directory.
dist = importlib.metadata.Distribution.at(metadata_path.parent)
return cls(dist, metadata_path.parent, None)
@classmethod
def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution:
try:
with wheel.as_zipfile() as zf:
dist = WheelDistribution.from_zipfile(zf, name, wheel.location)
except zipfile.BadZipFile as e:
raise InvalidWheel(wheel.location, name) from e
except UnsupportedWheel as e:
raise UnsupportedWheel(f"{name} has an invalid wheel, {e}")
return cls(dist, dist.info_location, pathlib.PurePosixPath(wheel.location))
@property
def location(self) -> Optional[str]:
if self._info_location is None:
return None
return str(self._info_location.parent)
@property
def info_location(self) -> Optional[str]:
if self._info_location is None:
return None
return str(self._info_location)
@property
def installed_location(self) -> Optional[str]:
if self._installed_location is None:
return None
return normalize_path(str(self._installed_location))
def _get_dist_name_from_location(self) -> Optional[str]:
"""Try to get the name from the metadata directory name.
This is much faster than reading metadata.
"""
if self._info_location is None:
return None
stem, suffix = os.path.splitext(self._info_location.name)
if suffix not in (".dist-info", ".egg-info"):
return None
return stem.split("-", 1)[0]
@property
def canonical_name(self) -> NormalizedName:
name = self._get_dist_name_from_location() or get_dist_name(self._dist)
return canonicalize_name(name)
@property
def version(self) -> DistributionVersion:
return parse_version(self._dist.version)
def is_file(self, path: InfoPath) -> bool:
return self._dist.read_text(str(path)) is not None
def iter_distutils_script_names(self) -> Iterator[str]:
# A distutils installation is always "flat" (not in e.g. egg form), so
# if this distribution's info location is NOT a pathlib.Path (but e.g.
# zipfile.Path), it can never contain any distutils scripts.
if not isinstance(self._info_location, pathlib.Path):
return
for child in self._info_location.joinpath("scripts").iterdir():
yield child.name
def read_text(self, path: InfoPath) -> str:
content = self._dist.read_text(str(path))
if content is None:
raise FileNotFoundError(path)
return content
def iter_entry_points(self) -> Iterable[BaseEntryPoint]:
# importlib.metadata's EntryPoint structure sasitfies BaseEntryPoint.
return self._dist.entry_points
def _metadata_impl(self) -> email.message.Message:
# From Python 3.10+, importlib.metadata declares PackageMetadata as the
# return type. This protocol is unfortunately a disaster now and misses
# a ton of fields that we need, including get() and get_payload(). We
# rely on the implementation that the object is actually a Message now,
# until upstream can improve the protocol. (python/cpython#94952)
return cast(email.message.Message, self._dist.metadata)
def iter_provided_extras(self) -> Iterable[str]:
return (
safe_extra(extra) for extra in self.metadata.get_all("Provides-Extra", [])
)
def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]:
contexts: Sequence[Dict[str, str]] = [{"extra": safe_extra(e)} for e in extras]
for req_string in self.metadata.get_all("Requires-Dist", []):
req = Requirement(req_string)
if not req.marker:
yield req
elif not extras and req.marker.evaluate({"extra": ""}):
yield req
elif any(req.marker.evaluate(context) for context in contexts):
yield req

View File

@ -0,0 +1,188 @@
import functools
import importlib.metadata
import logging
import os
import pathlib
import sys
import zipfile
import zipimport
from typing import Iterator, List, Optional, Sequence, Set, Tuple
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
from pip._internal.metadata.base import BaseDistribution, BaseEnvironment
from pip._internal.models.wheel import Wheel
from pip._internal.utils.deprecation import deprecated
from pip._internal.utils.filetypes import WHEEL_EXTENSION
from ._compat import BadMetadata, BasePath, get_dist_name, get_info_location
from ._dists import Distribution
logger = logging.getLogger(__name__)
def _looks_like_wheel(location: str) -> bool:
if not location.endswith(WHEEL_EXTENSION):
return False
if not os.path.isfile(location):
return False
if not Wheel.wheel_file_re.match(os.path.basename(location)):
return False
return zipfile.is_zipfile(location)
class _DistributionFinder:
"""Finder to locate distributions.
The main purpose of this class is to memoize found distributions' names, so
only one distribution is returned for each package name. At lot of pip code
assumes this (because it is setuptools's behavior), and not doing the same
can potentially cause a distribution in lower precedence path to override a
higher precedence one if the caller is not careful.
Eventually we probably want to make it possible to see lower precedence
installations as well. It's useful feature, after all.
"""
FoundResult = Tuple[importlib.metadata.Distribution, Optional[BasePath]]
def __init__(self) -> None:
self._found_names: Set[NormalizedName] = set()
def _find_impl(self, location: str) -> Iterator[FoundResult]:
"""Find distributions in a location."""
# Skip looking inside a wheel. Since a package inside a wheel is not
# always valid (due to .data directories etc.), its .dist-info entry
# should not be considered an installed distribution.
if _looks_like_wheel(location):
return
# To know exactly where we find a distribution, we have to feed in the
# paths one by one, instead of dumping the list to importlib.metadata.
for dist in importlib.metadata.distributions(path=[location]):
info_location = get_info_location(dist)
try:
raw_name = get_dist_name(dist)
except BadMetadata as e:
logger.warning("Skipping %s due to %s", info_location, e.reason)
continue
normalized_name = canonicalize_name(raw_name)
if normalized_name in self._found_names:
continue
self._found_names.add(normalized_name)
yield dist, info_location
def find(self, location: str) -> Iterator[BaseDistribution]:
"""Find distributions in a location.
The path can be either a directory, or a ZIP archive.
"""
for dist, info_location in self._find_impl(location):
if info_location is None:
installed_location: Optional[BasePath] = None
else:
installed_location = info_location.parent
yield Distribution(dist, info_location, installed_location)
def find_linked(self, location: str) -> Iterator[BaseDistribution]:
"""Read location in egg-link files and return distributions in there.
The path should be a directory; otherwise this returns nothing. This
follows how setuptools does this for compatibility. The first non-empty
line in the egg-link is read as a path (resolved against the egg-link's
containing directory if relative). Distributions found at that linked
location are returned.
"""
path = pathlib.Path(location)
if not path.is_dir():
return
for child in path.iterdir():
if child.suffix != ".egg-link":
continue
with child.open() as f:
lines = (line.strip() for line in f)
target_rel = next((line for line in lines if line), "")
if not target_rel:
continue
target_location = str(path.joinpath(target_rel))
for dist, info_location in self._find_impl(target_location):
yield Distribution(dist, info_location, path)
def _find_eggs_in_dir(self, location: str) -> Iterator[BaseDistribution]:
from pip._vendor.pkg_resources import find_distributions
from pip._internal.metadata import pkg_resources as legacy
with os.scandir(location) as it:
for entry in it:
if not entry.name.endswith(".egg"):
continue
for dist in find_distributions(entry.path):
yield legacy.Distribution(dist)
def _find_eggs_in_zip(self, location: str) -> Iterator[BaseDistribution]:
from pip._vendor.pkg_resources import find_eggs_in_zip
from pip._internal.metadata import pkg_resources as legacy
try:
importer = zipimport.zipimporter(location)
except zipimport.ZipImportError:
return
for dist in find_eggs_in_zip(importer, location):
yield legacy.Distribution(dist)
def find_eggs(self, location: str) -> Iterator[BaseDistribution]:
"""Find eggs in a location.
This actually uses the old *pkg_resources* backend. We likely want to
deprecate this so we can eventually remove the *pkg_resources*
dependency entirely. Before that, this should first emit a deprecation
warning for some versions when using the fallback since importing
*pkg_resources* is slow for those who don't need it.
"""
if os.path.isdir(location):
yield from self._find_eggs_in_dir(location)
if zipfile.is_zipfile(location):
yield from self._find_eggs_in_zip(location)
@functools.lru_cache(maxsize=None) # Warn a distribution exactly once.
def _emit_egg_deprecation(location: Optional[str]) -> None:
deprecated(
reason=f"Loading egg at {location} is deprecated.",
replacement="to use pip for package installation.",
gone_in=None,
)
class Environment(BaseEnvironment):
def __init__(self, paths: Sequence[str]) -> None:
self._paths = paths
@classmethod
def default(cls) -> BaseEnvironment:
return cls(sys.path)
@classmethod
def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment:
if paths is None:
return cls(sys.path)
return cls(paths)
def _iter_distributions(self) -> Iterator[BaseDistribution]:
finder = _DistributionFinder()
for location in self._paths:
yield from finder.find(location)
for dist in finder.find_eggs(location):
# _emit_egg_deprecation(dist.location) # TODO: Enable this.
yield dist
# This must go last because that's how pkg_resources tie-breaks.
yield from finder.find_linked(location)
def get_distribution(self, name: str) -> Optional[BaseDistribution]:
matches = (
distribution
for distribution in self.iter_all_distributions()
if distribution.canonical_name == canonicalize_name(name)
)
return next(matches, None)

View File

@ -0,0 +1,270 @@
import email.message
import email.parser
import logging
import os
import zipfile
from typing import Collection, Iterable, Iterator, List, Mapping, NamedTuple, Optional
from pip._vendor import pkg_resources
from pip._vendor.packaging.requirements import Requirement
from pip._vendor.packaging.utils import NormalizedName, canonicalize_name
from pip._vendor.packaging.version import parse as parse_version
from pip._internal.exceptions import InvalidWheel, NoneMetadataError, UnsupportedWheel
from pip._internal.utils.egg_link import egg_link_path_from_location
from pip._internal.utils.misc import display_path, normalize_path
from pip._internal.utils.wheel import parse_wheel, read_wheel_metadata_file
from .base import (
BaseDistribution,
BaseEntryPoint,
BaseEnvironment,
DistributionVersion,
InfoPath,
Wheel,
)
logger = logging.getLogger(__name__)
class EntryPoint(NamedTuple):
name: str
value: str
group: str
class InMemoryMetadata:
"""IMetadataProvider that reads metadata files from a dictionary.
This also maps metadata decoding exceptions to our internal exception type.
"""
def __init__(self, metadata: Mapping[str, bytes], wheel_name: str) -> None:
self._metadata = metadata
self._wheel_name = wheel_name
def has_metadata(self, name: str) -> bool:
return name in self._metadata
def get_metadata(self, name: str) -> str:
try:
return self._metadata[name].decode()
except UnicodeDecodeError as e:
# Augment the default error with the origin of the file.
raise UnsupportedWheel(
f"Error decoding metadata for {self._wheel_name}: {e} in {name} file"
)
def get_metadata_lines(self, name: str) -> Iterable[str]:
return pkg_resources.yield_lines(self.get_metadata(name))
def metadata_isdir(self, name: str) -> bool:
return False
def metadata_listdir(self, name: str) -> List[str]:
return []
def run_script(self, script_name: str, namespace: str) -> None:
pass
class Distribution(BaseDistribution):
def __init__(self, dist: pkg_resources.Distribution) -> None:
self._dist = dist
@classmethod
def from_directory(cls, directory: str) -> BaseDistribution:
dist_dir = directory.rstrip(os.sep)
# Build a PathMetadata object, from path to metadata. :wink:
base_dir, dist_dir_name = os.path.split(dist_dir)
metadata = pkg_resources.PathMetadata(base_dir, dist_dir)
# Determine the correct Distribution object type.
if dist_dir.endswith(".egg-info"):
dist_cls = pkg_resources.Distribution
dist_name = os.path.splitext(dist_dir_name)[0]
else:
assert dist_dir.endswith(".dist-info")
dist_cls = pkg_resources.DistInfoDistribution
dist_name = os.path.splitext(dist_dir_name)[0].split("-")[0]
dist = dist_cls(base_dir, project_name=dist_name, metadata=metadata)
return cls(dist)
@classmethod
def from_metadata_file_contents(
cls,
metadata_contents: bytes,
filename: str,
project_name: str,
) -> BaseDistribution:
metadata_dict = {
"METADATA": metadata_contents,
}
dist = pkg_resources.DistInfoDistribution(
location=filename,
metadata=InMemoryMetadata(metadata_dict, filename),
project_name=project_name,
)
return cls(dist)
@classmethod
def from_wheel(cls, wheel: Wheel, name: str) -> BaseDistribution:
try:
with wheel.as_zipfile() as zf:
info_dir, _ = parse_wheel(zf, name)
metadata_dict = {
path.split("/", 1)[-1]: read_wheel_metadata_file(zf, path)
for path in zf.namelist()
if path.startswith(f"{info_dir}/")
}
except zipfile.BadZipFile as e:
raise InvalidWheel(wheel.location, name) from e
except UnsupportedWheel as e:
raise UnsupportedWheel(f"{name} has an invalid wheel, {e}")
dist = pkg_resources.DistInfoDistribution(
location=wheel.location,
metadata=InMemoryMetadata(metadata_dict, wheel.location),
project_name=name,
)
return cls(dist)
@property
def location(self) -> Optional[str]:
return self._dist.location
@property
def installed_location(self) -> Optional[str]:
egg_link = egg_link_path_from_location(self.raw_name)
if egg_link:
location = egg_link
elif self.location:
location = self.location
else:
return None
return normalize_path(location)
@property
def info_location(self) -> Optional[str]:
return self._dist.egg_info
@property
def installed_by_distutils(self) -> bool:
# A distutils-installed distribution is provided by FileMetadata. This
# provider has a "path" attribute not present anywhere else. Not the
# best introspection logic, but pip has been doing this for a long time.
try:
return bool(self._dist._provider.path)
except AttributeError:
return False
@property
def canonical_name(self) -> NormalizedName:
return canonicalize_name(self._dist.project_name)
@property
def version(self) -> DistributionVersion:
return parse_version(self._dist.version)
def is_file(self, path: InfoPath) -> bool:
return self._dist.has_metadata(str(path))
def iter_distutils_script_names(self) -> Iterator[str]:
yield from self._dist.metadata_listdir("scripts")
def read_text(self, path: InfoPath) -> str:
name = str(path)
if not self._dist.has_metadata(name):
raise FileNotFoundError(name)
content = self._dist.get_metadata(name)
if content is None:
raise NoneMetadataError(self, name)
return content
def iter_entry_points(self) -> Iterable[BaseEntryPoint]:
for group, entries in self._dist.get_entry_map().items():
for name, entry_point in entries.items():
name, _, value = str(entry_point).partition("=")
yield EntryPoint(name=name.strip(), value=value.strip(), group=group)
def _metadata_impl(self) -> email.message.Message:
"""
:raises NoneMetadataError: if the distribution reports `has_metadata()`
True but `get_metadata()` returns None.
"""
if isinstance(self._dist, pkg_resources.DistInfoDistribution):
metadata_name = "METADATA"
else:
metadata_name = "PKG-INFO"
try:
metadata = self.read_text(metadata_name)
except FileNotFoundError:
if self.location:
displaying_path = display_path(self.location)
else:
displaying_path = repr(self.location)
logger.warning("No metadata found in %s", displaying_path)
metadata = ""
feed_parser = email.parser.FeedParser()
feed_parser.feed(metadata)
return feed_parser.close()
def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]:
if extras: # pkg_resources raises on invalid extras, so we sanitize.
extras = frozenset(extras).intersection(self._dist.extras)
return self._dist.requires(extras)
def iter_provided_extras(self) -> Iterable[str]:
return self._dist.extras
class Environment(BaseEnvironment):
def __init__(self, ws: pkg_resources.WorkingSet) -> None:
self._ws = ws
@classmethod
def default(cls) -> BaseEnvironment:
return cls(pkg_resources.working_set)
@classmethod
def from_paths(cls, paths: Optional[List[str]]) -> BaseEnvironment:
return cls(pkg_resources.WorkingSet(paths))
def _iter_distributions(self) -> Iterator[BaseDistribution]:
for dist in self._ws:
yield Distribution(dist)
def _search_distribution(self, name: str) -> Optional[BaseDistribution]:
"""Find a distribution matching the ``name`` in the environment.
This searches from *all* distributions available in the environment, to
match the behavior of ``pkg_resources.get_distribution()``.
"""
canonical_name = canonicalize_name(name)
for dist in self.iter_all_distributions():
if dist.canonical_name == canonical_name:
return dist
return None
def get_distribution(self, name: str) -> Optional[BaseDistribution]:
# Search the distribution by looking through the working set.
dist = self._search_distribution(name)
if dist:
return dist
# If distribution could not be found, call working_set.require to
# update the working set, and try to find the distribution again.
# This might happen for e.g. when you install a package twice, once
# using setup.py develop and again using setup.py install. Now when
# running pip uninstall twice, the package gets removed from the
# working set in the first uninstall, so we have to populate the
# working set again so that pip knows about it and the packages gets
# picked up and is successfully uninstalled the second time too.
try:
# We didn't pass in any version specifiers, so this can never
# raise pkg_resources.VersionConflict.
self._ws.require(name)
except pkg_resources.DistributionNotFound:
return None
return self._search_distribution(name)

View File

@ -0,0 +1,2 @@
"""A package that contains models that represent entities.
"""

View File

@ -0,0 +1,34 @@
from pip._vendor.packaging.version import parse as parse_version
from pip._internal.models.link import Link
from pip._internal.utils.models import KeyBasedCompareMixin
class InstallationCandidate(KeyBasedCompareMixin):
"""Represents a potential "candidate" for installation."""
__slots__ = ["name", "version", "link"]
def __init__(self, name: str, version: str, link: Link) -> None:
self.name = name
self.version = parse_version(version)
self.link = link
super().__init__(
key=(self.name, self.version, self.link),
defining_class=InstallationCandidate,
)
def __repr__(self) -> str:
return "<InstallationCandidate({!r}, {!r}, {!r})>".format(
self.name,
self.version,
self.link,
)
def __str__(self) -> str:
return "{!r} candidate (version {} at {})".format(
self.name,
self.version,
self.link,
)

View File

@ -0,0 +1,212 @@
""" PEP 610 """
import json
import re
import urllib.parse
from typing import Any, Dict, Iterable, Optional, Type, TypeVar, Union
__all__ = [
"DirectUrl",
"DirectUrlValidationError",
"DirInfo",
"ArchiveInfo",
"VcsInfo",
]
T = TypeVar("T")
DIRECT_URL_METADATA_NAME = "direct_url.json"
ENV_VAR_RE = re.compile(r"^\$\{[A-Za-z0-9-_]+\}(:\$\{[A-Za-z0-9-_]+\})?$")
class DirectUrlValidationError(Exception):
pass
def _get(
d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None
) -> Optional[T]:
"""Get value from dictionary and verify expected type."""
if key not in d:
return default
value = d[key]
if not isinstance(value, expected_type):
raise DirectUrlValidationError(
"{!r} has unexpected type for {} (expected {})".format(
value, key, expected_type
)
)
return value
def _get_required(
d: Dict[str, Any], expected_type: Type[T], key: str, default: Optional[T] = None
) -> T:
value = _get(d, expected_type, key, default)
if value is None:
raise DirectUrlValidationError(f"{key} must have a value")
return value
def _exactly_one_of(infos: Iterable[Optional["InfoType"]]) -> "InfoType":
infos = [info for info in infos if info is not None]
if not infos:
raise DirectUrlValidationError(
"missing one of archive_info, dir_info, vcs_info"
)
if len(infos) > 1:
raise DirectUrlValidationError(
"more than one of archive_info, dir_info, vcs_info"
)
assert infos[0] is not None
return infos[0]
def _filter_none(**kwargs: Any) -> Dict[str, Any]:
"""Make dict excluding None values."""
return {k: v for k, v in kwargs.items() if v is not None}
class VcsInfo:
name = "vcs_info"
def __init__(
self,
vcs: str,
commit_id: str,
requested_revision: Optional[str] = None,
) -> None:
self.vcs = vcs
self.requested_revision = requested_revision
self.commit_id = commit_id
@classmethod
def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["VcsInfo"]:
if d is None:
return None
return cls(
vcs=_get_required(d, str, "vcs"),
commit_id=_get_required(d, str, "commit_id"),
requested_revision=_get(d, str, "requested_revision"),
)
def _to_dict(self) -> Dict[str, Any]:
return _filter_none(
vcs=self.vcs,
requested_revision=self.requested_revision,
commit_id=self.commit_id,
)
class ArchiveInfo:
name = "archive_info"
def __init__(
self,
hash: Optional[str] = None,
) -> None:
self.hash = hash
@classmethod
def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["ArchiveInfo"]:
if d is None:
return None
return cls(hash=_get(d, str, "hash"))
def _to_dict(self) -> Dict[str, Any]:
return _filter_none(hash=self.hash)
class DirInfo:
name = "dir_info"
def __init__(
self,
editable: bool = False,
) -> None:
self.editable = editable
@classmethod
def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["DirInfo"]:
if d is None:
return None
return cls(editable=_get_required(d, bool, "editable", default=False))
def _to_dict(self) -> Dict[str, Any]:
return _filter_none(editable=self.editable or None)
InfoType = Union[ArchiveInfo, DirInfo, VcsInfo]
class DirectUrl:
def __init__(
self,
url: str,
info: InfoType,
subdirectory: Optional[str] = None,
) -> None:
self.url = url
self.info = info
self.subdirectory = subdirectory
def _remove_auth_from_netloc(self, netloc: str) -> str:
if "@" not in netloc:
return netloc
user_pass, netloc_no_user_pass = netloc.split("@", 1)
if (
isinstance(self.info, VcsInfo)
and self.info.vcs == "git"
and user_pass == "git"
):
return netloc
if ENV_VAR_RE.match(user_pass):
return netloc
return netloc_no_user_pass
@property
def redacted_url(self) -> str:
"""url with user:password part removed unless it is formed with
environment variables as specified in PEP 610, or it is ``git``
in the case of a git URL.
"""
purl = urllib.parse.urlsplit(self.url)
netloc = self._remove_auth_from_netloc(purl.netloc)
surl = urllib.parse.urlunsplit(
(purl.scheme, netloc, purl.path, purl.query, purl.fragment)
)
return surl
def validate(self) -> None:
self.from_dict(self.to_dict())
@classmethod
def from_dict(cls, d: Dict[str, Any]) -> "DirectUrl":
return DirectUrl(
url=_get_required(d, str, "url"),
subdirectory=_get(d, str, "subdirectory"),
info=_exactly_one_of(
[
ArchiveInfo._from_dict(_get(d, dict, "archive_info")),
DirInfo._from_dict(_get(d, dict, "dir_info")),
VcsInfo._from_dict(_get(d, dict, "vcs_info")),
]
),
)
def to_dict(self) -> Dict[str, Any]:
res = _filter_none(
url=self.redacted_url,
subdirectory=self.subdirectory,
)
res[self.info.name] = self.info._to_dict()
return res
@classmethod
def from_json(cls, s: str) -> "DirectUrl":
return cls.from_dict(json.loads(s))
def to_json(self) -> str:
return json.dumps(self.to_dict(), sort_keys=True)
def is_local_editable(self) -> bool:
return isinstance(self.info, DirInfo) and self.info.editable

View File

@ -0,0 +1,80 @@
from typing import FrozenSet, Optional, Set
from pip._vendor.packaging.utils import canonicalize_name
from pip._internal.exceptions import CommandError
class FormatControl:
"""Helper for managing formats from which a package can be installed."""
__slots__ = ["no_binary", "only_binary"]
def __init__(
self,
no_binary: Optional[Set[str]] = None,
only_binary: Optional[Set[str]] = None,
) -> None:
if no_binary is None:
no_binary = set()
if only_binary is None:
only_binary = set()
self.no_binary = no_binary
self.only_binary = only_binary
def __eq__(self, other: object) -> bool:
if not isinstance(other, self.__class__):
return NotImplemented
if self.__slots__ != other.__slots__:
return False
return all(getattr(self, k) == getattr(other, k) for k in self.__slots__)
def __repr__(self) -> str:
return "{}({}, {})".format(
self.__class__.__name__, self.no_binary, self.only_binary
)
@staticmethod
def handle_mutual_excludes(value: str, target: Set[str], other: Set[str]) -> None:
if value.startswith("-"):
raise CommandError(
"--no-binary / --only-binary option requires 1 argument."
)
new = value.split(",")
while ":all:" in new:
other.clear()
target.clear()
target.add(":all:")
del new[: new.index(":all:") + 1]
# Without a none, we want to discard everything as :all: covers it
if ":none:" not in new:
return
for name in new:
if name == ":none:":
target.clear()
continue
name = canonicalize_name(name)
other.discard(name)
target.add(name)
def get_allowed_formats(self, canonical_name: str) -> FrozenSet[str]:
result = {"binary", "source"}
if canonical_name in self.only_binary:
result.discard("source")
elif canonical_name in self.no_binary:
result.discard("binary")
elif ":all:" in self.only_binary:
result.discard("source")
elif ":all:" in self.no_binary:
result.discard("binary")
return frozenset(result)
def disallow_binaries(self) -> None:
self.handle_mutual_excludes(
":all:",
self.no_binary,
self.only_binary,
)

View File

@ -0,0 +1,28 @@
import urllib.parse
class PackageIndex:
"""Represents a Package Index and provides easier access to endpoints"""
__slots__ = ["url", "netloc", "simple_url", "pypi_url", "file_storage_domain"]
def __init__(self, url: str, file_storage_domain: str) -> None:
super().__init__()
self.url = url
self.netloc = urllib.parse.urlsplit(url).netloc
self.simple_url = self._url_for_path("simple")
self.pypi_url = self._url_for_path("pypi")
# This is part of a temporary hack used to block installs of PyPI
# packages which depend on external urls only necessary until PyPI can
# block such packages themselves
self.file_storage_domain = file_storage_domain
def _url_for_path(self, path: str) -> str:
return urllib.parse.urljoin(self.url, path)
PyPI = PackageIndex("https://pypi.org/", file_storage_domain="files.pythonhosted.org")
TestPyPI = PackageIndex(
"https://test.pypi.org/", file_storage_domain="test-files.pythonhosted.org"
)

Some files were not shown because too many files have changed in this diff Show More