diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 07d400f..aea6701 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest] python: ["3.10", "3.x"] steps: - uses: actions/checkout@v2 @@ -22,7 +22,7 @@ jobs: - name: Install package run: poetry install - name: Run tests - run: sudo $(poetry env info -p)/bin/pytest --cov=fast_mda_traceroute --cov-report=xml + run: sudo $(poetry env info -p)/bin/pytest -n 4 --cov=fast_mda_traceroute --cov-report=xml - uses: codecov/codecov-action@v2 docker: diff --git a/.gitignore b/.gitignore index d6db8ec..918a493 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,9 @@ __pycache__/ *.py[cod] *$py.class +# MacOS +.DS_Store + # C extensions *.so @@ -20,6 +23,7 @@ parts/ sdist/ var/ wheels/ +prof/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4133578..782e01b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,29 +1,29 @@ repos: - repo: https://github.com/PyCQA/autoflake - rev: v1.4 + rev: v2.3.1 hooks: - id: autoflake args: ["--in-place", "--remove-all-unused-imports"] -- repo: https://github.com/timothycrosley/isort - rev: 5.10.1 +- repo: https://github.com/PyCQA/isort + rev: 5.13.2 hooks: - id: isort args: [--profile=black] - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 24.2.0 hooks: - id: black -- repo: https://gitlab.com/pycqa/flake8 - rev: 3.9.2 +- repo: https://github.com/PyCQA/flake8 + rev: 7.0.0 hooks: - id: flake8 args: [--ignore=E501] - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.1.0 + rev: v4.5.0 hooks: - id: trailing-whitespace exclude_types: diff --git a/fast_mda_traceroute/algorithms/diamond_miner.py b/fast_mda_traceroute/algorithms/diamond_miner.py index 76e4107..70b4c7c 100644 --- a/fast_mda_traceroute/algorithms/diamond_miner.py +++ b/fast_mda_traceroute/algorithms/diamond_miner.py @@ -1,15 +1,24 @@ from collections import defaultdict -from random import shuffle +from math import ceil from typing import Dict, List, Set +from collections import Counter + from diamond_miner.generators import probe_generator from diamond_miner.mappers import SequentialFlowMapper -from diamond_miner.mda import stopping_point from diamond_miner.typing import Probe from more_itertools import flatten from pycaracal import Reply -from fast_mda_traceroute.links import get_links_by_ttl +from fast_mda_traceroute.logger import logger +from fast_mda_traceroute.algorithms.utils.stopping_point import ( + estimate_total_interfaces, + reach_prob, + stopping_point, +) +from fast_mda_traceroute.links import ( + get_links_by_ttl, +) from fast_mda_traceroute.typing import Link from fast_mda_traceroute.utils import is_ipv4 @@ -25,18 +34,20 @@ def __init__( src_port: int, dst_port: int, protocol: str, - confidence: int, + confidence: float, max_round: int, ): if protocol == "icmp" and not is_ipv4(dst_addr): protocol = "icmp6" - self.failure_probability = 1 - (confidence / 100) + self.failure_probability = 1.0 - (confidence / 100.0) self.dst_addr = dst_addr self.min_ttl = min_ttl self.max_ttl = max_ttl self.src_port = src_port self.dst_port = dst_port self.protocol = protocol + # We only use a prefix_size of 1 for direct + # point-to-point paths self.mapper_v4 = SequentialFlowMapper(prefix_size=1) self.mapper_v6 = SequentialFlowMapper(prefix_size=1) self.max_round = max_round @@ -44,10 +55,11 @@ def __init__( self.current_round = 0 self.probes_sent: Dict[int, int] = defaultdict(int) self.replies_by_round: Dict[int, List[Reply]] = {} + self.n_unresolved = [0 for _ in range(self.max_ttl + 1)] @property def links_by_ttl(self) -> Dict[int, Set[Link]]: - return get_links_by_ttl(self.time_exceeded_replies) + return get_links_by_ttl(tuple(self.time_exceeded_replies)) @property def links(self) -> Set[Link]: @@ -55,34 +67,254 @@ def links(self) -> Set[Link]: @property def replies(self) -> List[Reply]: - return list(flatten(self.replies_by_round.values())) + return tuple(flatten(self.replies_by_round.values())) @property def time_exceeded_replies(self) -> List[Reply]: - return [x for x in self.replies if x.time_exceeded] + return (x for x in self.replies if x.time_exceeded) + + @property + def destination_unreachable_replies(self) -> List[Reply]: + return [x for x in self.replies if x.destination_unreachable] + + @property + def echo_replies(self) -> List[Reply]: + return [x for x in self.replies if x.echo_reply] + + @property + def response_replies(self) -> List[Reply]: + return [x for x in self.replies if x.echo_reply or x.time_exceeded] + + def nodes_ttl(self, ttl) -> Set[Reply]: + return set( + [r.reply_src_addr for r in self.time_exceeded_replies if r.probe_ttl == ttl] + ) + + def nodes_distribution_at_ttl(self, nodes: List[str], ttl: int) -> Dict[str, float]: + # a routine to fetch the number of replies from a given node at a given TTL + # NOTE: a node may appear at multiple TTLs + def node_replies(node, ttl): + return len( + [ + r + for r in self.replies + if r.reply_src_addr == node and r.probe_ttl == ttl + ] + ) + + # total number of observations of links reaching nodes at the current ttl. + # since links are stored with the 'near_ttl', + # we need to fetch them at ttl-1 + + link_dist = {node: node_replies(node, ttl) for node in nodes} + total = sum(link_dist.values()) + if total: + link_dist = {k: v / total for k, v in link_dist.items()} + + logger.debug("link_dist at ttl %d: %s", ttl, link_dist) + else: + # if we did not observe links at the previous ttl + # we won't apply weights to the n_k afterwards + logger.debug("No links at ttl %d", ttl) + link_dist = {node: 1.0 / len(nodes) for node in nodes} + + return link_dist + + def unresolved_nodes_at_ttl( + self, ttl: int, optimal_jump: bool = False + ) -> tuple[list[str], int]: + # returns the list of unresolved nodes at a given TTL + # a node is said to be unresolved if not enough probes + # have observed the outgoing links of this node. + # This threshold is given by the stopping_point routine. + # Resolved vertices correspond to nodes where all + # outgoing load balanced links have been discovered + # with high probability toward the destination. + unresolved = [] + weighted_thresholds = [] + + # fetch the nodes at this TTL + nodes_at_ttl = set( + filter( + bool, + (r.reply_src_addr for r in self.replies if r.probe_ttl == ttl), + ) + ) + + if nodes_at_ttl: + logger.debug("Nodes at TTL %d: %s", ttl, nodes_at_ttl) + else: + logger.debug("No nodes at TTL %d", ttl) + + # fetch the distribution of the nodes at this TTL. + # this is important to determine what percentage of probes + # sent to this TTL will eventually reach each specific node. + link_dist = self.nodes_distribution_at_ttl(nodes_at_ttl, ttl) + + for node in nodes_at_ttl: + if node == self.dst_addr: + continue + # number of unique nodes at the next TTL that share a link with the node + successors = set( + [ + x[2] + for x in self.links_by_ttl[ttl] + if x[1] == node and x[2] is not None + ] + ) + + n_successors = len(successors) + + if n_successors == 0 and node != self.dst_addr: + # set to 1 if we did not receive any reply from the node + logger.debug( + "|> Node %s has no successors and is not destination", node + ) + n_successors = 1 + else: + logger.debug("Detected %d successors for node %s", n_successors, node) + + # the minimum number of probes to send to confirm we got all successors + # We try to dismiss the hypothesis that there are more successors + # than we observed + + # n_k = stopping_point(max(n_successors, 1), self.failure_probability) + n_k = stopping_point(n_successors, self.failure_probability) + reach_p = reach_prob(n_successors + 1, n_k) - def next_round(self, replies: List[Reply]) -> List[Probe]: + logger.debug("Stopping point for node %s: %d", node, n_k) + logger.debug("Reach probability for node %s: %f", node, reach_p) + + # number of outgoing probes that went through the node + n_probes = len( + [x for x in self.links_by_ttl[ttl] if x[1] == node and x[2] is not None] + ) + + logger.debug( + "Detected %d outgoing links (probes) for node %s at ttl %d", + n_probes, + node, + ttl, + ) + + logger.debug( + "Expected %d probes for node %s at ttl %d and already sent %d through", + n_k, + node, + ttl, + n_probes, + ) + if n_successors == 0: + logger.debug("|> Node %s has no successors", node) + logger.debug("|> n_k = %d", n_k) + logger.debug("|> n_probes = %d", n_probes) + continue + + if n_probes >= n_k: + logger.debug("|> Node %s is resolved", node) + continue + + # if we have not sent enough probes for this node + if n_probes < n_k and n_successors > 0: + logger.debug("|> Node %s is therefore unresolved", node) + # mark the node as unresolved + unresolved.append(node) + + # we store the total number of probes to send to get confirmation: + # it is the threshold n_k weighted by how difficult it is to reach + # this node, i.e. the distribution of probes that reach this node + if optimal_jump and n_probes > 0: + opti_N = estimate_total_interfaces(n_probes, n_successors) + opti_n_k = stopping_point(opti_N, self.failure_probability) + weighted_thresholds.append(max(n_k, opti_n_k) / link_dist[node]) + else: + weighted_thresholds.append(n_k / link_dist[node]) + + logger.debug( + "|> At ttl %d, the distribution of nodes is %s", ttl, link_dist + ) + logger.debug("|> Its distribution is %f", link_dist[node]) + logger.debug( + "|> Node %s is unresolved, with a weighted threshold of %d", + node, + n_k / link_dist[node], + ) + + # we store the number of unresolved nodes at each TTL for logging purposes + self.n_unresolved[ttl] = len(unresolved) + if unresolved: + logger.debug("Unresolved nodes at TTL %d: %s", ttl, unresolved) + logger.debug( + "|> Weighted thresholds at TTL %d: %s", + ttl, + ceil(max(weighted_thresholds, default=0)), + ) + + return unresolved, ceil(max(weighted_thresholds, default=0)) + + def next_round( + self, replies: List[Reply], optimal_jump: bool = False + ) -> List[Probe]: self.current_round += 1 + self.replies_by_round[self.current_round] = replies + logger.debug("######### Round %d: %d replies", self.current_round, len(replies)) + replies_by_ttl = defaultdict(list) + for reply in replies: + replies_by_ttl[reply.probe_ttl].append(reply) + for ttl, ttl_replies in sorted(replies_by_ttl.items(), key=lambda x: x[0]): + # log replies at each TTL + # log content of replies at each TTL + logger.debug( + "Replies @ TTL %d from: %s", + ttl, + Counter(x.reply_src_addr for x in ttl_replies), + ) if self.current_round > self.max_round: return [] + max_flows_by_ttl = defaultdict(int) + if self.current_round == 1: - # TODO: Iteratively find the destination TTL (with a single flow?). - # max_flow = stopping_point(2, self.failure_probability) - max_flow = 1 - flows_by_ttl = { - ttl: range(max_flow) for ttl in range(self.min_ttl, self.max_ttl + 1) + # NOTE: we cannot reliably infer the destination TTL + # because it may not be unique. + # we could send only one probe per TTL, but that would not + # resolve any node. + + max_flow = stopping_point(1, self.failure_probability) + max_flows_by_ttl = { + ttl: max_flow for ttl in range(self.min_ttl, self.max_ttl + 1) } else: - # TODO: Detect loop+amplification - flows_by_ttl = {} - for ttl, links in self.links_by_ttl.items(): - # TODO: Full/Lite MDA; see Multilevel MDA-Lite paper. - max_flow = stopping_point(len(links) + 1, self.failure_probability) - flows_by_ttl[ttl] = range(self.probes_sent[ttl], max_flow) - # TODO: Maximum over TTL (h-1, h); cf. Diamond-Miner paper `Proposition 1`. + max_flows_by_ttl = { + ttl: self.unresolved_nodes_at_ttl(ttl, optimal_jump)[1] + for ttl in range(self.min_ttl, self.max_ttl + 1) + } + + # See Proposition 1 in the original Diamond Miner paper. + # The max flow for a TTL is the one computed for unresolved nodes at this TTL + # or the one computed at the previous TTL to traverse the previous TTL: + # we take the max of both values. + + def combined_max_flow(ttl): + if ttl < self.min_ttl or ttl > self.max_ttl: + return 1 + return min( + max( + max_flows_by_ttl[ttl], + max_flows_by_ttl.get(ttl - 1, 1), + ), + 2**16, + ) + + flows_by_ttl = { + ttl: range( + self.probes_sent[ttl], + combined_max_flow(ttl), + ) + for ttl in range(self.min_ttl, self.max_ttl + 1) + } probes = [] for ttl, flows in flows_by_ttl.items(): @@ -99,8 +331,13 @@ def next_round(self, replies: List[Reply]) -> List[Probe]: mapper_v6=self.mapper_v6, ) ) + logger.debug( + "Round %d: Sending %d probes to TTL %d", + self.current_round, + len(probes_for_ttl), + ttl, + ) self.probes_sent[ttl] += len(probes_for_ttl) probes.extend(probes_for_ttl) - shuffle(probes) return probes diff --git a/fast_mda_traceroute/algorithms/utils/__init__.py b/fast_mda_traceroute/algorithms/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fast_mda_traceroute/algorithms/utils/stopping_point.py b/fast_mda_traceroute/algorithms/utils/stopping_point.py new file mode 100644 index 0000000..24da9e8 --- /dev/null +++ b/fast_mda_traceroute/algorithms/utils/stopping_point.py @@ -0,0 +1,93 @@ +from functools import cache +import math + +from scipy.special import comb, stirling2 + +MAX_INTERFACES = 1024 + + +def event_prob(n_probes, observed_interfaces, total_interfaces): + # Computes the probability of observing exactly observed_interfaces interfaces + # after sending n_probes probes to total_interfaces interfaces + if ( + observed_interfaces > total_interfaces + or n_probes <= 0 + or observed_interfaces <= 0 + or observed_interfaces > n_probes + ): + return 0.0 + + # We choose k interfaces among K + # We then have to pick a distribution of the n probes in k non-empty sets + # We have k! to match the k interfaces with the k sets + # There is a total K^n ways to distribute the n probes among the K interfaces + + stirling = stirling2(n_probes, observed_interfaces, exact=False) + + binom = comb(total_interfaces, observed_interfaces, exact=False) + if binom == float("inf") or stirling == float("inf"): + return 1.0 + + return ( + int(stirling * binom) + * math.factorial(observed_interfaces) + / total_interfaces**n_probes + ) + + +def estimate_total_interfaces(n_probes, observed_interfaces, likelihood_threshold=0.95): + # Gives the optimal estimation for the number of interfaces + # given the number of probes and the number of observed interfaces + if n_probes < observed_interfaces: + raise ValueError( + f"{n_probes=} must be greater or equal to {observed_interfaces=}" + ) + + if n_probes == observed_interfaces: + for total_interfaces in range(observed_interfaces, MAX_INTERFACES): + prob = event_prob(n_probes, observed_interfaces, total_interfaces) + if prob > likelihood_threshold: + return total_interfaces + else: + return observed_interfaces + + prev_prob = 0 + for total_interfaces in range(observed_interfaces - 1, MAX_INTERFACES): + prob = event_prob(n_probes, observed_interfaces, total_interfaces) + if prob > likelihood_threshold: + return total_interfaces + if prob < prev_prob: + return total_interfaces - 1 + prev_prob = prob + else: + return observed_interfaces + + +@cache +def reach_prob(total_interfaces: int, n_probes: int) -> float: + # Hypothesis: there are total_interfaces interfaces in total, and sent n_probes. + # what is the probability to reach all interfaces? + return event_prob(n_probes, total_interfaces, total_interfaces) + + +@cache +def stopping_point(n_interfaces: int, failure_probability: float) -> int: + # computes the minimal number of probes required to have reach_prob > a threshold + n_probes = 0 + growth_factor = 3 + upper_bound = 6 + lower_bound = 1 + + while reach_prob(n_interfaces + 1, upper_bound) < (1 - failure_probability): + lower_bound = upper_bound + upper_bound = int(upper_bound * growth_factor) + + # dichotomy search for the lowest n_probes that satisfies the condition + + while upper_bound - lower_bound > 1: + n_probes = (upper_bound + lower_bound) // 2 + if reach_prob(n_interfaces + 1, n_probes) > (1 - failure_probability): + upper_bound = n_probes + else: + lower_bound = n_probes + return upper_bound diff --git a/fast_mda_traceroute/cli.py b/fast_mda_traceroute/cli.py index 993b281..940a05a 100644 --- a/fast_mda_traceroute/cli.py +++ b/fast_mda_traceroute/cli.py @@ -1,10 +1,12 @@ import json import logging +import os import socket import sys from datetime import datetime from random import randint from typing import List, Optional +from collections import Counter import pycaracal import typer @@ -44,6 +46,19 @@ def version_callback(value: bool): raise typer.Exit() +def fancy_log(max_ttl, alg, probes): + unresolved = [alg.n_unresolved[ttl] for ttl in range(max_ttl + 1)] + logger.debug("unresolved=%s", unresolved) + c = Counter(p.ttl for p in probes) + sending = [c[ttl] for ttl in range(max_ttl + 1)] + logger.debug("sending...=%s", sending) + shape = [] + for ttl in range(max_ttl + 1): + size = len(set(alg.links_by_ttl[ttl])) + shape.append(size) + logger.debug("shape....=%s", shape) + + @app.command() def main( af: AddressFamily = typer.Option( @@ -71,10 +86,10 @@ def main( OutputFormat.Table.value, help="Output format.", ), - confidence: int = typer.Option( - 95, - min=0, - max=99, + confidence: float = typer.Option( + 95.0, + min=0.0, + max=99.99, metavar="CONFIDENCE", help="Probability of discovering all the nodes at a given in TTL, in percent.", ), @@ -132,6 +147,10 @@ def main( metavar="BYTES", help="Receiver buffer size in bytes.", ), + optimal_jump: bool = typer.Option( + False, + help="Whether to use the jump-ahead optimization to minimize the number of rounds.", + ), integrity_check: bool = typer.Option( True, help="Whether to verify that replies match valid probes or not.", @@ -217,19 +236,30 @@ def main( start_time = datetime.now() last_replies: List[Reply] = [] while True: - probes = [Probe(*x) for x in alg.next_round(last_replies)] + prep_start = datetime.now() + probes = [Probe(*x) for x in alg.next_round(last_replies, optimal_jump)] + prep_end = datetime.now() + logger.info("prep_time=%s", (prep_end - prep_start)) + total_ips = set(r.reply_src_addr for r in alg.replies) logger.info( - "round=%d links_found=%d probes=%d expected_time=%.1fs", + "round=%d links_found=%d total_ip=%d probes=%d expected_time=%.1fs", alg.current_round, len(alg.links), + len(total_ips), len(probes), len(probes) / probing_rate, ) + if logger.level == logging.DEBUG: + fancy_log(max_ttl, alg, probes) if not probes: break last_replies = prober.probe(probes, wait) stop_time = datetime.now() + relevant_replies = list(alg.time_exceeded_replies) + [ + r for r in alg.echo_replies if r.reply_src_addr == destination + ] + if format == OutputFormat.ScamperJSON: objs = format_scamper_json( confidence, @@ -245,11 +275,13 @@ def main( start_time, stop_time, alg.probes_sent, - alg.time_exceeded_replies, + relevant_replies, ) for obj in objs: print(json.dumps(obj)) elif format == OutputFormat.Table: - print(format_table(alg.time_exceeded_replies)) - else: - print(format_traceroute(alg.time_exceeded_replies)) + # TODO: set relevant replies here + print(format_table(relevant_replies)) + elif format == OutputFormat.Traceroute: + # TODO: set relevant replies here + print(format_traceroute(relevant_replies)) diff --git a/fast_mda_traceroute/formats/traceroute.py b/fast_mda_traceroute/formats/traceroute.py index 14b6905..1e1d64a 100644 --- a/fast_mda_traceroute/formats/traceroute.py +++ b/fast_mda_traceroute/formats/traceroute.py @@ -18,7 +18,10 @@ def format_traceroute(replies: List[Reply]) -> str: replies, lambda x: x.probe_ttl, lambda x: x.reply_src_addr, set ) output = "" - for ttl in range(min(nodes_by_ttl), min(max(nodes_by_ttl), destination_ttl) + 1): + for ttl in range( + min(nodes_by_ttl, default=0), + min(max(nodes_by_ttl, default=255), destination_ttl) + 1, + ): output += f"{ttl} " output += " ".join(nodes_by_ttl.get(ttl, [])) output += "\n" diff --git a/fast_mda_traceroute/links.py b/fast_mda_traceroute/links.py index 876b7d8..8427725 100644 --- a/fast_mda_traceroute/links.py +++ b/fast_mda_traceroute/links.py @@ -1,4 +1,5 @@ from collections import defaultdict +from functools import cache from typing import Dict, List, Optional, Set from more_itertools import map_reduce @@ -7,6 +8,7 @@ from fast_mda_traceroute.typing import Flow, Link, Pair +@cache def get_replies_by_flow(replies: List[Reply]) -> Dict[Flow, List[Reply]]: return map_reduce( replies, @@ -19,16 +21,41 @@ def get_replies_by_flow(replies: List[Reply]) -> Dict[Flow, List[Reply]]: ) +@cache def get_replies_by_ttl(replies: List[Reply]) -> Dict[int, List[Reply]]: return map_reduce(replies, lambda x: x.probe_ttl) # type: ignore +def get_successors(replies: List[Reply], src: str) -> Set[str]: + successors = set() + # fetch the addresses that are one hop away from the source and that have been reached + # with a flow id that also reached the source + ttls = [x.probe_ttl for x in replies if x.reply_src_addr == src] + for flow, replies in get_replies_by_flow(replies).items(): + if any(x.reply_src_addr == src for x in replies): + for reply in replies: + if reply.probe_ttl - 1 in ttls: + successors.add(reply.reply_src_addr) + + return successors + + +def get_flow_ids(replies: List[Reply], src: str) -> Set[Flow]: + flow_ids = set() + for flow, replies in get_replies_by_flow(replies).items(): + if any(x.reply_src_addr == src for x in replies): + flow_ids.add(flow) + return flow_ids + + +@cache def get_pairs_by_flow(replies: List[Reply]) -> Dict[Flow, List[Pair]]: pairs_by_flow = defaultdict(list) replies_by_flow = get_replies_by_flow(replies) + for flow, replies in replies_by_flow.items(): - replies_by_ttl = get_replies_by_ttl(replies) - for near_ttl in range(min(replies_by_ttl), max(replies_by_ttl)): + replies_by_ttl = get_replies_by_ttl(tuple(replies)) + for near_ttl in range(min(replies_by_ttl) - 1, max(replies_by_ttl)): near_replies = replies_by_ttl.get(near_ttl, [None]) far_replies = replies_by_ttl.get(near_ttl + 1, [None]) for near_reply in near_replies: @@ -37,12 +64,34 @@ def get_pairs_by_flow(replies: List[Reply]) -> Dict[Flow, List[Pair]]: return pairs_by_flow -def get_links_by_ttl(replies: List[Reply]) -> Dict[int, Set[Link]]: - links_by_ttl = defaultdict(set) +def get_links_by_flow_by_ttl(replies: List[Reply]) -> Dict[int, Dict[Flow, Set[Link]]]: + links_by_ttl = defaultdict(dict) pairs_by_flow = get_pairs_by_flow(replies) for flow, pairs in pairs_by_flow.items(): for near_ttl, near_reply, far_reply in pairs: - links_by_ttl[near_ttl].add( + if near_reply: + links_ttl = links_by_ttl[near_ttl] + if near_reply.reply_src_addr not in links_ttl: + links_ttl[near_reply.reply_src_addr] = set() + links_by_ttl[near_ttl][near_reply.reply_src_addr].add( + ( + near_ttl, + near_reply.reply_src_addr if near_reply else None, + far_reply.reply_src_addr if far_reply else None, + ) + ) + return links_by_ttl + + +@cache +def get_links_by_ttl(replies: List[Reply]) -> Dict[int, Set[Link]]: + # links_by_ttl = defaultdict(set) + links_by_ttl = defaultdict(list) + pairs_by_flow = get_pairs_by_flow(tuple(replies)) + + for flow, pairs in pairs_by_flow.items(): + for near_ttl, near_reply, far_reply in pairs: + links_by_ttl[near_ttl].append( ( near_ttl, near_reply.reply_src_addr if near_reply else None, @@ -59,9 +108,9 @@ def get_scamper_links( links: Dict[str, Dict[int, Dict[Optional[str], List[Reply]]]] = defaultdict( lambda: defaultdict(lambda: defaultdict(list)) ) - replies_by_flow = get_replies_by_flow(replies) + replies_by_flow = get_replies_by_flow(tuple(replies)) for flow, flow_replies in replies_by_flow.items(): - replies_by_ttl = get_replies_by_ttl(flow_replies) + replies_by_ttl = get_replies_by_ttl(tuple(flow_replies)) for near_ttl in range(min(replies_by_ttl), max(replies_by_ttl)): # TODO: Handle per-packet load-balancing. far_ttl = near_ttl + 1 diff --git a/fast_mda_traceroute/logger.py b/fast_mda_traceroute/logger.py index 7a0a16d..897e017 100644 --- a/fast_mda_traceroute/logger.py +++ b/fast_mda_traceroute/logger.py @@ -1,3 +1,11 @@ +import sys import logging +logging.basicConfig( + format="[%(asctime)s] %(message)s", + level=logging.INFO, + stream=sys.stderr, +) + logger = logging.getLogger("fast_mda_traceroute") +logger.setLevel(logging.INFO) diff --git a/fast_mda_traceroute/typing.py b/fast_mda_traceroute/typing.py index 31af81d..da761cf 100644 --- a/fast_mda_traceroute/typing.py +++ b/fast_mda_traceroute/typing.py @@ -41,6 +41,7 @@ class OutputFormat(Enum): ScamperJSON = "scamper-json" Table = "table" Traceroute = "traceroute" + Quiet = "quiet" class Protocol(Enum): diff --git a/poetry.lock b/poetry.lock index b06ed87..8f8500e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,88 +1,166 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + [[package]] name = "anyio" -version = "3.6.2" +version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.8" +files = [ + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, +] [package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] -name = "attrs" -version = "22.2.0" -description = "Classes Without Boilerplate" -category = "dev" +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" optional = false -python-versions = ">=3.6" +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" [package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "bump2version" version = "1.0.1" description = "Version-bump your software with a single command!" -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "bump2version-1.0.1-py2.py3-none-any.whl", hash = "sha256:37f927ea17cde7ae2d7baf832f8e80ce3777624554a653006c9144f8017fe410"}, + {file = "bump2version-1.0.1.tar.gz", hash = "sha256:762cb2bfad61f4ec8e2bdf452c7c267416f8c70dd9ecb1653fd0bbb01fa936e6"}, +] [[package]] name = "bumpversion" version = "0.6.0" description = "Version-bump your software with a single command!" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "bumpversion-0.6.0-py2.py3-none-any.whl", hash = "sha256:4eb3267a38194d09f048a2179980bb4803701969bff2c85fa8f6d1ce050be15e"}, + {file = "bumpversion-0.6.0.tar.gz", hash = "sha256:4ba55e4080d373f80177b4dabef146c07ce73c7d1377aabf9d3c3ae1f94584a6"}, +] [package.dependencies] bump2version = "*" [[package]] name = "certifi" -version = "2022.12.7" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, +] [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" +files = [ + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, +] [package.dependencies] pycparser = "*" [[package]] name = "cfgv" -version = "3.3.1" +version = "3.4.0" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] [[package]] name = "click" -version = "8.1.3" +version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -91,17 +169,136 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "contourpy" +version = "1.2.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, + {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, + {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, + {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, + {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, + {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, + {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, + {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, + {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, + {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, + {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, + {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, + {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, + {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, + {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, + {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, + {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, + {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, + {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, + {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, + {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, + {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, + {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, +] + +[package.dependencies] +numpy = ">=1.20,<2.0" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "coverage" -version = "7.2.1" +version = "7.4.3" description = "Code coverage measurement for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "coverage-7.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8580b827d4746d47294c0e0b92854c85a92c2227927433998f0d3320ae8a71b6"}, + {file = "coverage-7.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:718187eeb9849fc6cc23e0d9b092bc2348821c5e1a901c9f8975df0bc785bfd4"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:767b35c3a246bcb55b8044fd3a43b8cd553dd1f9f2c1eeb87a302b1f8daa0524"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae7f19afe0cce50039e2c782bff379c7e347cba335429678450b8fe81c4ef96d"}, + {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba3a8aaed13770e970b3df46980cb068d1c24af1a1968b7818b69af8c4347efb"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ee866acc0861caebb4f2ab79f0b94dbfbdbfadc19f82e6e9c93930f74e11d7a0"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:506edb1dd49e13a2d4cac6a5173317b82a23c9d6e8df63efb4f0380de0fbccbc"}, + {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd6545d97c98a192c5ac995d21c894b581f1fd14cf389be90724d21808b657e2"}, + {file = "coverage-7.4.3-cp310-cp310-win32.whl", hash = "sha256:f6a09b360d67e589236a44f0c39218a8efba2593b6abdccc300a8862cffc2f94"}, + {file = "coverage-7.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:18d90523ce7553dd0b7e23cbb28865db23cddfd683a38fb224115f7826de78d0"}, + {file = "coverage-7.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbbe5e739d45a52f3200a771c6d2c7acf89eb2524890a4a3aa1a7fa0695d2a47"}, + {file = "coverage-7.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:489763b2d037b164846ebac0cbd368b8a4ca56385c4090807ff9fad817de4113"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451f433ad901b3bb00184d83fd83d135fb682d780b38af7944c9faeecb1e0bfe"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcc66e222cf4c719fe7722a403888b1f5e1682d1679bd780e2b26c18bb648cdc"}, + {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ec74cfef2d985e145baae90d9b1b32f85e1741b04cd967aaf9cfa84c1334f3"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:abbbd8093c5229c72d4c2926afaee0e6e3140de69d5dcd918b2921f2f0c8baba"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:35eb581efdacf7b7422af677b92170da4ef34500467381e805944a3201df2079"}, + {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8249b1c7334be8f8c3abcaaa996e1e4927b0e5a23b65f5bf6cfe3180d8ca7840"}, + {file = "coverage-7.4.3-cp311-cp311-win32.whl", hash = "sha256:cf30900aa1ba595312ae41978b95e256e419d8a823af79ce670835409fc02ad3"}, + {file = "coverage-7.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:18c7320695c949de11a351742ee001849912fd57e62a706d83dfc1581897fa2e"}, + {file = "coverage-7.4.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b51bfc348925e92a9bd9b2e48dad13431b57011fd1038f08316e6bf1df107d10"}, + {file = "coverage-7.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6cdecaedea1ea9e033d8adf6a0ab11107b49571bbb9737175444cea6eb72328"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b2eccb883368f9e972e216c7b4c7c06cabda925b5f06dde0650281cb7666a30"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c00cdc8fa4e50e1cc1f941a7f2e3e0f26cb2a1233c9696f26963ff58445bac7"}, + {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4a8dd3dcf4cbd3165737358e4d7dfbd9d59902ad11e3b15eebb6393b0446e"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:062b0a75d9261e2f9c6d071753f7eef0fc9caf3a2c82d36d76667ba7b6470003"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ebe7c9e67a2d15fa97b77ea6571ce5e1e1f6b0db71d1d5e96f8d2bf134303c1d"}, + {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0a120238dd71c68484f02562f6d446d736adcc6ca0993712289b102705a9a3a"}, + {file = "coverage-7.4.3-cp312-cp312-win32.whl", hash = "sha256:37389611ba54fd6d278fde86eb2c013c8e50232e38f5c68235d09d0a3f8aa352"}, + {file = "coverage-7.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:d25b937a5d9ffa857d41be042b4238dd61db888533b53bc76dc082cb5a15e914"}, + {file = "coverage-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28ca2098939eabab044ad68850aac8f8db6bf0b29bc7f2887d05889b17346454"}, + {file = "coverage-7.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:280459f0a03cecbe8800786cdc23067a8fc64c0bd51dc614008d9c36e1659d7e"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0cdedd3500e0511eac1517bf560149764b7d8e65cb800d8bf1c63ebf39edd2"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9babb9466fe1da12417a4aed923e90124a534736de6201794a3aea9d98484e"}, + {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dec9de46a33cf2dd87a5254af095a409ea3bf952d85ad339751e7de6d962cde6"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:16bae383a9cc5abab9bb05c10a3e5a52e0a788325dc9ba8499e821885928968c"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2c854ce44e1ee31bda4e318af1dbcfc929026d12c5ed030095ad98197eeeaed0"}, + {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ce8c50520f57ec57aa21a63ea4f325c7b657386b3f02ccaedeccf9ebe27686e1"}, + {file = "coverage-7.4.3-cp38-cp38-win32.whl", hash = "sha256:708a3369dcf055c00ddeeaa2b20f0dd1ce664eeabde6623e516c5228b753654f"}, + {file = "coverage-7.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:1bf25fbca0c8d121a3e92a2a0555c7e5bc981aee5c3fdaf4bb7809f410f696b9"}, + {file = "coverage-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b253094dbe1b431d3a4ac2f053b6d7ede2664ac559705a704f621742e034f1f"}, + {file = "coverage-7.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77fbfc5720cceac9c200054b9fab50cb2a7d79660609200ab83f5db96162d20c"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6679060424faa9c11808598504c3ab472de4531c571ab2befa32f4971835788e"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4af154d617c875b52651dd8dd17a31270c495082f3d55f6128e7629658d63765"}, + {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8640f1fde5e1b8e3439fe482cdc2b0bb6c329f4bb161927c28d2e8879c6029ee"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:69b9f6f66c0af29642e73a520b6fed25ff9fd69a25975ebe6acb297234eda501"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0842571634f39016a6c03e9d4aba502be652a6e4455fadb73cd3a3a49173e38f"}, + {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a78ed23b08e8ab524551f52953a8a05d61c3a760781762aac49f8de6eede8c45"}, + {file = "coverage-7.4.3-cp39-cp39-win32.whl", hash = "sha256:c0524de3ff096e15fcbfe8f056fdb4ea0bf497d584454f344d59fce069d3e6e9"}, + {file = "coverage-7.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:0209a6369ccce576b43bb227dc8322d8ef9e323d089c6f3f26a597b09cb4d2aa"}, + {file = "coverage-7.4.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:7cbde573904625509a3f37b6fecea974e363460b556a627c60dc2f47e2fffa51"}, + {file = "coverage-7.4.3.tar.gz", hash = "sha256:276f6077a5c61447a48d133ed13e759c09e62aff0dc84274a68dc18660104d52"}, +] [package.dependencies] tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} @@ -109,138 +306,495 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "diamond-miner" -version = "1.0.3" +version = "1.1.0" description = "High-speed, Internet-scale, load-balanced paths discovery." -category = "main" optional = false python-versions = ">=3.10,<4.0" +files = [ + {file = "diamond_miner-1.1.0-py3-none-any.whl", hash = "sha256:29df62950fde5161318fc3d9dc9fc2be8499dd9e7f88730972218d1c0844f4c6"}, + {file = "diamond_miner-1.1.0.tar.gz", hash = "sha256:5888659bac85dae5bc9508b02c2fae842956662262a3a48dffeaea7a17528fdd"}, +] [package.dependencies] -pych-client = ">=0.3.1,<0.4.0" +pych-client = ">=0.4.0,<0.5.0" pygfc = ">=1.0.5,<2.0.0" -zstandard = ">=0.15.2,<0.19.0" +tqdm = ">=4.66.1,<5.0.0" +zstandard = ">=0.21.0,<0.22.0" [[package]] name = "distlib" -version = "0.3.6" +version = "0.3.8" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, +] [[package]] name = "exceptiongroup" -version = "1.1.0" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, +] [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "execnet" +version = "2.0.2" +description = "execnet: rapid multi-Python deployment" +optional = false +python-versions = ">=3.7" +files = [ + {file = "execnet-2.0.2-py3-none-any.whl", hash = "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41"}, + {file = "execnet-2.0.2.tar.gz", hash = "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af"}, +] + +[package.extras] +testing = ["hatch", "pre-commit", "pytest", "tox"] + +[[package]] +name = "executing" +version = "2.0.1" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.5" +files = [ + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + [[package]] name = "filelock" -version = "3.9.0" +version = "3.13.1" description = "A platform independent file lock." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + +[[package]] +name = "fonttools" +version = "4.50.0" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effd303fb422f8ce06543a36ca69148471144c534cc25f30e5be752bc4f46736"}, + {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7913992ab836f621d06aabac118fc258b9947a775a607e1a737eb3a91c360335"}, + {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0a1c5bd2f63da4043b63888534b52c5a1fd7ae187c8ffc64cbb7ae475b9dab"}, + {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40fc98540fa5360e7ecf2c56ddf3c6e7dd04929543618fd7b5cc76e66390562"}, + {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fff65fbb7afe137bac3113827855e0204482727bddd00a806034ab0d3951d0d"}, + {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1aeae3dd2ee719074a9372c89ad94f7c581903306d76befdaca2a559f802472"}, + {file = "fonttools-4.50.0-cp310-cp310-win32.whl", hash = "sha256:e9623afa319405da33b43c85cceb0585a6f5d3a1d7c604daf4f7e1dd55c03d1f"}, + {file = "fonttools-4.50.0-cp310-cp310-win_amd64.whl", hash = "sha256:778c5f43e7e654ef7fe0605e80894930bc3a7772e2f496238e57218610140f54"}, + {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3dfb102e7f63b78c832e4539969167ffcc0375b013080e6472350965a5fe8048"}, + {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e58fe34cb379ba3d01d5d319d67dd3ce7ca9a47ad044ea2b22635cd2d1247fc"}, + {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c673ab40d15a442a4e6eb09bf007c1dda47c84ac1e2eecbdf359adacb799c24"}, + {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b3ac35cdcd1a4c90c23a5200212c1bb74fa05833cc7c14291d7043a52ca2aaa"}, + {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8844e7a2c5f7ecf977e82eb6b3014f025c8b454e046d941ece05b768be5847ae"}, + {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f849bd3c5c2249b49c98eca5aaebb920d2bfd92b3c69e84ca9bddf133e9f83f0"}, + {file = "fonttools-4.50.0-cp311-cp311-win32.whl", hash = "sha256:39293ff231b36b035575e81c14626dfc14407a20de5262f9596c2cbb199c3625"}, + {file = "fonttools-4.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:c33d5023523b44d3481624f840c8646656a1def7630ca562f222eb3ead16c438"}, + {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b4a886a6dbe60100ba1cd24de962f8cd18139bd32808da80de1fa9f9f27bf1dc"}, + {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b2ca1837bfbe5eafa11313dbc7edada79052709a1fffa10cea691210af4aa1fa"}, + {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0493dd97ac8977e48ffc1476b932b37c847cbb87fd68673dee5182004906828"}, + {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77844e2f1b0889120b6c222fc49b2b75c3d88b930615e98893b899b9352a27ea"}, + {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3566bfb8c55ed9100afe1ba6f0f12265cd63a1387b9661eb6031a1578a28bad1"}, + {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:35e10ddbc129cf61775d58a14f2d44121178d89874d32cae1eac722e687d9019"}, + {file = "fonttools-4.50.0-cp312-cp312-win32.whl", hash = "sha256:cc8140baf9fa8f9b903f2b393a6c413a220fa990264b215bf48484f3d0bf8710"}, + {file = "fonttools-4.50.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ccc85fd96373ab73c59833b824d7a73846670a0cb1f3afbaee2b2c426a8f931"}, + {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e270a406219af37581d96c810172001ec536e29e5593aa40d4c01cca3e145aa6"}, + {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac2463de667233372e9e1c7e9de3d914b708437ef52a3199fdbf5a60184f190c"}, + {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47abd6669195abe87c22750dbcd366dc3a0648f1b7c93c2baa97429c4dc1506e"}, + {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:074841375e2e3d559aecc86e1224caf78e8b8417bb391e7d2506412538f21adc"}, + {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0743fd2191ad7ab43d78cd747215b12033ddee24fa1e088605a3efe80d6984de"}, + {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3d7080cce7be5ed65bee3496f09f79a82865a514863197ff4d4d177389e981b0"}, + {file = "fonttools-4.50.0-cp38-cp38-win32.whl", hash = "sha256:a467ba4e2eadc1d5cc1a11d355abb945f680473fbe30d15617e104c81f483045"}, + {file = "fonttools-4.50.0-cp38-cp38-win_amd64.whl", hash = "sha256:f77e048f805e00870659d6318fd89ef28ca4ee16a22b4c5e1905b735495fc422"}, + {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b6245eafd553c4e9a0708e93be51392bd2288c773523892fbd616d33fd2fda59"}, + {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a4062cc7e8de26f1603323ef3ae2171c9d29c8a9f5e067d555a2813cd5c7a7e0"}, + {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34692850dfd64ba06af61e5791a441f664cb7d21e7b544e8f385718430e8f8e4"}, + {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678dd95f26a67e02c50dcb5bf250f95231d455642afbc65a3b0bcdacd4e4dd38"}, + {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f2ce7b0b295fe64ac0a85aef46a0f2614995774bd7bc643b85679c0283287f9"}, + {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d346f4dc2221bfb7ab652d1e37d327578434ce559baf7113b0f55768437fe6a0"}, + {file = "fonttools-4.50.0-cp39-cp39-win32.whl", hash = "sha256:a51eeaf52ba3afd70bf489be20e52fdfafe6c03d652b02477c6ce23c995222f4"}, + {file = "fonttools-4.50.0-cp39-cp39-win_amd64.whl", hash = "sha256:8639be40d583e5d9da67795aa3eeeda0488fb577a1d42ae11a5036f18fb16d93"}, + {file = "fonttools-4.50.0-py3-none-any.whl", hash = "sha256:48fa36da06247aa8282766cfd63efff1bb24e55f020f29a335939ed3844d20d3"}, + {file = "fonttools-4.50.0.tar.gz", hash = "sha256:fa5cf61058c7dbb104c2ac4e782bf1b2016a8cf2f69de6e4dd6a865d2c969bb5"}, +] [package.extras] -docs = ["furo (>=2022.12.7)", "sphinx (>=5.3)", "sphinx-autodoc-typehints (>=1.19.5)"] -testing = ["covdefaults (>=2.2.2)", "coverage (>=7.0.1)", "pytest (>=7.2)", "pytest-cov (>=4)", "pytest-timeout (>=2.1)"] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "gprof2dot" +version = "2022.7.29" +description = "Generate a dot graph from the output of several profilers." +optional = false +python-versions = ">=2.7" +files = [ + {file = "gprof2dot-2022.7.29-py2.py3-none-any.whl", hash = "sha256:f165b3851d3c52ee4915eb1bd6cca571e5759823c2cd0f71a79bda93c2dc85d6"}, + {file = "gprof2dot-2022.7.29.tar.gz", hash = "sha256:45b4d298bd36608fccf9511c3fd88a773f7a1abc04d6cd39445b11ba43133ec5"}, +] [[package]] name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] [[package]] name = "httpcore" -version = "0.16.3" +version = "1.0.4" description = "A minimal low-level HTTP client." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, + {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, +] [package.dependencies] -anyio = ">=3.0,<5.0" certifi = "*" h11 = ">=0.13,<0.15" -sniffio = ">=1.0.0,<2.0.0" [package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.25.0)"] [[package]] name = "httpx" -version = "0.23.3" +version = "0.25.2" description = "The next generation HTTP client." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "httpx-0.25.2-py3-none-any.whl", hash = "sha256:a05d3d052d9b2dfce0e3896636467f8a5342fb2b902c819428e1ac65413ca118"}, + {file = "httpx-0.25.2.tar.gz", hash = "sha256:8b8fcaa0c8ea7b05edd69a094e63a2094c4efcb48129fb757361bc423c0ad9e8"}, +] [package.dependencies] +anyio = "*" certifi = "*" -httpcore = ">=0.15.0,<0.17.0" -rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]} +httpcore = "==1.*" +idna = "*" sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<13)"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "icecream" +version = "2.1.3" +description = "Never use print() to debug again; inspect variables, expressions, and program execution with a single, simple function call." +optional = false +python-versions = "*" +files = [ + {file = "icecream-2.1.3-py2.py3-none-any.whl", hash = "sha256:757aec31ad4488b949bc4f499d18e6e5973c40cc4d4fc607229e78cfaec94c34"}, + {file = "icecream-2.1.3.tar.gz", hash = "sha256:0aa4a7c3374ec36153a1d08f81e3080e83d8ac1eefd97d2f4fe9544e8f9b49de"}, +] + +[package.dependencies] +asttokens = ">=2.0.1" +colorama = ">=0.3.9" +executing = ">=0.3.1" +pygments = ">=2.2.0" [[package]] name = "identify" -version = "2.5.18" +version = "2.5.35" description = "File identification library for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, + {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, +] [package.extras] license = ["ukkonen"] [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + +[[package]] +name = "matplotlib" +version = "3.8.3" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.8.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cf60138ccc8004f117ab2a2bad513cc4d122e55864b4fe7adf4db20ca68a078f"}, + {file = "matplotlib-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f557156f7116be3340cdeef7f128fa99b0d5d287d5f41a16e169819dcf22357"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f386cf162b059809ecfac3bcc491a9ea17da69fa35c8ded8ad154cd4b933d5ec"}, + {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c5f96f57b0369c288bf6f9b5274ba45787f7e0589a34d24bdbaf6d3344632f"}, + {file = "matplotlib-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:83e0f72e2c116ca7e571c57aa29b0fe697d4c6425c4e87c6e994159e0c008635"}, + {file = "matplotlib-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c5c8290074ba31a41db1dc332dc2b62def469ff33766cbe325d32a3ee291aea"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5184e07c7e1d6d1481862ee361905b7059f7fe065fc837f7c3dc11eeb3f2f900"}, + {file = "matplotlib-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7e7e0993d0758933b1a241a432b42c2db22dfa37d4108342ab4afb9557cbe3e"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b36ad07eac9740fc76c2aa16edf94e50b297d6eb4c081e3add863de4bb19a7"}, + {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c42dae72a62f14982f1474f7e5c9959fc4bc70c9de11cc5244c6e766200ba65"}, + {file = "matplotlib-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf5932eee0d428192c40b7eac1399d608f5d995f975cdb9d1e6b48539a5ad8d0"}, + {file = "matplotlib-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:40321634e3a05ed02abf7c7b47a50be50b53ef3eaa3a573847431a545585b407"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09074f8057917d17ab52c242fdf4916f30e99959c1908958b1fc6032e2d0f6d4"}, + {file = "matplotlib-3.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5745f6d0fb5acfabbb2790318db03809a253096e98c91b9a31969df28ee604aa"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97653d869a71721b639714b42d87cda4cfee0ee74b47c569e4874c7590c55c5"}, + {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:242489efdb75b690c9c2e70bb5c6550727058c8a614e4c7716f363c27e10bba1"}, + {file = "matplotlib-3.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83c0653c64b73926730bd9ea14aa0f50f202ba187c307a881673bad4985967b7"}, + {file = "matplotlib-3.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:ef6c1025a570354297d6c15f7d0f296d95f88bd3850066b7f1e7b4f2f4c13a39"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c4af3f7317f8a1009bbb2d0bf23dfaba859eb7dd4ccbd604eba146dccaaaf0a4"}, + {file = "matplotlib-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c6e00a65d017d26009bac6808f637b75ceade3e1ff91a138576f6b3065eeeba"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7b49ab49a3bea17802df6872f8d44f664ba8f9be0632a60c99b20b6db2165b7"}, + {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6728dde0a3997396b053602dbd907a9bd64ec7d5cf99e728b404083698d3ca01"}, + {file = "matplotlib-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:813925d08fb86aba139f2d31864928d67511f64e5945ca909ad5bc09a96189bb"}, + {file = "matplotlib-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:cd3a0c2be76f4e7be03d34a14d49ded6acf22ef61f88da600a18a5cd8b3c5f3c"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fa93695d5c08544f4a0dfd0965f378e7afc410d8672816aff1e81be1f45dbf2e"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9764df0e8778f06414b9d281a75235c1e85071f64bb5d71564b97c1306a2afc"}, + {file = "matplotlib-3.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5e431a09e6fab4012b01fc155db0ce6dccacdbabe8198197f523a4ef4805eb26"}, + {file = "matplotlib-3.8.3.tar.gz", hash = "sha256:7b416239e9ae38be54b028abbf9048aff5054a9aba5416bef0bd17f9162ce161"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.21,<2" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" [[package]] name = "more-itertools" version = "8.14.0" description = "More routines for operating on iterables, beyond itertools" -category = "main" optional = false python-versions = ">=3.5" +files = [ + {file = "more-itertools-8.14.0.tar.gz", hash = "sha256:c09443cd3d5438b8dafccd867a6bc1cb0894389e90cb53d227456b0b0bccb750"}, + {file = "more_itertools-8.14.0-py3-none-any.whl", hash = "sha256:1bc4f91ee5b1b31ac7ceacc17c09befe6a40a503907baf9c839c229b5095cfd2"}, +] [[package]] name = "mypy" version = "0.942" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "mypy-0.942-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5bf44840fb43ac4074636fd47ee476d73f0039f4f54e86d7265077dc199be24d"}, + {file = "mypy-0.942-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dcd955f36e0180258a96f880348fbca54ce092b40fbb4b37372ae3b25a0b0a46"}, + {file = "mypy-0.942-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6776e5fa22381cc761df53e7496a805801c1a751b27b99a9ff2f0ca848c7eca0"}, + {file = "mypy-0.942-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:edf7237137a1a9330046dbb14796963d734dd740a98d5e144a3eb1d267f5f9ee"}, + {file = "mypy-0.942-cp310-cp310-win_amd64.whl", hash = "sha256:64235137edc16bee6f095aba73be5334677d6f6bdb7fa03cfab90164fa294a17"}, + {file = "mypy-0.942-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b840cfe89c4ab6386c40300689cd8645fc8d2d5f20101c7f8bd23d15fca14904"}, + {file = "mypy-0.942-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b184db8c618c43c3a31b32ff00cd28195d39e9c24e7c3b401f3db7f6e5767f5"}, + {file = "mypy-0.942-cp36-cp36m-win_amd64.whl", hash = "sha256:1a0459c333f00e6a11cbf6b468b870c2b99a906cb72d6eadf3d1d95d38c9352c"}, + {file = "mypy-0.942-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c3e497588afccfa4334a9986b56f703e75793133c4be3a02d06a3df16b67a58"}, + {file = "mypy-0.942-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f6ad963172152e112b87cc7ec103ba0f2db2f1cd8997237827c052a3903eaa6"}, + {file = "mypy-0.942-cp37-cp37m-win_amd64.whl", hash = "sha256:0e2dd88410937423fba18e57147dd07cd8381291b93d5b1984626f173a26543e"}, + {file = "mypy-0.942-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:246e1aa127d5b78488a4a0594bd95f6d6fb9d63cf08a66dafbff8595d8891f67"}, + {file = "mypy-0.942-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d8d3ba77e56b84cd47a8ee45b62c84b6d80d32383928fe2548c9a124ea0a725c"}, + {file = "mypy-0.942-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2bc249409a7168d37c658e062e1ab5173300984a2dada2589638568ddc1db02b"}, + {file = "mypy-0.942-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9521c1265ccaaa1791d2c13582f06facf815f426cd8b07c3a485f486a8ffc1f3"}, + {file = "mypy-0.942-cp38-cp38-win_amd64.whl", hash = "sha256:e865fec858d75b78b4d63266c9aff770ecb6a39dfb6d6b56c47f7f8aba6baba8"}, + {file = "mypy-0.942-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ce34a118d1a898f47def970a2042b8af6bdcc01546454726c7dd2171aa6dfca"}, + {file = "mypy-0.942-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:10daab80bc40f84e3f087d896cdb53dc811a9f04eae4b3f95779c26edee89d16"}, + {file = "mypy-0.942-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3841b5433ff936bff2f4dc8d54cf2cdbfea5d8e88cedfac45c161368e5770ba6"}, + {file = "mypy-0.942-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f7106cbf9cc2f403693bf50ed7c9fa5bb3dfa9007b240db3c910929abe2a322"}, + {file = "mypy-0.942-cp39-cp39-win_amd64.whl", hash = "sha256:7742d2c4e46bb5017b51c810283a6a389296cda03df805a4f7869a6f41246534"}, + {file = "mypy-0.942-py3-none-any.whl", hash = "sha256:a1b383fe99678d7402754fe90448d4037f9512ce70c21f8aee3b8bf48ffc51db"}, + {file = "mypy-0.942.tar.gz", hash = "sha256:17e44649fec92e9f82102b48a3bf7b4a5510ad0cd22fa21a104826b5db4903e2"}, +] [package.dependencies] mypy-extensions = ">=0.4.3" @@ -256,48 +810,211 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "networkx" +version = "3.2.1" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.9" +files = [ + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "nodeenv" -version = "1.7.0" +version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] [package.dependencies] setuptools = "*" +[[package]] +name = "numpy" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] + [[package]] name = "packaging" -version = "23.0" +version = "24.0" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, +] + +[[package]] +name = "pillow" +version = "10.2.0" +description = "Python Imaging Library (Fork)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "3.1.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, +] [package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, +] [package.extras] dev = ["pre-commit", "tox"] @@ -307,9 +1024,12 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, +] [package.dependencies] cfgv = ">=2.0.0" @@ -322,50 +1042,141 @@ virtualenv = ">=20.10.0" name = "pycaracal" version = "0.14.5" description = "" -category = "main" optional = false python-versions = ">=3.8" +files = [ + {file = "pycaracal-0.14.5-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:d7bfc919f0f7b05f0631159a1a3294b4d3af07e9d1af16e772c25e8d2d13f609"}, + {file = "pycaracal-0.14.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:982750be1853274d977e4163dbe256950064f1c9c44c97ae2370b246abadc205"}, + {file = "pycaracal-0.14.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ef22c1aeeed7ef54de8f1b73f05a4221b8d605745e9ca4ac03f0abcf7174dbf"}, + {file = "pycaracal-0.14.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed894eebd2d44c139a760021eb1b3b2af70a92de45ceace8791eb204e840979"}, + {file = "pycaracal-0.14.5-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:fa5cb4256b7e335be8c7043affeab63332323f8a7388558a43fd29050539bb6b"}, + {file = "pycaracal-0.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0168094057e00e00f335e5adc2cf10444cdce141c4b01ff79324bbc336a67ee3"}, + {file = "pycaracal-0.14.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:754c1ea631c394215a3620aa0e82cbbbd77b2ebfc85d64674c9dd8238ffc54d6"}, + {file = "pycaracal-0.14.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:730b0dd5d734076fe684a006af2afaed55d40d4ed7a243b1af6943a2d4ad6ea1"}, + {file = "pycaracal-0.14.5-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:7758902c5f923c758c54c171f97f9022d7084407d41a7688f0ec36d53b93457a"}, + {file = "pycaracal-0.14.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3921cbe321f34f650b02f53a5c5d675c3ae43ed4ec4bfdcd3dd073007b771476"}, + {file = "pycaracal-0.14.5-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:db0eae35c2f76735bdb2427116029fb97bb651d3b3b9e350d676d393a6875521"}, + {file = "pycaracal-0.14.5-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41422868968a6e805c8933c4043bb664b96996864b4bbfe131129356f3847962"}, + {file = "pycaracal-0.14.5-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:1fb5a407d3ce5793ed1d7659954230d2d341df5a7782bf08da20e5fbedb57907"}, + {file = "pycaracal-0.14.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:159b93629f0e62b774ae06e6030df6999919e61378b5289bcc17c5d676c74cf1"}, + {file = "pycaracal-0.14.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49fb72070e0a75380e642876bb89522271a8fd0cbfe0145a8c815e7808d720f0"}, + {file = "pycaracal-0.14.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af8129cab7c9784ba7587652f703d110343a33dbd219831a9e47e11ff72cecaa"}, + {file = "pycaracal-0.14.5.tar.gz", hash = "sha256:5b94de329627326022b4bc161d81e9050564d1034ac2338357d4760805f5d403"}, +] [[package]] name = "pych-client" -version = "0.3.1" +version = "0.4.0" description = "A ClickHouse client for Python, with a command-line interface." -category = "main" optional = false python-versions = ">=3.8,<4.0" +files = [ + {file = "pych_client-0.4.0-py3-none-any.whl", hash = "sha256:95a8b7d5d9256cda39ce31ca8aae8dacd655eb1209faa811c7e4ed823cd684f5"}, + {file = "pych_client-0.4.0.tar.gz", hash = "sha256:72ae66e6cb44811194699ed3f832490b3573d09ba6abaefc57cdd85b57c59129"}, +] [package.dependencies] -httpx = ">=0.23.0,<0.24.0" +httpx = ">=0.25.0,<0.26.0" [package.extras] -orjson = ["orjson (>=3.6.7,<4.0.0)"] +orjson = ["orjson (>=3.9.10,<4.0.0)"] [[package]] name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] [[package]] name = "pygfc" version = "1.0.5" description = "Implementation of a Generalized-Feistel Cipher for generating random permutations." -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "pygfc-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd51b29d43ce80419d89a4094abb8ae18bdf3dd305974e91830035596dfe3f92"}, + {file = "pygfc-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce951014fc3c1b7b402d1a349df425a8d06e76c166848f9c0d3e5688f60f22ba"}, + {file = "pygfc-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d04e8c0626570999ff9fb4a731b25eae0cf7ce91f5abc83f426cfa2e7e6c275"}, + {file = "pygfc-1.0.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:676d4036eb525de94b7c38f23698392364e50750bef55030b0c792cc723bd2b0"}, + {file = "pygfc-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:60efdaabdc8a8e0c02d87f56eecbdbcf53df5a851a700c21b6629c55270f4cad"}, + {file = "pygfc-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:819bb4da04c8b740befa85f1727788164229be094e0fda1a69c02bcc6f2e820d"}, + {file = "pygfc-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:258d2b175401003e68fa8dd3f6eb3f972b06be0942090212709ed23cf98239d1"}, + {file = "pygfc-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc4635c6feabdf74f6845a60b336234ce50b25bb38d4674cd7814b064dbfa6f7"}, + {file = "pygfc-1.0.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c11cb233402171f59706cbfb452754bb5fb3fdcd2c562185a239dec5db620f7"}, + {file = "pygfc-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1eaf8ca7542e79b8cc5dce51a26c72ecce01fa1162408f8c1eaf7af84e28f378"}, + {file = "pygfc-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6a728d6f0a28713510e40d4a7e365995d72af4f222df4761117a6b3b7330aa2a"}, + {file = "pygfc-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c1d032cd6e6f8b259d85d9c1093912aa6bcbe6b93e5f342c9cfffd7324dd6034"}, + {file = "pygfc-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6dc9f4d8da11cb0eb79104a43523ad994a1aa22b870712c2b7a77d47b13440ba"}, + {file = "pygfc-1.0.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5561bde1b4fdc447c5d05924bbb42c8fb8785e1e37ca4f939c81c296038bd03f"}, + {file = "pygfc-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fff5aba9369814f2c41b2beab4fa0a423eaabe7329894ded0c1338c329a2b357"}, + {file = "pygfc-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:44a089b78a0bb9b7262897215a11e9ce8203f44466b7d6af3528ce76bd361fd1"}, + {file = "pygfc-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2bee293c5dbc6bf2c4059438af0cb78b46d5ca85360e9b4f53ade3f81851f004"}, + {file = "pygfc-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d7023d98aa927cf0795850e4dcbc130f37244a8167fd8ff1cf64dbb8b82551dd"}, + {file = "pygfc-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a1ff585e073c9e0a310406073b19b5b836e57bc948cb016658e9f9bcde54520"}, + {file = "pygfc-1.0.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:991770d4ea13a481cc29491b317cdb3aaf52b7010c0c6296cca6efcd821e0617"}, + {file = "pygfc-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a709a8fb73e7473de24a2ad7e09cda2d5800530b1e5625c31bae1e478db76a8b"}, + {file = "pygfc-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:843797854cb203744536c49d2b3a27eecc7a66216bee5e18852b71a087a8de21"}, + {file = "pygfc-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b6c2e62b31711cf7f9befff6f2b4ca1b67cb3aaad3b2fe3239a91deea6255b9f"}, + {file = "pygfc-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da80f143aead77fb0b741029e179ae24a6569e57e38c7134bebb49745e42d020"}, + {file = "pygfc-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a382419308c5316629d795f6fe0712f515485aabfddb9c80e5a24981a8046054"}, + {file = "pygfc-1.0.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7464055da80027cd0ec08cfe80352170948075bbf14302bccaedbb769d519df3"}, + {file = "pygfc-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a3526a9160b963b5d529b207819595e5438768d038f15b68c116e83dc93ea28f"}, + {file = "pygfc-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:378cee6578989c7567c648092fa67745a430139319f85b2d95558137260ab4c6"}, + {file = "pygfc-1.0.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3dc51ab6345dfc5bc2c7bd6cc7cbd711345d129fa1162a49440790d6b95fda0e"}, + {file = "pygfc-1.0.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0e0f07637f9fddd61664e21a20998ecd59c588c9e55a66ec76ca25b68a671d1"}, + {file = "pygfc-1.0.5-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b160e81056770c39ef63c188e332891243210da040dac9ed9e1996bb26e91ba6"}, + {file = "pygfc-1.0.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3a3a2a92f6513e3b23ccda0fc9f55de523b0038699225aa2dd4b5ba22e6517b3"}, + {file = "pygfc-1.0.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c93a40950a01884e71009897892f90e3e7f493cd7ed59e93b03095c5a1b81c84"}, + {file = "pygfc-1.0.5-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:494f39c4c8b4629eed35e6792c16f2893d54baa82ae89b88e9b9a25b1cda82b0"}, + {file = "pygfc-1.0.5.tar.gz", hash = "sha256:94e524aac53eb8893ddaad54c0d97e4323e64a223ee0393de5ee8549949b55af"}, +] + +[[package]] +name = "pygments" +version = "2.17.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, +] + +[package.extras] +plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pyparsing" +version = "3.1.2" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.2.2" +version = "7.4.4" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" @@ -374,15 +1185,18 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, + {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, +] [package.dependencies] coverage = {version = ">=5.2.1", extras = ["toml"]} @@ -391,56 +1205,208 @@ pytest = ">=4.6" [package.extras] testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] +[[package]] +name = "pytest-profiling" +version = "1.7.0" +description = "Profiling plugin for py.test" +optional = false +python-versions = "*" +files = [ + {file = "pytest-profiling-1.7.0.tar.gz", hash = "sha256:93938f147662225d2b8bd5af89587b979652426a8a6ffd7e73ec4a23e24b7f29"}, + {file = "pytest_profiling-1.7.0-py2.py3-none-any.whl", hash = "sha256:999cc9ac94f2e528e3f5d43465da277429984a1c237ae9818f8cfd0b06acb019"}, +] + +[package.dependencies] +gprof2dot = "*" +pytest = "*" +six = "*" + +[package.extras] +tests = ["pytest-virtualenv"] + +[[package]] +name = "pytest-xdist" +version = "3.5.0" +description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-xdist-3.5.0.tar.gz", hash = "sha256:cbb36f3d67e0c478baa57fa4edc8843887e0f6cfc42d677530a36d7472b32d8a"}, + {file = "pytest_xdist-3.5.0-py3-none-any.whl", hash = "sha256:d075629c7e00b611df89f490a5063944bee7a4362a5ff11c7cc7824a03dfce24"}, +] + +[package.dependencies] +execnet = ">=1.1" +pytest = ">=6.2.0" + +[package.extras] +psutil = ["psutil (>=3.0)"] +setproctitle = ["setproctitle"] +testing = ["filelock"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] [[package]] -name = "rfc3986" -version = "1.5.0" -description = "Validating URI References per RFC 3986" -category = "main" +name = "scipy" +version = "1.13.0" +description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = "*" +python-versions = ">=3.9" +files = [ + {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, + {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, + {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, + {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, + {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, + {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, + {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, + {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, + {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, + {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, +] [package.dependencies] -idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} +numpy = ">=1.22.4,<2.3" [package.extras] -idna2008 = ["idna"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "setuptools" -version = "67.5.1" +version = "69.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, + {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, +] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" -category = "main" optional = false python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] [[package]] name = "tabulate" version = "0.8.10" description = "Pretty-print tabular data" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "tabulate-0.8.10-py3-none-any.whl", hash = "sha256:0ba055423dbaa164b9e456abe7920c5e8ed33fcc16f6d1b2f2d152c8e1e8b4fc"}, + {file = "tabulate-0.8.10.tar.gz", hash = "sha256:6c57f3f3dd7ac2782770155f3adb2db0b1a269637e42f27599925e64b114f519"}, +] [package.extras] widechars = ["wcwidth"] @@ -449,17 +1415,43 @@ widechars = ["wcwidth"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tqdm" +version = "4.66.2" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, + {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] [[package]] name = "typer" version = "0.4.2" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -category = "main" optional = false python-versions = ">=3.6" +files = [ + {file = "typer-0.4.2-py3-none-any.whl", hash = "sha256:023bae00d1baf358a6cc7cea45851639360bb716de687b42b0a4641cd99173f1"}, + {file = "typer-0.4.2.tar.gz", hash = "sha256:b8261c6c0152dd73478b5ba96ba677e5d6948c715c310f7c91079f311f62ec03"}, +] [package.dependencies] click = ">=7.1.1,<9.0.0" @@ -474,42 +1466,212 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6. name = "types-tabulate" version = "0.8.11" description = "Typing stubs for tabulate" -category = "dev" optional = false python-versions = "*" +files = [ + {file = "types-tabulate-0.8.11.tar.gz", hash = "sha256:17a5fa3b5ca453815778fc9865e8ecd0118b07b2b9faff3e2b06fe448174dd5e"}, + {file = "types_tabulate-0.8.11-py3-none-any.whl", hash = "sha256:af811268241e8fb87b63c052c87d1e329898a93191309d5d42111372232b2e0e"}, +] [[package]] name = "typing-extensions" -version = "4.5.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "dev" +version = "4.10.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, +] [[package]] name = "virtualenv" -version = "20.20.0" +version = "20.25.1" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.25.1-py3-none-any.whl", hash = "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a"}, + {file = "virtualenv-20.25.1.tar.gz", hash = "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197"}, +] [package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -platformdirs = ">=2.4,<4" +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -test = ["covdefaults (>=2.2.2)", "coverage (>=7.1)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23)", "pytest (>=7.2.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + +[[package]] +name = "xxhash" +version = "3.4.1" +description = "Python binding for xxHash" +optional = false +python-versions = ">=3.7" +files = [ + {file = "xxhash-3.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:91dbfa55346ad3e18e738742236554531a621042e419b70ad8f3c1d9c7a16e7f"}, + {file = "xxhash-3.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:665a65c2a48a72068fcc4d21721510df5f51f1142541c890491afc80451636d2"}, + {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb11628470a6004dc71a09fe90c2f459ff03d611376c1debeec2d648f44cb693"}, + {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bef2a7dc7b4f4beb45a1edbba9b9194c60a43a89598a87f1a0226d183764189"}, + {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c0f7b2d547d72c7eda7aa817acf8791f0146b12b9eba1d4432c531fb0352228"}, + {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00f2fdef6b41c9db3d2fc0e7f94cb3db86693e5c45d6de09625caad9a469635b"}, + {file = "xxhash-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23cfd9ca09acaf07a43e5a695143d9a21bf00f5b49b15c07d5388cadf1f9ce11"}, + {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6a9ff50a3cf88355ca4731682c168049af1ca222d1d2925ef7119c1a78e95b3b"}, + {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f1d7c69a1e9ca5faa75546fdd267f214f63f52f12692f9b3a2f6467c9e67d5e7"}, + {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:672b273040d5d5a6864a36287f3514efcd1d4b1b6a7480f294c4b1d1ee1b8de0"}, + {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4178f78d70e88f1c4a89ff1ffe9f43147185930bb962ee3979dba15f2b1cc799"}, + {file = "xxhash-3.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9804b9eb254d4b8cc83ab5a2002128f7d631dd427aa873c8727dba7f1f0d1c2b"}, + {file = "xxhash-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c09c49473212d9c87261d22c74370457cfff5db2ddfc7fd1e35c80c31a8c14ce"}, + {file = "xxhash-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:ebbb1616435b4a194ce3466d7247df23499475c7ed4eb2681a1fa42ff766aff6"}, + {file = "xxhash-3.4.1-cp310-cp310-win_arm64.whl", hash = "sha256:25dc66be3db54f8a2d136f695b00cfe88018e59ccff0f3b8f545869f376a8a46"}, + {file = "xxhash-3.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58c49083801885273e262c0f5bbeac23e520564b8357fbb18fb94ff09d3d3ea5"}, + {file = "xxhash-3.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b526015a973bfbe81e804a586b703f163861da36d186627e27524f5427b0d520"}, + {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36ad4457644c91a966f6fe137d7467636bdc51a6ce10a1d04f365c70d6a16d7e"}, + {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:248d3e83d119770f96003271fe41e049dd4ae52da2feb8f832b7a20e791d2920"}, + {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2070b6d5bbef5ee031666cf21d4953c16e92c2f8a24a94b5c240f8995ba3b1d0"}, + {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2746035f518f0410915e247877f7df43ef3372bf36cfa52cc4bc33e85242641"}, + {file = "xxhash-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ba6181514681c2591840d5632fcf7356ab287d4aff1c8dea20f3c78097088"}, + {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0aac5010869240e95f740de43cd6a05eae180c59edd182ad93bf12ee289484fa"}, + {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4cb11d8debab1626181633d184b2372aaa09825bde709bf927704ed72765bed1"}, + {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b29728cff2c12f3d9f1d940528ee83918d803c0567866e062683f300d1d2eff3"}, + {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:a15cbf3a9c40672523bdb6ea97ff74b443406ba0ab9bca10ceccd9546414bd84"}, + {file = "xxhash-3.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e66df260fed01ed8ea790c2913271641c58481e807790d9fca8bfd5a3c13844"}, + {file = "xxhash-3.4.1-cp311-cp311-win32.whl", hash = "sha256:e867f68a8f381ea12858e6d67378c05359d3a53a888913b5f7d35fbf68939d5f"}, + {file = "xxhash-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:200a5a3ad9c7c0c02ed1484a1d838b63edcf92ff538770ea07456a3732c577f4"}, + {file = "xxhash-3.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:1d03f1c0d16d24ea032e99f61c552cb2b77d502e545187338bea461fde253583"}, + {file = "xxhash-3.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c4bbba9b182697a52bc0c9f8ec0ba1acb914b4937cd4a877ad78a3b3eeabefb3"}, + {file = "xxhash-3.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9fd28a9da300e64e434cfc96567a8387d9a96e824a9be1452a1e7248b7763b78"}, + {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6066d88c9329ab230e18998daec53d819daeee99d003955c8db6fc4971b45ca3"}, + {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93805bc3233ad89abf51772f2ed3355097a5dc74e6080de19706fc447da99cd3"}, + {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64da57d5ed586ebb2ecdde1e997fa37c27fe32fe61a656b77fabbc58e6fbff6e"}, + {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a97322e9a7440bf3c9805cbaac090358b43f650516486746f7fa482672593df"}, + {file = "xxhash-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bbe750d512982ee7d831838a5dee9e9848f3fb440e4734cca3f298228cc957a6"}, + {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fd79d4087727daf4d5b8afe594b37d611ab95dc8e29fe1a7517320794837eb7d"}, + {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:743612da4071ff9aa4d055f3f111ae5247342931dedb955268954ef7201a71ff"}, + {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:b41edaf05734092f24f48c0958b3c6cbaaa5b7e024880692078c6b1f8247e2fc"}, + {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a90356ead70d715fe64c30cd0969072de1860e56b78adf7c69d954b43e29d9fa"}, + {file = "xxhash-3.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac56eebb364e44c85e1d9e9cc5f6031d78a34f0092fea7fc80478139369a8b4a"}, + {file = "xxhash-3.4.1-cp312-cp312-win32.whl", hash = "sha256:911035345932a153c427107397c1518f8ce456f93c618dd1c5b54ebb22e73747"}, + {file = "xxhash-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:f31ce76489f8601cc7b8713201ce94b4bd7b7ce90ba3353dccce7e9e1fee71fa"}, + {file = "xxhash-3.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:b5beb1c6a72fdc7584102f42c4d9df232ee018ddf806e8c90906547dfb43b2da"}, + {file = "xxhash-3.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6d42b24d1496deb05dee5a24ed510b16de1d6c866c626c2beb11aebf3be278b9"}, + {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b685fab18876b14a8f94813fa2ca80cfb5ab6a85d31d5539b7cd749ce9e3624"}, + {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419ffe34c17ae2df019a4685e8d3934d46b2e0bbe46221ab40b7e04ed9f11137"}, + {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e041ce5714f95251a88670c114b748bca3bf80cc72400e9f23e6d0d59cf2681"}, + {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc860d887c5cb2f524899fb8338e1bb3d5789f75fac179101920d9afddef284b"}, + {file = "xxhash-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:312eba88ffe0a05e332e3a6f9788b73883752be63f8588a6dc1261a3eaaaf2b2"}, + {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e01226b6b6a1ffe4e6bd6d08cfcb3ca708b16f02eb06dd44f3c6e53285f03e4f"}, + {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9f3025a0d5d8cf406a9313cd0d5789c77433ba2004b1c75439b67678e5136537"}, + {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:6d3472fd4afef2a567d5f14411d94060099901cd8ce9788b22b8c6f13c606a93"}, + {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:43984c0a92f06cac434ad181f329a1445017c33807b7ae4f033878d860a4b0f2"}, + {file = "xxhash-3.4.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a55e0506fdb09640a82ec4f44171273eeabf6f371a4ec605633adb2837b5d9d5"}, + {file = "xxhash-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:faec30437919555b039a8bdbaba49c013043e8f76c999670aef146d33e05b3a0"}, + {file = "xxhash-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:c9e1b646af61f1fc7083bb7b40536be944f1ac67ef5e360bca2d73430186971a"}, + {file = "xxhash-3.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:961d948b7b1c1b6c08484bbce3d489cdf153e4122c3dfb07c2039621243d8795"}, + {file = "xxhash-3.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:719a378930504ab159f7b8e20fa2aa1896cde050011af838af7e7e3518dd82de"}, + {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74fb5cb9406ccd7c4dd917f16630d2e5e8cbbb02fc2fca4e559b2a47a64f4940"}, + {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5dab508ac39e0ab988039bc7f962c6ad021acd81fd29145962b068df4148c476"}, + {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c59f3e46e7daf4c589e8e853d700ef6607afa037bfad32c390175da28127e8c"}, + {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cc07256eff0795e0f642df74ad096f8c5d23fe66bc138b83970b50fc7f7f6c5"}, + {file = "xxhash-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9f749999ed80f3955a4af0eb18bb43993f04939350b07b8dd2f44edc98ffee9"}, + {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7688d7c02149a90a3d46d55b341ab7ad1b4a3f767be2357e211b4e893efbaaf6"}, + {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a8b4977963926f60b0d4f830941c864bed16aa151206c01ad5c531636da5708e"}, + {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:8106d88da330f6535a58a8195aa463ef5281a9aa23b04af1848ff715c4398fb4"}, + {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4c76a77dbd169450b61c06fd2d5d436189fc8ab7c1571d39265d4822da16df22"}, + {file = "xxhash-3.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:11f11357c86d83e53719c592021fd524efa9cf024dc7cb1dfb57bbbd0d8713f2"}, + {file = "xxhash-3.4.1-cp38-cp38-win32.whl", hash = "sha256:0c786a6cd74e8765c6809892a0d45886e7c3dc54de4985b4a5eb8b630f3b8e3b"}, + {file = "xxhash-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:aabf37fb8fa27430d50507deeab2ee7b1bcce89910dd10657c38e71fee835594"}, + {file = "xxhash-3.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6127813abc1477f3a83529b6bbcfeddc23162cece76fa69aee8f6a8a97720562"}, + {file = "xxhash-3.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef2e194262f5db16075caea7b3f7f49392242c688412f386d3c7b07c7733a70a"}, + {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71be94265b6c6590f0018bbf73759d21a41c6bda20409782d8117e76cd0dfa8b"}, + {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10e0a619cdd1c0980e25eb04e30fe96cf8f4324758fa497080af9c21a6de573f"}, + {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa122124d2e3bd36581dd78c0efa5f429f5220313479fb1072858188bc2d5ff1"}, + {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17032f5a4fea0a074717fe33477cb5ee723a5f428de7563e75af64bfc1b1e10"}, + {file = "xxhash-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca7783b20e3e4f3f52f093538895863f21d18598f9a48211ad757680c3bd006f"}, + {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d77d09a1113899fad5f354a1eb4f0a9afcf58cefff51082c8ad643ff890e30cf"}, + {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:21287bcdd299fdc3328cc0fbbdeaa46838a1c05391264e51ddb38a3f5b09611f"}, + {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:dfd7a6cc483e20b4ad90224aeb589e64ec0f31e5610ab9957ff4314270b2bf31"}, + {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:543c7fcbc02bbb4840ea9915134e14dc3dc15cbd5a30873a7a5bf66039db97ec"}, + {file = "xxhash-3.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fe0a98d990e433013f41827b62be9ab43e3cf18e08b1483fcc343bda0d691182"}, + {file = "xxhash-3.4.1-cp39-cp39-win32.whl", hash = "sha256:b9097af00ebf429cc7c0e7d2fdf28384e4e2e91008130ccda8d5ae653db71e54"}, + {file = "xxhash-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:d699b921af0dcde50ab18be76c0d832f803034d80470703700cb7df0fbec2832"}, + {file = "xxhash-3.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:2be491723405e15cc099ade1280133ccfbf6322d2ef568494fb7d07d280e7eee"}, + {file = "xxhash-3.4.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:431625fad7ab5649368c4849d2b49a83dc711b1f20e1f7f04955aab86cd307bc"}, + {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc6dbd5fc3c9886a9e041848508b7fb65fd82f94cc793253990f81617b61fe49"}, + {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ff8dbd0ec97aec842476cb8ccc3e17dd288cd6ce3c8ef38bff83d6eb927817"}, + {file = "xxhash-3.4.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef73a53fe90558a4096e3256752268a8bdc0322f4692ed928b6cd7ce06ad4fe3"}, + {file = "xxhash-3.4.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:450401f42bbd274b519d3d8dcf3c57166913381a3d2664d6609004685039f9d3"}, + {file = "xxhash-3.4.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a162840cf4de8a7cd8720ff3b4417fbc10001eefdd2d21541a8226bb5556e3bb"}, + {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b736a2a2728ba45017cb67785e03125a79d246462dfa892d023b827007412c52"}, + {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d0ae4c2e7698adef58710d6e7a32ff518b66b98854b1c68e70eee504ad061d8"}, + {file = "xxhash-3.4.1-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6322c4291c3ff174dcd104fae41500e75dad12be6f3085d119c2c8a80956c51"}, + {file = "xxhash-3.4.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:dd59ed668801c3fae282f8f4edadf6dc7784db6d18139b584b6d9677ddde1b6b"}, + {file = "xxhash-3.4.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92693c487e39523a80474b0394645b393f0ae781d8db3474ccdcead0559ccf45"}, + {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4603a0f642a1e8d7f3ba5c4c25509aca6a9c1cc16f85091004a7028607ead663"}, + {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa45e8cbfbadb40a920fe9ca40c34b393e0b067082d94006f7f64e70c7490a6"}, + {file = "xxhash-3.4.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:595b252943b3552de491ff51e5bb79660f84f033977f88f6ca1605846637b7c6"}, + {file = "xxhash-3.4.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:562d8b8f783c6af969806aaacf95b6c7b776929ae26c0cd941d54644ea7ef51e"}, + {file = "xxhash-3.4.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:41ddeae47cf2828335d8d991f2d2b03b0bdc89289dc64349d712ff8ce59d0647"}, + {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c44d584afdf3c4dbb3277e32321d1a7b01d6071c1992524b6543025fb8f4206f"}, + {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd7bddb3a5b86213cc3f2c61500c16945a1b80ecd572f3078ddbbe68f9dabdfb"}, + {file = "xxhash-3.4.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ecb6c987b62437c2f99c01e97caf8d25660bf541fe79a481d05732e5236719c"}, + {file = "xxhash-3.4.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:696b4e18b7023527d5c50ed0626ac0520edac45a50ec7cf3fc265cd08b1f4c03"}, + {file = "xxhash-3.4.1.tar.gz", hash = "sha256:0379d6cf1ff987cd421609a264ce025e74f346e3e145dd106c0cc2e3ec3f99a9"}, +] [[package]] name = "zstandard" -version = "0.18.0" +version = "0.21.0" description = "Zstandard bindings for Python" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +files = [ + {file = "zstandard-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:649a67643257e3b2cff1c0a73130609679a5673bf389564bc6d4b164d822a7ce"}, + {file = "zstandard-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:144a4fe4be2e747bf9c646deab212666e39048faa4372abb6a250dab0f347a29"}, + {file = "zstandard-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b72060402524ab91e075881f6b6b3f37ab715663313030d0ce983da44960a86f"}, + {file = "zstandard-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8257752b97134477fb4e413529edaa04fc0457361d304c1319573de00ba796b1"}, + {file = "zstandard-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c053b7c4cbf71cc26808ed67ae955836232f7638444d709bfc302d3e499364fa"}, + {file = "zstandard-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2769730c13638e08b7a983b32cb67775650024632cd0476bf1ba0e6360f5ac7d"}, + {file = "zstandard-0.21.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7d3bc4de588b987f3934ca79140e226785d7b5e47e31756761e48644a45a6766"}, + {file = "zstandard-0.21.0-cp310-cp310-win32.whl", hash = "sha256:67829fdb82e7393ca68e543894cd0581a79243cc4ec74a836c305c70a5943f07"}, + {file = "zstandard-0.21.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6048a287f8d2d6e8bc67f6b42a766c61923641dd4022b7fd3f7439e17ba5a4d"}, + {file = "zstandard-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7f2afab2c727b6a3d466faee6974a7dad0d9991241c498e7317e5ccf53dbc766"}, + {file = "zstandard-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff0852da2abe86326b20abae912d0367878dd0854b8931897d44cfeb18985472"}, + {file = "zstandard-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d12fa383e315b62630bd407477d750ec96a0f438447d0e6e496ab67b8b451d39"}, + {file = "zstandard-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1b9703fe2e6b6811886c44052647df7c37478af1b4a1a9078585806f42e5b15"}, + {file = "zstandard-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df28aa5c241f59a7ab524f8ad8bb75d9a23f7ed9d501b0fed6d40ec3064784e8"}, + {file = "zstandard-0.21.0-cp311-cp311-win32.whl", hash = "sha256:0aad6090ac164a9d237d096c8af241b8dcd015524ac6dbec1330092dba151657"}, + {file = "zstandard-0.21.0-cp311-cp311-win_amd64.whl", hash = "sha256:48b6233b5c4cacb7afb0ee6b4f91820afbb6c0e3ae0fa10abbc20000acdf4f11"}, + {file = "zstandard-0.21.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e7d560ce14fd209db6adacce8908244503a009c6c39eee0c10f138996cd66d3e"}, + {file = "zstandard-0.21.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e6e131a4df2eb6f64961cea6f979cdff22d6e0d5516feb0d09492c8fd36f3bc"}, + {file = "zstandard-0.21.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e0c62a67ff425927898cf43da2cf6b852289ebcc2054514ea9bf121bec10a5"}, + {file = "zstandard-0.21.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1545fb9cb93e043351d0cb2ee73fa0ab32e61298968667bb924aac166278c3fc"}, + {file = "zstandard-0.21.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe6c821eb6870f81d73bf10e5deed80edcac1e63fbc40610e61f340723fd5f7c"}, + {file = "zstandard-0.21.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ddb086ea3b915e50f6604be93f4f64f168d3fc3cef3585bb9a375d5834392d4f"}, + {file = "zstandard-0.21.0-cp37-cp37m-win32.whl", hash = "sha256:57ac078ad7333c9db7a74804684099c4c77f98971c151cee18d17a12649bc25c"}, + {file = "zstandard-0.21.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1243b01fb7926a5a0417120c57d4c28b25a0200284af0525fddba812d575f605"}, + {file = "zstandard-0.21.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea68b1ba4f9678ac3d3e370d96442a6332d431e5050223626bdce748692226ea"}, + {file = "zstandard-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8070c1cdb4587a8aa038638acda3bd97c43c59e1e31705f2766d5576b329e97c"}, + {file = "zstandard-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4af612c96599b17e4930fe58bffd6514e6c25509d120f4eae6031b7595912f85"}, + {file = "zstandard-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cff891e37b167bc477f35562cda1248acc115dbafbea4f3af54ec70821090965"}, + {file = "zstandard-0.21.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9fec02ce2b38e8b2e86079ff0b912445495e8ab0b137f9c0505f88ad0d61296"}, + {file = "zstandard-0.21.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0bdbe350691dec3078b187b8304e6a9c4d9db3eb2d50ab5b1d748533e746d099"}, + {file = "zstandard-0.21.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b69cccd06a4a0a1d9fb3ec9a97600055cf03030ed7048d4bcb88c574f7895773"}, + {file = "zstandard-0.21.0-cp38-cp38-win32.whl", hash = "sha256:9980489f066a391c5572bc7dc471e903fb134e0b0001ea9b1d3eff85af0a6f1b"}, + {file = "zstandard-0.21.0-cp38-cp38-win_amd64.whl", hash = "sha256:0e1e94a9d9e35dc04bf90055e914077c80b1e0c15454cc5419e82529d3e70728"}, + {file = "zstandard-0.21.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2d61675b2a73edcef5e327e38eb62bdfc89009960f0e3991eae5cc3d54718de"}, + {file = "zstandard-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:25fbfef672ad798afab12e8fd204d122fca3bc8e2dcb0a2ba73bf0a0ac0f5f07"}, + {file = "zstandard-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62957069a7c2626ae80023998757e27bd28d933b165c487ab6f83ad3337f773d"}, + {file = "zstandard-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e10ed461e4807471075d4b7a2af51f5234c8f1e2a0c1d37d5ca49aaaad49e8"}, + {file = "zstandard-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9cff89a036c639a6a9299bf19e16bfb9ac7def9a7634c52c257166db09d950e7"}, + {file = "zstandard-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52b2b5e3e7670bd25835e0e0730a236f2b0df87672d99d3bf4bf87248aa659fb"}, + {file = "zstandard-0.21.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b1367da0dde8ae5040ef0413fb57b5baeac39d8931c70536d5f013b11d3fc3a5"}, + {file = "zstandard-0.21.0-cp39-cp39-win32.whl", hash = "sha256:db62cbe7a965e68ad2217a056107cc43d41764c66c895be05cf9c8b19578ce9c"}, + {file = "zstandard-0.21.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8d200617d5c876221304b0e3fe43307adde291b4a897e7b0617a61611dfff6a"}, + {file = "zstandard-0.21.0.tar.gz", hash = "sha256:f08e3a10d01a247877e4cb61a82a319ea746c356a3786558bed2481e6c405546"}, +] [package.dependencies] cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""} @@ -518,452 +1680,6 @@ cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\ cffi = ["cffi (>=1.11)"] [metadata] -lock-version = "1.1" +lock-version = "2.0" python-versions = "^3.10" -content-hash = "87463a91bcf2071a395a1cd220ad687a7b17ec33d9ec9b6efebfc27733451815" - -[metadata.files] -anyio = [ - {file = "anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {file = "anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, -] -attrs = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, -] -bump2version = [ - {file = "bump2version-1.0.1-py2.py3-none-any.whl", hash = "sha256:37f927ea17cde7ae2d7baf832f8e80ce3777624554a653006c9144f8017fe410"}, - {file = "bump2version-1.0.1.tar.gz", hash = "sha256:762cb2bfad61f4ec8e2bdf452c7c267416f8c70dd9ecb1653fd0bbb01fa936e6"}, -] -bumpversion = [ - {file = "bumpversion-0.6.0-py2.py3-none-any.whl", hash = "sha256:4eb3267a38194d09f048a2179980bb4803701969bff2c85fa8f6d1ce050be15e"}, - {file = "bumpversion-0.6.0.tar.gz", hash = "sha256:4ba55e4080d373f80177b4dabef146c07ce73c7d1377aabf9d3c3ae1f94584a6"}, -] -certifi = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, -] -cffi = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] -cfgv = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] -click = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, -] -colorama = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] -coverage = [ - {file = "coverage-7.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49567ec91fc5e0b15356da07a2feabb421d62f52a9fff4b1ec40e9e19772f5f8"}, - {file = "coverage-7.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2ef6cae70168815ed91388948b5f4fcc69681480a0061114db737f957719f03"}, - {file = "coverage-7.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3004765bca3acd9e015794e5c2f0c9a05587f5e698127ff95e9cfba0d3f29339"}, - {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cca7c0b7f5881dfe0291ef09ba7bb1582cb92ab0aeffd8afb00c700bf692415a"}, - {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2167d116309f564af56f9aa5e75ef710ef871c5f9b313a83050035097b56820"}, - {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cb5f152fb14857cbe7f3e8c9a5d98979c4c66319a33cad6e617f0067c9accdc4"}, - {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:87dc37f16fb5e3a28429e094145bf7c1753e32bb50f662722e378c5851f7fdc6"}, - {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e191a63a05851f8bce77bc875e75457f9b01d42843f8bd7feed2fc26bbe60833"}, - {file = "coverage-7.2.1-cp310-cp310-win32.whl", hash = "sha256:e3ea04b23b114572b98a88c85379e9e9ae031272ba1fb9b532aa934c621626d4"}, - {file = "coverage-7.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:0cf557827be7eca1c38a2480484d706693e7bb1929e129785fe59ec155a59de6"}, - {file = "coverage-7.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:570c21a29493b350f591a4b04c158ce1601e8d18bdcd21db136fbb135d75efa6"}, - {file = "coverage-7.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e872b082b32065ac2834149dc0adc2a2e6d8203080501e1e3c3c77851b466f9"}, - {file = "coverage-7.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fac6343bae03b176e9b58104a9810df3cdccd5cfed19f99adfa807ffbf43cf9b"}, - {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abacd0a738e71b20e224861bc87e819ef46fedba2fb01bc1af83dfd122e9c319"}, - {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9256d4c60c4bbfec92721b51579c50f9e5062c21c12bec56b55292464873508"}, - {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:80559eaf6c15ce3da10edb7977a1548b393db36cbc6cf417633eca05d84dd1ed"}, - {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0bd7e628f6c3ec4e7d2d24ec0e50aae4e5ae95ea644e849d92ae4805650b4c4e"}, - {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09643fb0df8e29f7417adc3f40aaf379d071ee8f0350ab290517c7004f05360b"}, - {file = "coverage-7.2.1-cp311-cp311-win32.whl", hash = "sha256:1b7fb13850ecb29b62a447ac3516c777b0e7a09ecb0f4bb6718a8654c87dfc80"}, - {file = "coverage-7.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:617a94ada56bbfe547aa8d1b1a2b8299e2ec1ba14aac1d4b26a9f7d6158e1273"}, - {file = "coverage-7.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8649371570551d2fd7dee22cfbf0b61f1747cdfb2b7587bb551e4beaaa44cb97"}, - {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d2b9b5e70a21474c105a133ba227c61bc95f2ac3b66861143ce39a5ea4b3f84"}, - {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82c988954722fa07ec5045c57b6d55bc1a0890defb57cf4a712ced65b26ddd"}, - {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861cc85dfbf55a7a768443d90a07e0ac5207704a9f97a8eb753292a7fcbdfcfc"}, - {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0339dc3237c0d31c3b574f19c57985fcbe494280153bbcad33f2cdf469f4ac3e"}, - {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5928b85416a388dd557ddc006425b0c37e8468bd1c3dc118c1a3de42f59e2a54"}, - {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d3843ca645f62c426c3d272902b9de90558e9886f15ddf5efe757b12dd376f5"}, - {file = "coverage-7.2.1-cp37-cp37m-win32.whl", hash = "sha256:6a034480e9ebd4e83d1aa0453fd78986414b5d237aea89a8fdc35d330aa13bae"}, - {file = "coverage-7.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6fce673f79a0e017a4dc35e18dc7bb90bf6d307c67a11ad5e61ca8d42b87cbff"}, - {file = "coverage-7.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f099da6958ddfa2ed84bddea7515cb248583292e16bb9231d151cd528eab657"}, - {file = "coverage-7.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:97a3189e019d27e914ecf5c5247ea9f13261d22c3bb0cfcfd2a9b179bb36f8b1"}, - {file = "coverage-7.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a81dbcf6c6c877986083d00b834ac1e84b375220207a059ad45d12f6e518a4e3"}, - {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d2c3dde4c0b9be4b02067185136b7ee4681978228ad5ec1278fa74f5ca3e99"}, - {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a209d512d157379cc9ab697cbdbb4cfd18daa3e7eebaa84c3d20b6af0037384"}, - {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f3d07edb912a978915576a776756069dede66d012baa503022d3a0adba1b6afa"}, - {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8dca3c1706670297851bca1acff9618455122246bdae623be31eca744ade05ec"}, - {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1991a6d64231a3e5bbe3099fb0dd7c9aeaa4275ad0e0aeff4cb9ef885c62ba2"}, - {file = "coverage-7.2.1-cp38-cp38-win32.whl", hash = "sha256:22c308bc508372576ffa3d2dbc4824bb70d28eeb4fcd79d4d1aed663a06630d0"}, - {file = "coverage-7.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:b0c0d46de5dd97f6c2d1b560bf0fcf0215658097b604f1840365296302a9d1fb"}, - {file = "coverage-7.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4dd34a935de268a133e4741827ae951283a28c0125ddcdbcbba41c4b98f2dfef"}, - {file = "coverage-7.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0f8318ed0f3c376cfad8d3520f496946977abde080439d6689d7799791457454"}, - {file = "coverage-7.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:834c2172edff5a08d78e2f53cf5e7164aacabeb66b369f76e7bb367ca4e2d993"}, - {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4d70c853f0546855f027890b77854508bdb4d6a81242a9d804482e667fff6e6"}, - {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a6450da4c7afc4534305b2b7d8650131e130610cea448ff240b6ab73d7eab63"}, - {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:99f4dd81b2bb8fc67c3da68b1f5ee1650aca06faa585cbc6818dbf67893c6d58"}, - {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bdd3f2f285ddcf2e75174248b2406189261a79e7fedee2ceeadc76219b6faa0e"}, - {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f29351393eb05e6326f044a7b45ed8e38cb4dcc38570d12791f271399dc41431"}, - {file = "coverage-7.2.1-cp39-cp39-win32.whl", hash = "sha256:e2b50ebc2b6121edf352336d503357321b9d8738bb7a72d06fc56153fd3f4cd8"}, - {file = "coverage-7.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd5a12239c0006252244f94863f1c518ac256160cd316ea5c47fb1a11b25889a"}, - {file = "coverage-7.2.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:436313d129db7cf5b4ac355dd2bd3f7c7e5294af077b090b85de75f8458b8616"}, - {file = "coverage-7.2.1.tar.gz", hash = "sha256:c77f2a9093ccf329dd523a9b2b3c854c20d2a3d968b6def3b820272ca6732242"}, -] -diamond-miner = [ - {file = "diamond_miner-1.0.3-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:7228bbe337b3b827e30a28d95b5eb0f21455dbd4626f49e1a291d4966e358481"}, - {file = "diamond_miner-1.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f0fe7124a1b9fe95942cb9474dd853e71b4dad84e007418199d972e733d0843"}, - {file = "diamond_miner-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea9ea4d74bb1bf62ca5a139ff67e0c7b95a325955d0e78bde760dc1982b5ee99"}, - {file = "diamond_miner-1.0.3-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:0e04a6ed386107dc79799354985e29df8e451db43ae1746a10522adffe518bbd"}, - {file = "diamond_miner-1.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9d08eb01691ffbec9b90e70af16ac42f783a63082da8f94673f710e7dde8bd9"}, - {file = "diamond_miner-1.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a9b1aa86146c8678049dc4a4616b9c896b4e6212286d19911a8a17f931cb142"}, - {file = "diamond_miner-1.0.3.tar.gz", hash = "sha256:0dfd28646862dad09f78fb07c02d97afd32f489987dda32765ae1070a5453476"}, -] -distlib = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, -] -exceptiongroup = [ - {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, - {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, -] -filelock = [ - {file = "filelock-3.9.0-py3-none-any.whl", hash = "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"}, - {file = "filelock-3.9.0.tar.gz", hash = "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de"}, -] -h11 = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] -httpcore = [ - {file = "httpcore-0.16.3-py3-none-any.whl", hash = "sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0"}, - {file = "httpcore-0.16.3.tar.gz", hash = "sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb"}, -] -httpx = [ - {file = "httpx-0.23.3-py3-none-any.whl", hash = "sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6"}, - {file = "httpx-0.23.3.tar.gz", hash = "sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9"}, -] -identify = [ - {file = "identify-2.5.18-py2.py3-none-any.whl", hash = "sha256:93aac7ecf2f6abf879b8f29a8002d3c6de7086b8c28d88e1ad15045a15ab63f9"}, - {file = "identify-2.5.18.tar.gz", hash = "sha256:89e144fa560cc4cffb6ef2ab5e9fb18ed9f9b3cb054384bab4b95c12f6c309fe"}, -] -idna = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] -iniconfig = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] -more-itertools = [ - {file = "more-itertools-8.14.0.tar.gz", hash = "sha256:c09443cd3d5438b8dafccd867a6bc1cb0894389e90cb53d227456b0b0bccb750"}, - {file = "more_itertools-8.14.0-py3-none-any.whl", hash = "sha256:1bc4f91ee5b1b31ac7ceacc17c09befe6a40a503907baf9c839c229b5095cfd2"}, -] -mypy = [ - {file = "mypy-0.942-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5bf44840fb43ac4074636fd47ee476d73f0039f4f54e86d7265077dc199be24d"}, - {file = "mypy-0.942-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dcd955f36e0180258a96f880348fbca54ce092b40fbb4b37372ae3b25a0b0a46"}, - {file = "mypy-0.942-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6776e5fa22381cc761df53e7496a805801c1a751b27b99a9ff2f0ca848c7eca0"}, - {file = "mypy-0.942-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:edf7237137a1a9330046dbb14796963d734dd740a98d5e144a3eb1d267f5f9ee"}, - {file = "mypy-0.942-cp310-cp310-win_amd64.whl", hash = "sha256:64235137edc16bee6f095aba73be5334677d6f6bdb7fa03cfab90164fa294a17"}, - {file = "mypy-0.942-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b840cfe89c4ab6386c40300689cd8645fc8d2d5f20101c7f8bd23d15fca14904"}, - {file = "mypy-0.942-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b184db8c618c43c3a31b32ff00cd28195d39e9c24e7c3b401f3db7f6e5767f5"}, - {file = "mypy-0.942-cp36-cp36m-win_amd64.whl", hash = "sha256:1a0459c333f00e6a11cbf6b468b870c2b99a906cb72d6eadf3d1d95d38c9352c"}, - {file = "mypy-0.942-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4c3e497588afccfa4334a9986b56f703e75793133c4be3a02d06a3df16b67a58"}, - {file = "mypy-0.942-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f6ad963172152e112b87cc7ec103ba0f2db2f1cd8997237827c052a3903eaa6"}, - {file = "mypy-0.942-cp37-cp37m-win_amd64.whl", hash = "sha256:0e2dd88410937423fba18e57147dd07cd8381291b93d5b1984626f173a26543e"}, - {file = "mypy-0.942-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:246e1aa127d5b78488a4a0594bd95f6d6fb9d63cf08a66dafbff8595d8891f67"}, - {file = "mypy-0.942-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d8d3ba77e56b84cd47a8ee45b62c84b6d80d32383928fe2548c9a124ea0a725c"}, - {file = "mypy-0.942-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2bc249409a7168d37c658e062e1ab5173300984a2dada2589638568ddc1db02b"}, - {file = "mypy-0.942-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9521c1265ccaaa1791d2c13582f06facf815f426cd8b07c3a485f486a8ffc1f3"}, - {file = "mypy-0.942-cp38-cp38-win_amd64.whl", hash = "sha256:e865fec858d75b78b4d63266c9aff770ecb6a39dfb6d6b56c47f7f8aba6baba8"}, - {file = "mypy-0.942-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ce34a118d1a898f47def970a2042b8af6bdcc01546454726c7dd2171aa6dfca"}, - {file = "mypy-0.942-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:10daab80bc40f84e3f087d896cdb53dc811a9f04eae4b3f95779c26edee89d16"}, - {file = "mypy-0.942-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3841b5433ff936bff2f4dc8d54cf2cdbfea5d8e88cedfac45c161368e5770ba6"}, - {file = "mypy-0.942-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f7106cbf9cc2f403693bf50ed7c9fa5bb3dfa9007b240db3c910929abe2a322"}, - {file = "mypy-0.942-cp39-cp39-win_amd64.whl", hash = "sha256:7742d2c4e46bb5017b51c810283a6a389296cda03df805a4f7869a6f41246534"}, - {file = "mypy-0.942-py3-none-any.whl", hash = "sha256:a1b383fe99678d7402754fe90448d4037f9512ce70c21f8aee3b8bf48ffc51db"}, - {file = "mypy-0.942.tar.gz", hash = "sha256:17e44649fec92e9f82102b48a3bf7b4a5510ad0cd22fa21a104826b5db4903e2"}, -] -mypy-extensions = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] -nodeenv = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, -] -packaging = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, -] -platformdirs = [ - {file = "platformdirs-3.1.0-py3-none-any.whl", hash = "sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a"}, - {file = "platformdirs-3.1.0.tar.gz", hash = "sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -pre-commit = [ - {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, - {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, -] -pycaracal = [ - {file = "pycaracal-0.14.5-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:d7bfc919f0f7b05f0631159a1a3294b4d3af07e9d1af16e772c25e8d2d13f609"}, - {file = "pycaracal-0.14.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:982750be1853274d977e4163dbe256950064f1c9c44c97ae2370b246abadc205"}, - {file = "pycaracal-0.14.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ef22c1aeeed7ef54de8f1b73f05a4221b8d605745e9ca4ac03f0abcf7174dbf"}, - {file = "pycaracal-0.14.5-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ed894eebd2d44c139a760021eb1b3b2af70a92de45ceace8791eb204e840979"}, - {file = "pycaracal-0.14.5-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:fa5cb4256b7e335be8c7043affeab63332323f8a7388558a43fd29050539bb6b"}, - {file = "pycaracal-0.14.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0168094057e00e00f335e5adc2cf10444cdce141c4b01ff79324bbc336a67ee3"}, - {file = "pycaracal-0.14.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:730b0dd5d734076fe684a006af2afaed55d40d4ed7a243b1af6943a2d4ad6ea1"}, - {file = "pycaracal-0.14.5-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:7758902c5f923c758c54c171f97f9022d7084407d41a7688f0ec36d53b93457a"}, - {file = "pycaracal-0.14.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3921cbe321f34f650b02f53a5c5d675c3ae43ed4ec4bfdcd3dd073007b771476"}, - {file = "pycaracal-0.14.5-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:db0eae35c2f76735bdb2427116029fb97bb651d3b3b9e350d676d393a6875521"}, - {file = "pycaracal-0.14.5-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41422868968a6e805c8933c4043bb664b96996864b4bbfe131129356f3847962"}, - {file = "pycaracal-0.14.5-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:1fb5a407d3ce5793ed1d7659954230d2d341df5a7782bf08da20e5fbedb57907"}, - {file = "pycaracal-0.14.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:159b93629f0e62b774ae06e6030df6999919e61378b5289bcc17c5d676c74cf1"}, - {file = "pycaracal-0.14.5-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49fb72070e0a75380e642876bb89522271a8fd0cbfe0145a8c815e7808d720f0"}, - {file = "pycaracal-0.14.5-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:af8129cab7c9784ba7587652f703d110343a33dbd219831a9e47e11ff72cecaa"}, - {file = "pycaracal-0.14.5.tar.gz", hash = "sha256:5b94de329627326022b4bc161d81e9050564d1034ac2338357d4760805f5d403"}, -] -pych-client = [ - {file = "pych-client-0.3.1.tar.gz", hash = "sha256:9770ab9370ecf95c2d51ebcd7c0af81b0a0871fda1e7bc651e0e5d6bcf9af2d7"}, - {file = "pych_client-0.3.1-py3-none-any.whl", hash = "sha256:d922335f0e5299222feca06ac8eb93074fc77393d0b84dc0e94a418a05cedeab"}, -] -pycparser = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] -pygfc = [ - {file = "pygfc-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd51b29d43ce80419d89a4094abb8ae18bdf3dd305974e91830035596dfe3f92"}, - {file = "pygfc-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce951014fc3c1b7b402d1a349df425a8d06e76c166848f9c0d3e5688f60f22ba"}, - {file = "pygfc-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d04e8c0626570999ff9fb4a731b25eae0cf7ce91f5abc83f426cfa2e7e6c275"}, - {file = "pygfc-1.0.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:676d4036eb525de94b7c38f23698392364e50750bef55030b0c792cc723bd2b0"}, - {file = "pygfc-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:60efdaabdc8a8e0c02d87f56eecbdbcf53df5a851a700c21b6629c55270f4cad"}, - {file = "pygfc-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:819bb4da04c8b740befa85f1727788164229be094e0fda1a69c02bcc6f2e820d"}, - {file = "pygfc-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:258d2b175401003e68fa8dd3f6eb3f972b06be0942090212709ed23cf98239d1"}, - {file = "pygfc-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc4635c6feabdf74f6845a60b336234ce50b25bb38d4674cd7814b064dbfa6f7"}, - {file = "pygfc-1.0.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c11cb233402171f59706cbfb452754bb5fb3fdcd2c562185a239dec5db620f7"}, - {file = "pygfc-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1eaf8ca7542e79b8cc5dce51a26c72ecce01fa1162408f8c1eaf7af84e28f378"}, - {file = "pygfc-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:6a728d6f0a28713510e40d4a7e365995d72af4f222df4761117a6b3b7330aa2a"}, - {file = "pygfc-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c1d032cd6e6f8b259d85d9c1093912aa6bcbe6b93e5f342c9cfffd7324dd6034"}, - {file = "pygfc-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6dc9f4d8da11cb0eb79104a43523ad994a1aa22b870712c2b7a77d47b13440ba"}, - {file = "pygfc-1.0.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5561bde1b4fdc447c5d05924bbb42c8fb8785e1e37ca4f939c81c296038bd03f"}, - {file = "pygfc-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fff5aba9369814f2c41b2beab4fa0a423eaabe7329894ded0c1338c329a2b357"}, - {file = "pygfc-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:44a089b78a0bb9b7262897215a11e9ce8203f44466b7d6af3528ce76bd361fd1"}, - {file = "pygfc-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2bee293c5dbc6bf2c4059438af0cb78b46d5ca85360e9b4f53ade3f81851f004"}, - {file = "pygfc-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d7023d98aa927cf0795850e4dcbc130f37244a8167fd8ff1cf64dbb8b82551dd"}, - {file = "pygfc-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a1ff585e073c9e0a310406073b19b5b836e57bc948cb016658e9f9bcde54520"}, - {file = "pygfc-1.0.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:991770d4ea13a481cc29491b317cdb3aaf52b7010c0c6296cca6efcd821e0617"}, - {file = "pygfc-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a709a8fb73e7473de24a2ad7e09cda2d5800530b1e5625c31bae1e478db76a8b"}, - {file = "pygfc-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:843797854cb203744536c49d2b3a27eecc7a66216bee5e18852b71a087a8de21"}, - {file = "pygfc-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b6c2e62b31711cf7f9befff6f2b4ca1b67cb3aaad3b2fe3239a91deea6255b9f"}, - {file = "pygfc-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da80f143aead77fb0b741029e179ae24a6569e57e38c7134bebb49745e42d020"}, - {file = "pygfc-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a382419308c5316629d795f6fe0712f515485aabfddb9c80e5a24981a8046054"}, - {file = "pygfc-1.0.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7464055da80027cd0ec08cfe80352170948075bbf14302bccaedbb769d519df3"}, - {file = "pygfc-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a3526a9160b963b5d529b207819595e5438768d038f15b68c116e83dc93ea28f"}, - {file = "pygfc-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:378cee6578989c7567c648092fa67745a430139319f85b2d95558137260ab4c6"}, - {file = "pygfc-1.0.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3dc51ab6345dfc5bc2c7bd6cc7cbd711345d129fa1162a49440790d6b95fda0e"}, - {file = "pygfc-1.0.5-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0e0f07637f9fddd61664e21a20998ecd59c588c9e55a66ec76ca25b68a671d1"}, - {file = "pygfc-1.0.5-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b160e81056770c39ef63c188e332891243210da040dac9ed9e1996bb26e91ba6"}, - {file = "pygfc-1.0.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3a3a2a92f6513e3b23ccda0fc9f55de523b0038699225aa2dd4b5ba22e6517b3"}, - {file = "pygfc-1.0.5-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c93a40950a01884e71009897892f90e3e7f493cd7ed59e93b03095c5a1b81c84"}, - {file = "pygfc-1.0.5-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:494f39c4c8b4629eed35e6792c16f2893d54baa82ae89b88e9b9a25b1cda82b0"}, - {file = "pygfc-1.0.5.tar.gz", hash = "sha256:94e524aac53eb8893ddaad54c0d97e4323e64a223ee0393de5ee8549949b55af"}, -] -pytest = [ - {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, - {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, -] -pytest-cov = [ - {file = "pytest-cov-3.0.0.tar.gz", hash = "sha256:e7f0f5b1617d2210a2cabc266dfe2f4c75a8d32fb89eafb7ad9d06f6d076d470"}, - {file = "pytest_cov-3.0.0-py3-none-any.whl", hash = "sha256:578d5d15ac4a25e5f961c938b85a05b09fdaae9deef3bb6de9a6e766622ca7a6"}, -] -pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -rfc3986 = [ - {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, - {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, -] -setuptools = [ - {file = "setuptools-67.5.1-py3-none-any.whl", hash = "sha256:1c39d42bda4cb89f7fdcad52b6762e3c309ec8f8715b27c684176b7d71283242"}, - {file = "setuptools-67.5.1.tar.gz", hash = "sha256:15136a251127da2d2e77ac7a1bc231eb504654f7e3346d93613a13f2e2787535"}, -] -sniffio = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] -tabulate = [ - {file = "tabulate-0.8.10-py3-none-any.whl", hash = "sha256:0ba055423dbaa164b9e456abe7920c5e8ed33fcc16f6d1b2f2d152c8e1e8b4fc"}, - {file = "tabulate-0.8.10.tar.gz", hash = "sha256:6c57f3f3dd7ac2782770155f3adb2db0b1a269637e42f27599925e64b114f519"}, -] -tomli = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -typer = [ - {file = "typer-0.4.2-py3-none-any.whl", hash = "sha256:023bae00d1baf358a6cc7cea45851639360bb716de687b42b0a4641cd99173f1"}, - {file = "typer-0.4.2.tar.gz", hash = "sha256:b8261c6c0152dd73478b5ba96ba677e5d6948c715c310f7c91079f311f62ec03"}, -] -types-tabulate = [ - {file = "types-tabulate-0.8.11.tar.gz", hash = "sha256:17a5fa3b5ca453815778fc9865e8ecd0118b07b2b9faff3e2b06fe448174dd5e"}, - {file = "types_tabulate-0.8.11-py3-none-any.whl", hash = "sha256:af811268241e8fb87b63c052c87d1e329898a93191309d5d42111372232b2e0e"}, -] -typing-extensions = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, -] -virtualenv = [ - {file = "virtualenv-20.20.0-py3-none-any.whl", hash = "sha256:3c22fa5a7c7aa106ced59934d2c20a2ecb7f49b4130b8bf444178a16b880fa45"}, - {file = "virtualenv-20.20.0.tar.gz", hash = "sha256:a8a4b8ca1e28f864b7514a253f98c1d62b64e31e77325ba279248c65fb4fcef4"}, -] -zstandard = [ - {file = "zstandard-0.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ef7e8a200e4c8ac9102ed3c90ed2aa379f6b880f63032200909c1be21951f556"}, - {file = "zstandard-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2dc466207016564805e56d28375f4f533b525ff50d6776946980dff5465566ac"}, - {file = "zstandard-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a2ee1d4f98447f3e5183ecfce5626f983504a4a0c005fbe92e60fa8e5d547ec"}, - {file = "zstandard-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d956e2f03c7200d7e61345e0880c292783ec26618d0d921dcad470cb195bbce2"}, - {file = "zstandard-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ce6f59cba9854fd14da5bfe34217a1501143057313966637b7291d1b0267bd1e"}, - {file = "zstandard-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7fa67cba473623848b6e88acf8d799b1906178fd883fb3a1da24561c779593b"}, - {file = "zstandard-0.18.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdb44d7284c8c5dd1b66dfb86dda7f4560fa94bfbbc1d2da749ba44831335e32"}, - {file = "zstandard-0.18.0-cp310-cp310-win32.whl", hash = "sha256:63694a376cde0aa8b1971d06ca28e8f8b5f492779cb6ee1cc46bbc3f019a42a5"}, - {file = "zstandard-0.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:702a8324cd90c74d9c8780d02bf55e79da3193c870c9665ad3a11647e3ad1435"}, - {file = "zstandard-0.18.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46f679bc5dfd938db4fb058218d9dc4db1336ffaf1ea774ff152ecadabd40805"}, - {file = "zstandard-0.18.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc2a4de9f363b3247d472362a65041fe4c0f59e01a2846b15d13046be866a885"}, - {file = "zstandard-0.18.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd3220d7627fd4d26397211cb3b560ec7cc4a94b75cfce89e847e8ce7fabe32d"}, - {file = "zstandard-0.18.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:39e98cf4773234bd9cebf9f9db730e451dfcfe435e220f8921242afda8321887"}, - {file = "zstandard-0.18.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5228e596eb1554598c872a337bbe4e5afe41cd1f8b1b15f2e35b50d061e35244"}, - {file = "zstandard-0.18.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d4a8fd45746a6c31e729f35196e80b8f1e9987c59f5ccb8859d7c6a6fbeb9c63"}, - {file = "zstandard-0.18.0-cp36-cp36m-win32.whl", hash = "sha256:4cbb85f29a990c2fdbf7bc63246567061a362ddca886d7fae6f780267c0a9e67"}, - {file = "zstandard-0.18.0-cp36-cp36m-win_amd64.whl", hash = "sha256:bfa6c8549fa18e6497a738b7033c49f94a8e2e30c5fbe2d14d0b5aa8bbc1695d"}, - {file = "zstandard-0.18.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e02043297c1832f2666cd2204f381bef43b10d56929e13c42c10c732c6e3b4ed"}, - {file = "zstandard-0.18.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7231543d38d2b7e02ef7cc78ef7ffd86419437e1114ff08709fe25a160e24bd6"}, - {file = "zstandard-0.18.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c86befac87445927488f5c8f205d11566f64c11519db223e9d282b945fa60dab"}, - {file = "zstandard-0.18.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:999a4e1768f219826ba3fa2064fab1c86dd72fdd47a42536235478c3bb3ca3e2"}, - {file = "zstandard-0.18.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df59cd1cf3c62075ee2a4da767089d19d874ac3ad42b04a71a167e91b384722"}, - {file = "zstandard-0.18.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1be31e9e3f7607ee0cdd60915410a5968b205d3e7aa83b7fcf3dd76dbbdb39e0"}, - {file = "zstandard-0.18.0-cp37-cp37m-win32.whl", hash = "sha256:490d11b705b8ae9dc845431bacc8dd1cef2408aede176620a5cd0cd411027936"}, - {file = "zstandard-0.18.0-cp37-cp37m-win_amd64.whl", hash = "sha256:266aba27fa9cc5e9091d3d325ebab1fa260f64e83e42516d5e73947c70216a5b"}, - {file = "zstandard-0.18.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b2260c4e07dd0723eadb586de7718b61acca4083a490dda69c5719d79bc715c"}, - {file = "zstandard-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3af8c2383d02feb6650e9255491ec7d0824f6e6dd2bbe3e521c469c985f31fb1"}, - {file = "zstandard-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28723a1d2e4df778573b76b321ebe9f3469ac98988104c2af116dd344802c3f8"}, - {file = "zstandard-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19cac7108ff2c342317fad6dc97604b47a41f403c8f19d0bfc396dfadc3638b8"}, - {file = "zstandard-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:76725d1ee83a8915100a310bbad5d9c1fc6397410259c94033b8318d548d9990"}, - {file = "zstandard-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d716a7694ce1fa60b20bc10f35c4a22be446ef7f514c8dbc8f858b61976de2fb"}, - {file = "zstandard-0.18.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:49685bf9a55d1ab34bd8423ea22db836ba43a181ac6b045ac4272093d5cb874e"}, - {file = "zstandard-0.18.0-cp38-cp38-win32.whl", hash = "sha256:1af1268a7dc870eb27515fb8db1f3e6c5a555d2b7bcc476fc3bab8886c7265ab"}, - {file = "zstandard-0.18.0-cp38-cp38-win_amd64.whl", hash = "sha256:1dc2d3809e763055a1a6c1a73f2b677320cc9a5aa1a7c6cfb35aee59bddc42d9"}, - {file = "zstandard-0.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eea18c1e7442f2aa9aff1bb84550dbb6a1f711faf6e48e7319de8f2b2e923c2a"}, - {file = "zstandard-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8677ffc6a6096cccbd892e558471c901fd821aba12b7fbc63833c7346f549224"}, - {file = "zstandard-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:083dc08abf03807af9beeb2b6a91c23ad78add2499f828176a3c7b742c44df02"}, - {file = "zstandard-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c990063664c08169c84474acecc9251ee035871589025cac47c060ff4ec4bc1a"}, - {file = "zstandard-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:533db8a6fac6248b2cb2c935e7b92f994efbdeb72e1ffa0b354432e087bb5a3e"}, - {file = "zstandard-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbb3cb8a082d62b8a73af42291569d266b05605e017a3d8a06a0e5c30b5f10f0"}, - {file = "zstandard-0.18.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d6c85ca5162049ede475b7ec98e87f9390501d44a3d6776ddd504e872464ec25"}, - {file = "zstandard-0.18.0-cp39-cp39-win32.whl", hash = "sha256:75479e7c2b3eebf402c59fbe57d21bc400cefa145ca356ee053b0a08908c5784"}, - {file = "zstandard-0.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:d85bfabad444812133a92fc6fbe463e1d07581dba72f041f07a360e63808b23c"}, - {file = "zstandard-0.18.0.tar.gz", hash = "sha256:0ac0357a0d985b4ff31a854744040d7b5754385d1f98f7145c30e02c6865cb6f"}, -] +content-hash = "0aee0ad8a3d87da4d710a9ea1857772c9a8e33e3cfc361646cae97a0b41fa1f4" diff --git a/pyproject.toml b/pyproject.toml index 5ff5a15..da404a3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,14 @@ diamond-miner = "^1.0.3" more-itertools = "^8.12.0" tabulate = "^0.8.9" typer = "^0.4.0" -pycaracal = "^0.14.5" +pycaracal = "0.14.5" +icecream = "^2.1.3" +tqdm = "^4.66.2" +matplotlib = "^3.8.3" +xxhash = "^3.4.1" +pytest-xdist = "^3.5.0" +networkx = "^3.2.1" +scipy = "^1.13.0" [tool.poetry.dev-dependencies] bumpversion = "^0.6.0" @@ -26,6 +33,9 @@ types-tabulate = "^0.8.5" [tool.poetry.scripts] fast-mda-traceroute = 'fast_mda_traceroute.cli:app' +[tool.poetry.group.dev.dependencies] +pytest-profiling = "^1.7.0" + [tool.mypy] ignore_missing_imports = true implicit_reexport = false @@ -42,7 +52,7 @@ exclude_lines = [ "if __name__ == \"__main__\":$", "pass$", "\\s\\.\\.\\.$", - "raise NotImplementedError$" + "raise NotImplementedError$", ] [build-system] diff --git a/tests/fakenet/__init__.py b/tests/fakenet/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/fakenet/apriori.py b/tests/fakenet/apriori.py new file mode 100644 index 0000000..d94220d --- /dev/null +++ b/tests/fakenet/apriori.py @@ -0,0 +1,199 @@ +import logging +from scipy.special import stirling2 +from collections import defaultdict +import concurrent.futures +from functools import cache +import math +import random + +from tqdm import tqdm +from fast_mda_traceroute.logger import logger +from fast_mda_traceroute.algorithms.utils.stopping_point import ( + estimate_total_interfaces, + reach_prob, + stopping_point, +) +from tests.fakenet.config import DEFAULT_CONFIDENCE, N_TRIES +from tests.fakenet.utils import eval_diamond_miner + + +@cache +def apriori_single_node(degree, confidence=DEFAULT_CONFIDENCE / 100): + tries = 100_000 + ok = 0 + for _ in range(tries): + estimation = 1 + total_probes = 0 + discovered_interfaces = set() + + while True: + stop = stopping_point(estimation, failure_probability=1 - confidence) + send_probes = stop - total_probes + if send_probes <= 0: + break + total_probes = stop + + round_interfaces = set(random.choices(range(degree), k=send_probes)) + discovered_interfaces.update(round_interfaces) + estimation = len(discovered_interfaces) + if len(discovered_interfaces) == degree: + ok += 1 + return ok / tries + + +@cache +def step(degree: int, new_probes: int, found: int) -> dict[int, float]: + # We have found `found` interfaces. + # During this round, we are sending `new_probes` additional probes. + # We output the probability vector for the number of new interfaces found. + + res = defaultdict(float) + for new_interfaces in range(0, min(new_probes, degree - found) + 1): + for n_relapse in range(new_probes - new_interfaces + 1): + ways_to_pick_relapsing_probes = math.comb(new_probes, n_relapse) + ways_to_distribute_relapsing_probes = found**n_relapse + + remaining_probes = new_probes - n_relapse + ways_to_distribute_remaining_probes = stirling2( + remaining_probes, new_interfaces + ) + + ways_to_pick_new_interfaces = math.comb(degree - found, new_interfaces) + ways_to_distribute_subsets = math.factorial(new_interfaces) + x = ( + ways_to_pick_relapsing_probes + * ways_to_distribute_relapsing_probes + * ways_to_distribute_remaining_probes + * ways_to_pick_new_interfaces + * ways_to_distribute_subsets + / degree**new_probes + ) + res[found + new_interfaces] += x + + return res + + +def rec_step(degree, estimation, found, sent, confidence=DEFAULT_CONFIDENCE / 100): + stop = stopping_point(estimation, failure_probability=1 - confidence) + if sent >= stop: + reach = reach_prob(found, stop) + return {found: reach} + + s = step(degree, stop - sent, found) + res = defaultdict(float) + for new_found, prob in s.items(): + # we have found `new_found` new interfaces with probability `prob` + # we update the estimation + new_estimation = new_found + 1 + for k, v in rec_step( + degree, new_estimation, new_found, stop, confidence + ).items(): + # given that we have found `new_found` new interfaces, + # we have a probability `v` to find `k` interfaces at the next step + res[k] += prob * v + return res + + +@cache +def apriori_direct_single_node_rec(degree, confidence=DEFAULT_CONFIDENCE / 100): + run = rec_step(degree, 1, 0, 0, confidence=confidence) + return run[degree] + + +def apriori_direct(net, confidence=DEFAULT_CONFIDENCE / 100): + expected = 1.0 + + for node in net.nodes: + degree = net.out_degree(node) + if degree < 1: + continue + direct = apriori_direct_single_node_rec(degree, confidence=confidence) + expected *= direct + return expected + + +@cache +def apriori_single_node_opti(degree, confidence=DEFAULT_CONFIDENCE / 100): + tries = 100_000 + ok = 0 + for _ in range(tries): + estimation = 1 + total_probes = 0 + discovered_interfaces = set() + + while True: + stop = stopping_point(estimation, failure_probability=1 - confidence) + send_probes = stop - total_probes + if send_probes <= 0: + break + total_probes = stop + + round_interfaces = set(random.choices(range(degree), k=send_probes)) + discovered_interfaces.update(round_interfaces) + estimation = estimate_total_interfaces( + k=total_probes, n=len(discovered_interfaces) + ) + if len(discovered_interfaces) == degree: + ok += 1 + return ok / tries + + +def apriori_prob(net, confidence=DEFAULT_CONFIDENCE / 100): + expected = 1.0 + + for node in net.nodes: + # fetch degree of node + degree = net.out_degree(node) + if degree < 1: + continue + expected *= apriori_single_node(degree, confidence=confidence) + return expected + + +def apriori_oracle(net, confidence=DEFAULT_CONFIDENCE / 100): + expected = 1.0 + + for node in net.nodes: + # fetch degree of node + degree = net.out_degree(node) + if degree < 1: + continue + stop = stopping_point(degree, failure_probability=1 - confidence) + p = reach_prob(degree, stop) + expected *= p + return expected + + +def worker(seed, net, confidence, optimal_jump): + logger.setLevel(logging.ERROR) + return eval_diamond_miner( + net=net, confidence=confidence * 100, seed=seed, optimal_jump=optimal_jump + ) + + +def simple_trial( + net, + optimal_jump, + n_tries=N_TRIES, + confidence=DEFAULT_CONFIDENCE / 100, + magic: int = 0, + n_workers=4, +): + seeds = range(magic, magic + n_tries) + + with concurrent.futures.ProcessPoolExecutor(max_workers=n_workers) as executor: + results = list( + tqdm( + executor.map( + worker, + seeds, + [net] * n_tries, + [confidence] * n_tries, + [optimal_jump] * n_tries, + ), + total=n_tries, + ) + ) + + OK = sum(results) + return OK / n_tries diff --git a/tests/fakenet/config.py b/tests/fakenet/config.py new file mode 100644 index 0000000..f40ddd9 --- /dev/null +++ b/tests/fakenet/config.py @@ -0,0 +1,10 @@ +import glob +import os + +DELTA_THRESHOLD = 0.95 +DEFAULT_CONFIDENCE = 95.0 +N_TRIES = 100 +SAMPLE_NET_DATA = "tests/fakenet/data" +SAMPLE_FILES = [ + f for f in glob.glob(os.path.join(SAMPLE_NET_DATA, "*")) if os.path.isfile(f) +] diff --git a/tests/fakenet/data/2-pathsLoadBalancer b/tests/fakenet/data/2-pathsLoadBalancer new file mode 100644 index 0000000..55b9598 --- /dev/null +++ b/tests/fakenet/data/2-pathsLoadBalancer @@ -0,0 +1,7 @@ +127.0.0.1 10.0.0.1 + +10.0.0.1 10.1.2.3 +10.0.0.1 2.3.3.3 + +10.1.2.3 127.1.1.6 +2.3.3.3 127.1.1.6 diff --git a/tests/fakenet/data/2-pathsUnequalLengthLoadBalancer b/tests/fakenet/data/2-pathsUnequalLengthLoadBalancer new file mode 100644 index 0000000..862ae8f --- /dev/null +++ b/tests/fakenet/data/2-pathsUnequalLengthLoadBalancer @@ -0,0 +1,14 @@ +127.0.0.1 10.0.0.1 + +10.0.0.1 1.1.1.2 +10.0.0.1 2.2.2.2 + +1.1.1.2 1.1.1.3 +2.2.2.2 2.2.2.3 + +1.1.1.3 127.1.1.6 + +2.2.2.3 2.2.2.4 +2.2.2.4 2.2.2.5 + +2.2.2.5 127.1.1.6 \ No newline at end of file diff --git a/tests/fakenet/data/3-diamonds-topology b/tests/fakenet/data/3-diamonds-topology new file mode 100644 index 0000000..ebfc7a4 --- /dev/null +++ b/tests/fakenet/data/3-diamonds-topology @@ -0,0 +1,24 @@ +127.0.0.1 10.0.0.1 + +10.0.0.1 1.1.1.2 +10.0.0.1 2.2.2.2 + +1.1.1.2 1.1.1.3 +2.2.2.2 2.2.2.3 + +1.1.1.3 1.1.1.4 +2.2.2.3 1.1.1.4 + +1.1.1.4 1.1.1.5 +1.1.1.4 2.2.2.5 + +1.1.1.5 1.1.1.6 +2.2.2.5 1.1.1.6 + +1.1.1.6 1.1.1.7 +1.1.1.6 2.2.2.7 + +1.1.1.7 1.1.1.8 +2.2.2.7 1.1.1.8 + +1.1.1.8 127.1.1.8 \ No newline at end of file diff --git a/tests/fakenet/data/6-pathsLB b/tests/fakenet/data/6-pathsLB new file mode 100644 index 0000000..fa854a2 --- /dev/null +++ b/tests/fakenet/data/6-pathsLB @@ -0,0 +1,15 @@ +127.0.0.1 10.0.0.1 + +10.0.0.1 1.1.1.1 +10.0.0.1 1.1.1.2 +10.0.0.1 1.1.1.3 +10.0.0.1 1.1.1.4 +10.0.0.1 1.1.1.5 +10.0.0.1 1.1.1.6 + +1.1.1.1 127.1.1.6 +1.1.1.2 127.1.1.6 +1.1.1.3 127.1.1.6 +1.1.1.4 127.1.1.6 +1.1.1.5 127.1.1.6 +1.1.1.6 127.1.1.6 diff --git a/tests/fakenet/data/asymmetric_topology b/tests/fakenet/data/asymmetric_topology new file mode 100644 index 0000000..19879cd --- /dev/null +++ b/tests/fakenet/data/asymmetric_topology @@ -0,0 +1,31 @@ +127.0.0.1 10.0.0.1 + +10.0.0.1 1.1.1.1 +10.0.0.1 1.1.1.2 +10.0.0.1 1.1.1.3 + +1.1.1.1 2.2.1.1 +1.1.1.1 2.2.1.2 +1.1.1.1 2.2.1.3 +1.1.1.1 2.2.1.4 + +2.2.1.1 127.1.1.6 +2.2.1.2 127.1.1.6 +2.2.1.3 127.1.1.6 +2.2.1.4 127.1.1.6 + + +1.1.1.2 2.2.2.1 +1.1.1.2 2.2.2.2 +1.1.1.2 2.2.2.3 + +2.2.2.1 127.1.1.6 +2.2.2.2 127.1.1.6 +2.2.2.3 127.1.1.6 + +1.1.1.3 2.2.3.1 +1.1.1.3 2.2.3.2 + +2.2.3.1 127.1.1.6 +2.2.3.2 127.1.1.6 + diff --git a/tests/fakenet/data/dummyTopology b/tests/fakenet/data/dummyTopology new file mode 100644 index 0000000..cd11603 --- /dev/null +++ b/tests/fakenet/data/dummyTopology @@ -0,0 +1,20 @@ +127.0.0.1 10.0.0.1 +10.0.0.1 10.1.2.3 + +10.1.2.3 4.5.6.7 +10.1.2.3 5.6.7.8 +10.1.2.3 6.7.8.9 + +4.5.6.7 2.3.3.3 +2.3.3.3 4.4.4.4 +4.4.4.4 127.1.1.6 + +5.6.7.8 3.3.3.3 +3.3.3.3 4.4.4.5 +3.3.3.3 4.4.4.6 +4.4.4.5 127.1.1.6 +4.4.4.6 127.1.1.6 + +6.7.8.9 5.5.5.5 +5.5.5.5 6.6.6.6 +6.6.6.6 127.1.1.6 diff --git a/tests/fakenet/data/graphs/ple2.planet-lab.eu_125.155.82.17.xml b/tests/fakenet/data/graphs/ple2.planet-lab.eu_125.155.82.17.xml new file mode 100644 index 0000000..49e8b3c --- /dev/null +++ b/tests/fakenet/data/graphs/ple2.planet-lab.eu_125.155.82.17.xml @@ -0,0 +1,3149 @@ + + + + + + + + + + + + + + + + + + + + + + 0x1p-1, 0x0p+0, 0x0p+0, 0x1.ccccccccccccdp-1 + ple2.planet-lab.eu + 1 + 12 + 132.227.123.12 + 40 + 1 + + + 0x1p-1, 0x1p-1, 0x1p-1, 0x1.ccccccccccccdp-1 + 2 + 8 + 1/16:132.227.123.12 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 132.227.123.1 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 134.157.167.125 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 134.157.254.124 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 195.221.127.181 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 193.51.181.102 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 193.51.177.117 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 83.97.89.9 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 62.40.98.76 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 62.40.98.78 + 4 + -1 + + + 0x1p-1, 0x1p-1, 0x1p-1, 0x1.ccccccccccccdp-1 + 2 + 8 + * * * + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 72.52.92.166 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 184.105.80.10 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 184.105.64.102 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 184.105.222.98 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 184.105.64.113 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 184.105.64.109 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 72.52.108.226 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 112.174.87.121 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.88.173 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.80.137 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.87.81 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.87.73 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.88.249 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.87.125 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.87.65 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 112.174.84.73 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.201 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.105 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.153 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.141 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.1 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.73 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.33 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.21 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.161 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.149 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.165 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.45 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.1 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.13 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.25 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.37 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.145 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.89 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.113 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.141 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.145 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.101 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.5 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.97 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.97 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.101 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.17 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.153 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.41 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.77 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.205 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.5 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.93 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.105 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.93 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.109 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.165 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.117 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.201 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.109 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.205 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.149 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.113 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.161 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.89 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.83.77 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.84.117 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.33 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.193 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.73 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.157 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.193 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.233 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.117 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.37 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.237 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.237 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.157 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.77 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.153 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.197 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 112.174.48.77 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.73 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.233 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.197 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.113 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.113 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.117 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.37 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.8.33 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.48.153 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.26.146 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.26.150 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 112.174.66.146 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 112.174.66.198 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 125.144.30.194 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 125.144.17.142 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 14.59.47.10 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 14.59.47.14 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 14.59.46.14 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 14.59.46.10 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 125.155.82.17 + 3 + 12 + 125.155.82.17 + 40 + 0 + + + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + 19e56f69-a439-4113-ba3a-7af30cbb4ac8 + 0x1.999999999999ap-3 + + + + diff --git a/tests/fakenet/data/graphs/ple2.planet-lab.eu_74.61.176.1.xml b/tests/fakenet/data/graphs/ple2.planet-lab.eu_74.61.176.1.xml new file mode 100644 index 0000000..e2d1f4a --- /dev/null +++ b/tests/fakenet/data/graphs/ple2.planet-lab.eu_74.61.176.1.xml @@ -0,0 +1,487 @@ + + + + + + + + + + + + + + + + + + + + + + 0x1p-1, 0x0p+0, 0x0p+0, 0x1.ccccccccccccdp-1 + ple2.planet-lab.eu + 1 + 12 + 132.227.123.12 + 40 + 1 + + + 0x1p-1, 0x1p-1, 0x1p-1, 0x1.ccccccccccccdp-1 + 2 + 8 + 1/16:132.227.123.12 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 132.227.123.1 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 134.157.167.125 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 134.157.254.124 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 195.221.127.181 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 193.51.181.102 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 193.51.177.114 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 77.67.123.209 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 89.149.134.45 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 89.149.133.233 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 173.205.44.190 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 144.232.25.231 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 144.232.14.7 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.13.195 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 144.232.15.19 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.13.14 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.5.210 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 144.232.22.142 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 144.232.1.167 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.13.83 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.22.229 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.11.227 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 144.232.22.155 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.22.70 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.2.86 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 2 + 8 + 144.232.17.59 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 208.35.161.106 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 66.233.169.254 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 4 + 8 + 66.233.169.162 + 4 + -1 + + + 0x1.999999999999ap-1, 0x1.999999999999ap-1, 0x0p+0, 0x1.ccccccccccccdp-1 + 74.61.176.1 + 3 + 12 + 74.61.176.1 + 40 + 0 + + + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + 0x1.6e978d4fdf3b6p-3, 0x1.9fbe76c8b4396p-3, 0x1.ae147ae147ae1p-3, 0x1.999999999999ap-1 + aaba8029-10b1-4904-bdb5-626d3eaf6803 + 0x1.999999999999ap-3 + + + + diff --git a/tests/fakenet/data/large_networks/kulcha.mimuw.edu.pl_61.6.250.1_2018-02-22 15_57_19.090924+01_00 b/tests/fakenet/data/large_networks/kulcha.mimuw.edu.pl_61.6.250.1_2018-02-22 15_57_19.090924+01_00 new file mode 100644 index 0000000..0ca3b3a --- /dev/null +++ b/tests/fakenet/data/large_networks/kulcha.mimuw.edu.pl_61.6.250.1_2018-02-22 15_57_19.090924+01_00 @@ -0,0 +1,93 @@ +127.0.0.1 192.168.1.1 +192.168.1.1 193.0.109.1 +193.0.109.1 193.0.103.1 +193.0.103.1 193.0.103.19 +193.0.103.19 212.191.224.33 +212.191.224.33 212.162.10.81 +212.162.10.81 1.1.1.1 +1.1.1.1 213.248.68.62 +1.1.1.1 129.250.9.5 +213.248.68.62 62.115.137.166 +213.248.68.62 62.115.121.0 +213.248.68.62 62.115.141.238 +213.248.68.62 62.115.121.6 +213.248.68.62 62.115.141.240 +213.248.68.62 62.115.121.8 +213.248.68.62 62.115.121.10 +213.248.68.62 62.115.116.161 +213.248.68.62 62.115.137.128 +213.248.68.62 62.115.116.159 +213.248.68.62 62.115.116.165 +213.248.68.62 62.115.141.236 +213.248.68.62 62.115.121.2 +213.248.68.62 62.115.137.168 +213.248.68.62 62.115.121.4 +213.248.68.62 62.115.116.163 +213.248.68.62 62.115.141.234 +213.248.68.62 62.115.137.164 +129.250.9.5 129.250.5.52 +62.115.137.166 62.115.112.231 +62.115.137.166 62.115.133.181 +62.115.121.0 62.115.112.239 +62.115.121.0 62.115.133.179 +62.115.141.238 62.115.112.239 +62.115.141.238 62.115.133.179 +62.115.121.6 62.115.112.231 +62.115.121.6 62.115.133.181 +62.115.141.240 62.115.112.239 +62.115.141.240 62.115.133.179 +129.250.5.52 129.250.7.63 +62.115.121.8 62.115.112.231 +62.115.121.8 62.115.133.181 +62.115.121.10 62.115.112.231 +62.115.121.10 62.115.133.181 +62.115.116.161 62.115.112.231 +62.115.116.161 62.115.133.181 +62.115.137.128 62.115.112.239 +62.115.137.128 62.115.133.179 +62.115.116.159 62.115.112.231 +62.115.116.159 62.115.133.181 +62.115.116.165 62.115.112.231 +62.115.116.165 62.115.133.181 +62.115.141.236 62.115.112.239 +62.115.141.236 62.115.133.179 +62.115.121.2 62.115.112.239 +62.115.121.2 62.115.133.179 +62.115.137.168 62.115.112.231 +62.115.137.168 62.115.133.181 +62.115.121.4 62.115.112.239 +62.115.121.4 62.115.133.179 +62.115.116.163 62.115.112.231 +62.115.116.163 62.115.133.181 +62.115.141.234 62.115.112.239 +62.115.141.234 62.115.133.179 +62.115.137.164 62.115.112.239 +62.115.137.164 62.115.133.179 +129.250.7.63 129.250.3.198 +62.115.112.231 62.115.122.245 +62.115.112.231 62.115.124.214 +62.115.112.231 62.115.133.183 +62.115.112.239 62.115.122.245 +62.115.112.239 62.115.124.214 +62.115.112.239 62.115.133.183 +62.115.133.181 62.115.114.37 +62.115.133.179 62.115.114.37 +129.250.3.198 129.250.6.98 +129.250.3.198 129.250.6.92 +62.115.114.37 62.115.144.191 +62.115.122.245 62.115.144.191 +62.115.124.214 80.91.251.100 +62.115.133.183 62.115.114.37 +129.250.6.98 129.250.5.253 +129.250.6.92 129.250.6.125 +62.115.144.191 61.6.255.154 +80.91.251.100 62.115.119.229 +61.6.255.154 61.6.255.9 +62.115.119.229 62.115.114.41 +129.250.5.253 203.131.254.166 +129.250.6.125 203.131.254.166 +61.6.255.9 127.1.1.6 +62.115.114.41 62.115.144.191 +203.131.254.166 61.6.255.150 +61.6.255.150 61.6.255.126 +61.6.255.126 127.1.1.6 diff --git a/tests/fakenet/data/large_networks/planetlab2.upm.ro_1.217.31.43_2018-05-17 10_58_23.290539+01_00 b/tests/fakenet/data/large_networks/planetlab2.upm.ro_1.217.31.43_2018-05-17 10_58_23.290539+01_00 new file mode 100755 index 0000000..671a1ea --- /dev/null +++ b/tests/fakenet/data/large_networks/planetlab2.upm.ro_1.217.31.43_2018-05-17 10_58_23.290539+01_00 @@ -0,0 +1,423 @@ +127.0.0.1 193.226.19.1 +193.226.19.1 217.73.170.253 +217.73.170.253 37.128.235.21 +37.128.235.21 37.128.239.121 +37.128.239.121 37.128.239.142 +37.128.239.142 212.162.45.193 +212.162.45.193 4.69.209.157 +4.69.209.157 4.68.111.134 +4.68.111.134 203.255.234.133 +4.68.111.134 203.255.234.141 +4.68.111.134 1.208.104.209 +4.68.111.134 1.208.107.29 +203.255.234.133 1.208.107.89 +203.255.234.133 1.213.147.189 +203.255.234.133 1.208.145.105 +203.255.234.133 1.208.145.5 +203.255.234.133 1.208.107.73 +203.255.234.133 1.208.148.133 +203.255.234.133 1.208.145.205 +203.255.234.133 1.208.144.173 +203.255.234.133 1.208.144.109 +203.255.234.133 1.208.145.165 +203.255.234.133 1.208.151.217 +203.255.234.133 210.120.244.1 +203.255.234.133 203.233.52.165 +203.255.234.133 1.213.149.1 +203.255.234.133 61.42.234.1 +203.255.234.133 1.208.106.157 +203.255.234.141 1.208.107.89 +203.255.234.141 1.208.144.173 +203.255.234.141 1.208.145.205 +203.255.234.141 1.208.145.105 +203.255.234.141 61.42.234.1 +203.255.234.141 1.208.144.109 +203.255.234.141 1.208.106.157 +203.255.234.141 1.208.151.217 +203.255.234.141 1.213.149.1 +203.255.234.141 1.208.148.133 +203.255.234.141 1.208.145.5 +203.255.234.141 1.213.147.189 +203.255.234.141 210.120.244.1 +203.255.234.141 1.208.107.73 +203.255.234.141 203.233.52.165 +203.255.234.141 1.208.145.165 +1.208.104.209 210.180.226.41 +1.208.104.209 1.208.104.37 +1.208.104.209 203.233.52.33 +1.208.104.209 203.255.234.105 +1.208.104.209 1.208.144.25 +1.208.104.209 203.248.207.229 +1.208.104.209 203.233.37.73 +1.208.104.209 1.208.104.93 +1.208.104.209 203.255.234.153 +1.208.104.209 203.255.234.181 +1.208.104.209 1.208.107.117 +1.208.104.209 211.53.88.93 +1.208.104.209 1.208.146.21 +1.208.107.29 1.208.107.117 +1.208.107.29 1.208.144.25 +1.208.107.29 1.208.146.21 +1.208.107.29 203.233.37.73 +1.208.107.29 203.255.234.181 +1.208.107.29 203.255.234.105 +1.208.107.29 1.208.104.37 +1.208.107.29 203.248.207.229 +1.208.107.29 203.233.52.33 +1.208.107.29 1.208.104.93 +1.208.107.29 211.53.88.93 +1.208.107.29 203.255.234.153 +1.208.107.29 210.180.226.41 +1.208.107.117 1.213.148.26 +1.208.107.117 203.248.208.230 +1.208.107.117 1.213.106.10 +1.208.107.117 203.233.117.114 +1.208.107.117 211.53.88.170 +1.208.107.117 1.213.148.34 +1.208.107.117 203.233.52.226 +1.208.107.117 1.213.106.122 +1.208.107.117 203.233.60.190 +1.208.107.117 211.53.88.190 +1.208.107.89 210.120.103.226 +1.208.107.89 1.208.150.166 +1.208.107.89 1.208.144.218 +1.208.107.89 1.208.104.50 +1.208.107.89 1.208.145.190 +1.208.107.89 211.63.38.14 +1.208.107.89 1.208.105.254 +1.208.107.89 211.40.6.10 +1.208.107.89 210.120.105.118 +1.208.107.89 1.208.104.58 +1.213.147.189 1.208.145.190 +1.213.147.189 1.208.104.58 +1.213.147.189 1.208.144.218 +1.213.147.189 211.40.6.10 +1.213.147.189 210.120.105.118 +1.213.147.189 1.208.104.50 +1.213.147.189 211.63.38.14 +1.213.147.189 1.208.150.166 +1.213.147.189 210.120.103.226 +1.213.147.189 1.208.105.254 +1.208.144.173 1.208.144.218 +1.208.144.173 1.208.145.190 +1.208.144.173 210.120.103.226 +1.208.144.173 1.208.150.166 +1.208.144.173 1.208.105.254 +1.208.144.173 210.120.105.118 +1.208.144.173 1.208.104.58 +1.208.144.173 1.208.104.50 +1.208.144.173 211.63.38.14 +1.208.144.173 211.40.6.10 +210.180.226.41 1.213.148.26 +210.180.226.41 203.233.60.190 +210.180.226.41 203.233.52.226 +210.180.226.41 211.53.88.190 +210.180.226.41 1.213.106.10 +210.180.226.41 1.213.148.34 +210.180.226.41 203.248.208.230 +210.180.226.41 211.53.88.170 +210.180.226.41 203.233.117.114 +210.180.226.41 1.213.106.122 +1.208.145.205 1.208.145.190 +1.208.145.205 1.208.104.50 +1.208.145.205 211.40.6.10 +1.208.145.205 1.208.150.166 +1.208.145.205 210.120.103.226 +1.208.145.205 1.208.144.218 +1.208.145.205 1.208.104.58 +1.208.145.205 210.120.105.118 +1.208.145.205 211.63.38.14 +1.208.145.205 1.208.105.254 +1.213.148.26 1.208.148.142 +1.213.148.26 1.213.151.250 +1.208.145.190 1.213.148.106 +1.208.145.190 1.208.144.178 +210.120.103.226 1.208.145.178 +210.120.103.226 1.208.146.14 +203.233.60.190 1.208.105.58 +203.233.60.190 1.208.145.238 +1.208.150.166 1.213.148.106 +1.208.150.166 1.208.144.178 +1.208.144.218 1.208.145.178 +1.208.144.218 1.208.146.14 +1.208.145.178 1.213.151.182 +1.208.148.142 1.213.150.234 +1.213.148.106 1.213.151.182 +1.208.105.58 1.213.150.234 +1.208.144.178 1.213.151.182 +1.213.150.234 1.210.78.14 +1.213.150.234 210.120.105.114 +1.213.151.182 210.120.105.114 +1.213.151.182 1.210.78.14 +210.120.105.114 210.120.196.250 +210.120.105.114 61.40.251.134 +1.210.78.14 210.120.196.138 +1.210.78.14 1.214.78.18 +210.120.196.138 1.214.79.26 +210.120.196.250 1.209.79.26 +61.40.251.134 1.214.79.26 +1.214.78.18 1.209.79.26 +1.209.79.26 8.8.8.1 +1.214.79.26 8.8.8.1 +8.8.8.1 127.1.1.6 +1.208.104.37 211.53.88.170 +1.208.104.37 203.233.117.114 +1.208.104.37 203.248.208.230 +1.208.104.37 1.213.106.122 +1.208.104.37 1.213.148.34 +1.208.104.37 1.213.148.26 +1.208.104.37 1.213.106.10 +1.208.104.37 211.53.88.190 +1.208.104.37 203.233.52.226 +1.208.104.37 203.233.60.190 +1.208.144.25 211.53.88.170 +1.208.144.25 203.233.60.190 +1.208.144.25 203.233.52.226 +1.208.144.25 203.248.208.230 +1.208.144.25 211.53.88.190 +1.208.144.25 1.213.148.34 +1.208.144.25 1.213.148.26 +1.208.144.25 1.213.106.122 +1.208.144.25 1.213.106.10 +1.208.144.25 203.233.117.114 +1.208.145.105 211.40.6.10 +1.208.145.105 1.208.104.58 +1.208.145.105 211.63.38.14 +1.208.145.105 1.208.144.218 +1.208.145.105 1.208.150.166 +1.208.145.105 210.120.103.226 +1.208.145.105 210.120.105.118 +1.208.145.105 1.208.105.254 +1.208.145.105 1.208.104.50 +1.208.145.105 1.208.145.190 +1.208.146.21 211.53.88.170 +1.208.146.21 1.213.148.26 +1.208.146.21 203.233.60.190 +1.208.146.21 1.213.148.34 +1.208.146.21 203.233.117.114 +1.208.146.21 203.248.208.230 +1.208.146.21 211.53.88.190 +1.208.146.21 203.233.52.226 +1.208.146.21 1.213.106.10 +1.208.146.21 1.213.106.122 +1.208.145.5 210.120.105.118 +1.208.145.5 1.208.145.190 +1.208.145.5 211.40.6.10 +1.208.145.5 1.208.105.254 +1.208.145.5 1.208.104.50 +1.208.145.5 1.208.144.218 +1.208.145.5 1.208.104.58 +1.208.145.5 1.208.150.166 +1.208.145.5 210.120.103.226 +1.208.145.5 211.63.38.14 +1.208.107.73 211.63.38.14 +1.208.107.73 1.208.150.166 +1.208.107.73 210.120.103.226 +1.208.107.73 210.120.105.118 +1.208.107.73 1.208.104.58 +1.208.107.73 1.208.144.218 +1.208.107.73 211.40.6.10 +1.208.107.73 1.208.145.190 +1.208.107.73 1.208.104.50 +1.208.107.73 1.208.105.254 +203.248.207.229 1.213.148.34 +203.248.207.229 1.213.106.122 +203.248.207.229 203.233.52.226 +203.248.207.229 1.213.106.10 +203.248.207.229 211.53.88.190 +203.248.207.229 203.233.60.190 +203.248.207.229 203.248.208.230 +203.248.207.229 1.213.148.26 +203.248.207.229 203.233.117.114 +203.248.207.229 211.53.88.170 +1.208.148.133 1.208.104.58 +1.208.148.133 1.208.145.190 +1.208.148.133 1.208.144.218 +1.208.148.133 211.40.6.10 +1.208.148.133 210.120.105.118 +1.208.148.133 210.120.103.226 +1.208.148.133 1.208.105.254 +1.208.148.133 211.63.38.14 +1.208.148.133 1.208.104.50 +1.208.148.133 1.208.150.166 +203.233.52.33 211.53.88.170 +203.233.52.33 1.213.106.122 +203.233.52.33 211.53.88.190 +203.233.52.33 203.233.60.190 +203.233.52.33 1.213.106.10 +203.233.52.33 203.233.52.226 +203.233.52.33 1.213.148.34 +203.233.52.33 1.213.148.26 +203.233.52.33 203.248.208.230 +203.233.52.33 203.233.117.114 +61.42.234.1 1.208.145.190 +61.42.234.1 1.208.105.254 +61.42.234.1 1.208.144.218 +61.42.234.1 1.208.104.50 +61.42.234.1 210.120.103.226 +61.42.234.1 211.63.38.14 +61.42.234.1 210.120.105.118 +61.42.234.1 211.40.6.10 +61.42.234.1 1.208.104.58 +61.42.234.1 1.208.150.166 +203.233.37.73 1.213.148.26 +203.233.37.73 203.233.60.190 +203.233.37.73 1.213.106.10 +203.233.37.73 203.233.52.226 +203.233.37.73 203.248.208.230 +203.233.37.73 211.53.88.170 +203.233.37.73 203.233.117.114 +203.233.37.73 1.213.148.34 +203.233.37.73 1.213.106.122 +203.233.37.73 211.53.88.190 +1.208.144.109 1.208.144.218 +1.208.144.109 211.63.38.14 +1.208.144.109 1.208.104.58 +1.208.144.109 1.208.145.190 +1.208.144.109 1.208.150.166 +1.208.144.109 211.40.6.10 +1.208.144.109 210.120.103.226 +1.208.144.109 1.208.105.254 +1.208.144.109 1.208.104.50 +1.208.144.109 210.120.105.118 +1.208.145.165 1.208.105.254 +1.208.145.165 211.63.38.14 +1.208.145.165 1.208.104.58 +1.208.145.165 210.120.105.118 +1.208.145.165 1.208.145.190 +1.208.145.165 1.208.144.218 +1.208.145.165 210.120.103.226 +1.208.145.165 211.40.6.10 +1.208.145.165 1.208.150.166 +1.208.145.165 1.208.104.50 +203.255.234.181 1.213.148.34 +203.255.234.181 203.248.208.230 +203.255.234.181 1.213.148.26 +203.255.234.181 211.53.88.170 +203.255.234.181 203.233.60.190 +203.255.234.181 1.213.106.10 +203.255.234.181 1.213.106.122 +203.255.234.181 203.233.52.226 +203.255.234.181 203.233.117.114 +203.255.234.181 211.53.88.190 +203.255.234.105 203.233.117.114 +203.255.234.105 203.233.52.226 +203.255.234.105 203.248.208.230 +203.255.234.105 203.233.60.190 +203.255.234.105 1.213.106.122 +203.255.234.105 1.213.148.34 +203.255.234.105 1.213.106.10 +203.255.234.105 1.213.148.26 +203.255.234.105 211.53.88.170 +203.255.234.105 211.53.88.190 +1.208.106.157 1.208.104.50 +1.208.106.157 1.208.150.166 +1.208.106.157 1.208.104.58 +1.208.106.157 210.120.105.118 +1.208.106.157 211.63.38.14 +1.208.106.157 1.208.144.218 +1.208.106.157 1.208.105.254 +1.208.106.157 210.120.103.226 +1.208.106.157 211.40.6.10 +1.208.106.157 1.208.145.190 +1.208.151.217 1.208.104.58 +1.208.151.217 1.208.104.50 +1.208.151.217 1.208.144.218 +1.208.151.217 210.120.103.226 +1.208.151.217 1.208.105.254 +1.208.151.217 1.208.145.190 +1.208.151.217 1.208.150.166 +1.208.151.217 211.63.38.14 +1.208.151.217 210.120.105.118 +1.208.151.217 211.40.6.10 +1.213.149.1 1.208.145.190 +1.213.149.1 1.208.104.58 +1.213.149.1 1.208.104.50 +1.213.149.1 1.208.144.218 +1.213.149.1 210.120.105.118 +1.213.149.1 211.63.38.14 +1.213.149.1 1.208.150.166 +1.213.149.1 210.120.103.226 +1.213.149.1 1.208.105.254 +1.213.149.1 211.40.6.10 +210.120.244.1 210.120.105.118 +210.120.244.1 1.208.105.254 +210.120.244.1 1.208.104.58 +210.120.244.1 1.208.150.166 +210.120.244.1 1.208.104.50 +210.120.244.1 211.40.6.10 +210.120.244.1 211.63.38.14 +210.120.244.1 1.208.144.218 +210.120.244.1 210.120.103.226 +210.120.244.1 1.208.145.190 +1.208.104.93 203.233.60.190 +1.208.104.93 203.233.52.226 +1.208.104.93 1.213.106.122 +1.208.104.93 203.248.208.230 +1.208.104.93 211.53.88.190 +1.208.104.93 211.53.88.170 +1.208.104.93 1.213.148.26 +1.208.104.93 1.213.148.34 +1.208.104.93 1.213.106.10 +1.208.104.93 203.233.117.114 +211.53.88.93 1.213.106.10 +211.53.88.93 1.213.148.26 +211.53.88.93 1.213.106.122 +211.53.88.93 203.248.208.230 +211.53.88.93 203.233.52.226 +211.53.88.93 211.53.88.170 +211.53.88.93 211.53.88.190 +211.53.88.93 203.233.60.190 +211.53.88.93 203.233.117.114 +211.53.88.93 1.213.148.34 +203.255.234.153 1.213.148.34 +203.255.234.153 203.248.208.230 +203.255.234.153 1.213.148.26 +203.255.234.153 203.233.52.226 +203.255.234.153 211.53.88.170 +203.255.234.153 203.233.117.114 +203.255.234.153 203.233.60.190 +203.255.234.153 1.213.106.122 +203.255.234.153 211.53.88.190 +203.255.234.153 1.213.106.10 +203.233.52.165 1.208.105.254 +203.233.52.165 210.120.105.118 +203.233.52.165 211.40.6.10 +203.233.52.165 211.63.38.14 +203.233.52.165 210.120.103.226 +203.233.52.165 1.208.104.58 +203.233.52.165 1.208.150.166 +203.233.52.165 1.208.145.190 +203.233.52.165 1.208.144.218 +203.233.52.165 1.208.104.50 +1.208.104.58 1.213.148.106 +1.208.104.58 1.208.144.178 +203.233.117.114 1.208.145.238 +203.233.117.114 1.208.105.58 +1.208.105.254 1.208.146.14 +1.208.105.254 1.208.145.178 +1.213.148.34 1.208.105.58 +1.213.148.34 1.208.145.238 +211.53.88.170 1.208.148.142 +211.53.88.170 1.213.151.250 +211.40.6.10 1.208.146.14 +211.40.6.10 1.208.145.178 +211.63.38.14 1.213.148.106 +211.63.38.14 1.208.144.178 +210.120.105.118 1.208.145.178 +210.120.105.118 1.208.146.14 +203.233.52.226 1.213.151.250 +203.233.52.226 1.208.148.142 +1.208.104.50 1.213.148.106 +1.208.104.50 1.208.144.178 +203.248.208.230 1.213.151.250 +203.248.208.230 1.208.148.142 +211.53.88.190 1.208.105.58 +211.53.88.190 1.208.145.238 +1.213.106.10 1.208.105.58 +1.213.106.10 1.208.145.238 +1.213.106.122 1.213.151.250 +1.213.106.122 1.208.148.142 +1.208.145.238 1.213.150.234 +1.208.146.14 1.213.151.182 +1.213.151.250 1.213.150.234 diff --git a/tests/fakenet/data/large_networks/ple2.cesnet.cz_59.20.252.129_2018-03-01 12_22_19.596431+01_00 b/tests/fakenet/data/large_networks/ple2.cesnet.cz_59.20.252.129_2018-03-01 12_22_19.596431+01_00 new file mode 100644 index 0000000..962a08c --- /dev/null +++ b/tests/fakenet/data/large_networks/ple2.cesnet.cz_59.20.252.129_2018-03-01 12_22_19.596431+01_00 @@ -0,0 +1,234 @@ +127.0.0.1 192.168.1.1 +192.168.1.1 195.113.161.1 +195.113.161.1 195.113.235.89 +195.113.235.89 83.97.88.41 +83.97.88.41 91.210.16.201 +91.210.16.201 184.105.213.233 +184.105.213.233 72.52.92.13 +72.52.92.13 184.105.81.77 +184.105.81.77 184.105.80.10 +184.105.80.10 184.105.64.102 +184.105.64.102 184.105.222.98 +184.105.222.98 184.105.64.113 +184.105.64.113 184.105.64.109 +184.105.64.109 72.52.108.226 +72.52.108.226 112.174.87.121 +72.52.108.226 112.174.87.81 +72.52.108.226 112.174.87.65 +72.52.108.226 112.174.87.73 +72.52.108.226 112.174.88.249 +72.52.108.226 112.174.88.173 +72.52.108.226 112.174.87.125 +72.52.108.226 112.174.80.137 +112.174.87.121 112.174.84.93 +112.174.87.121 112.174.83.1 +112.174.87.121 112.174.84.89 +112.174.87.121 112.174.84.141 +112.174.87.121 112.174.84.73 +112.174.87.121 112.174.84.201 +112.174.87.121 112.174.83.93 +112.174.87.121 112.174.84.1 +112.174.87.121 112.174.83.13 +112.174.87.121 112.174.83.89 +112.174.87.121 112.174.83.141 +112.174.87.121 112.174.83.149 +112.174.87.81 112.174.84.33 +112.174.87.81 112.174.84.161 +112.174.87.81 112.174.84.109 +112.174.87.81 112.174.83.109 +112.174.87.81 112.174.84.105 +112.174.87.81 112.174.83.105 +112.174.87.81 112.174.83.161 +112.174.87.81 112.174.83.201 +112.174.87.81 112.174.84.149 +112.174.87.81 112.174.83.21 +112.174.87.81 112.174.84.41 +112.174.87.81 112.174.83.73 +112.174.87.65 112.174.84.141 +112.174.87.65 112.174.83.93 +112.174.87.65 112.174.84.1 +112.174.87.65 112.174.84.89 +112.174.87.65 112.174.84.201 +112.174.87.65 112.174.83.13 +112.174.87.65 112.174.84.73 +112.174.87.65 112.174.83.1 +112.174.87.65 112.174.83.149 +112.174.87.65 112.174.83.141 +112.174.87.65 112.174.83.89 +112.174.87.65 112.174.84.93 +112.174.87.73 112.174.84.205 +112.174.87.73 112.174.83.153 +112.174.87.73 112.174.84.5 +112.174.87.73 112.174.84.97 +112.174.87.73 112.174.83.101 +112.174.87.73 112.174.83.145 +112.174.87.73 112.174.84.101 +112.174.87.73 112.174.84.145 +112.174.87.73 112.174.83.5 +112.174.87.73 112.174.83.17 +112.174.87.73 112.174.83.97 +112.174.87.73 112.174.84.77 +112.174.88.249 112.174.83.5 +112.174.88.249 112.174.84.97 +112.174.88.249 112.174.84.101 +112.174.88.249 112.174.84.5 +112.174.88.249 112.174.83.145 +112.174.88.249 112.174.84.205 +112.174.88.249 112.174.83.101 +112.174.88.249 112.174.84.145 +112.174.88.249 112.174.83.17 +112.174.88.249 112.174.84.77 +112.174.88.249 112.174.83.97 +112.174.88.249 112.174.83.153 +112.174.88.173 112.174.83.77 +112.174.88.173 112.174.84.153 +112.174.88.173 112.174.84.117 +112.174.88.173 112.174.84.37 +112.174.88.173 112.174.84.113 +112.174.88.173 112.174.83.113 +112.174.88.173 112.174.83.117 +112.174.88.173 112.174.84.165 +112.174.88.173 112.174.83.205 +112.174.88.173 112.174.84.45 +112.174.88.173 112.174.83.165 +112.174.88.173 112.174.83.25 +112.174.87.125 112.174.84.105 +112.174.87.125 112.174.83.105 +112.174.87.125 112.174.83.109 +112.174.87.125 112.174.83.201 +112.174.87.125 112.174.84.149 +112.174.87.125 112.174.84.41 +112.174.87.125 112.174.84.33 +112.174.87.125 112.174.83.21 +112.174.87.125 112.174.83.161 +112.174.87.125 112.174.84.161 +112.174.87.125 112.174.83.73 +112.174.87.125 112.174.84.109 +112.174.80.137 112.174.84.145 +112.174.80.137 112.174.84.205 +112.174.80.137 112.174.83.153 +112.174.80.137 112.174.84.101 +112.174.80.137 112.174.84.5 +112.174.80.137 112.174.83.97 +112.174.80.137 112.174.83.101 +112.174.80.137 112.174.83.5 +112.174.80.137 112.174.84.97 +112.174.80.137 112.174.83.145 +112.174.80.137 112.174.83.17 +112.174.80.137 112.174.84.77 +112.174.84.93 8.8.8.1 +112.174.83.1 8.8.8.1 +112.174.84.89 8.8.8.1 +112.174.84.141 8.8.8.1 +112.174.83.77 8.8.8.1 +112.174.84.105 8.8.8.1 +112.174.83.105 8.8.8.1 +112.174.83.109 8.8.8.1 +112.174.84.33 8.8.8.1 +112.174.83.201 8.8.8.1 +112.174.84.73 8.8.8.1 +112.174.84.149 8.8.8.1 +112.174.84.161 8.8.8.1 +112.174.84.109 8.8.8.1 +112.174.84.153 8.8.8.1 +112.174.84.145 8.8.8.1 +112.174.84.117 8.8.8.1 +112.174.83.93 8.8.8.1 +112.174.84.201 8.8.8.1 +112.174.84.205 8.8.8.1 +112.174.84.1 8.8.8.1 +112.174.83.153 8.8.8.1 +112.174.84.5 8.8.8.1 +112.174.84.101 8.8.8.1 +112.174.84.97 8.8.8.1 +112.174.83.97 8.8.8.1 +112.174.83.101 8.8.8.1 +112.174.83.5 8.8.8.1 +112.174.83.145 8.8.8.1 +112.174.84.37 8.8.8.1 +112.174.84.41 8.8.8.1 +112.174.83.13 8.8.8.1 +112.174.84.113 8.8.8.1 +112.174.83.21 8.8.8.1 +112.174.83.161 8.8.8.1 +112.174.83.113 8.8.8.1 +112.174.83.89 8.8.8.1 +112.174.83.117 8.8.8.1 +112.174.83.141 8.8.8.1 +112.174.84.165 8.8.8.1 +112.174.83.205 8.8.8.1 +112.174.84.45 8.8.8.1 +112.174.83.149 8.8.8.1 +112.174.83.165 8.8.8.1 +112.174.83.73 8.8.8.1 +112.174.83.17 8.8.8.1 +112.174.84.77 8.8.8.1 +112.174.83.25 8.8.8.1 +8.8.8.1 8.8.8.2 +8.8.8.2 112.174.234.26 +8.8.8.2 112.174.236.150 +8.8.8.2 112.174.236.154 +8.8.8.2 112.174.234.146 +8.8.8.2 112.174.237.154 +8.8.8.2 112.174.234.142 +8.8.8.2 112.174.235.126 +8.8.8.2 112.174.235.146 +8.8.8.2 112.174.236.2 +8.8.8.2 112.174.237.150 +8.8.8.2 112.174.236.142 +8.8.8.2 112.174.237.2 +8.8.8.2 112.174.235.26 +8.8.8.2 112.174.236.146 +8.8.8.2 112.174.236.218 +8.8.8.2 112.174.237.146 +8.8.8.2 112.174.234.154 +8.8.8.2 112.174.236.26 +8.8.8.2 112.174.235.2 +8.8.8.2 112.174.235.218 +8.8.8.2 112.174.237.126 +8.8.8.2 112.174.235.154 +8.8.8.2 112.174.236.126 +8.8.8.2 112.174.234.218 +8.8.8.2 112.174.234.2 +8.8.8.2 112.174.237.26 +8.8.8.2 112.174.237.142 +8.8.8.2 112.174.237.218 +8.8.8.2 112.174.234.150 +8.8.8.2 112.174.234.126 +8.8.8.2 112.174.235.142 +8.8.8.2 112.174.235.150 +112.174.234.26 8.8.8.3 +112.174.236.150 8.8.8.3 +112.174.236.154 8.8.8.3 +112.174.234.146 8.8.8.3 +112.174.237.154 8.8.8.3 +112.174.234.142 8.8.8.3 +112.174.235.126 8.8.8.3 +112.174.235.146 8.8.8.3 +112.174.236.2 8.8.8.3 +112.174.237.150 8.8.8.3 +112.174.236.142 8.8.8.3 +112.174.237.2 8.8.8.3 +112.174.235.26 8.8.8.3 +112.174.236.146 8.8.8.3 +112.174.236.218 8.8.8.3 +112.174.237.146 8.8.8.3 +112.174.234.154 8.8.8.3 +112.174.236.26 8.8.8.3 +112.174.235.2 8.8.8.3 +112.174.235.218 8.8.8.3 +112.174.237.126 8.8.8.3 +112.174.235.154 8.8.8.3 +112.174.236.126 8.8.8.3 +112.174.234.218 8.8.8.3 +112.174.234.2 8.8.8.3 +112.174.237.26 8.8.8.3 +112.174.237.142 8.8.8.3 +112.174.237.218 8.8.8.3 +112.174.234.150 8.8.8.3 +112.174.234.126 8.8.8.3 +112.174.235.142 8.8.8.3 +112.174.235.150 8.8.8.3 +8.8.8.3 112.174.238.74 +112.174.238.74 121.144.23.42 +121.144.23.42 127.1.1.6 diff --git a/tests/fakenet/data/large_networks/ple2.planet-lab.eu_125.155.82.17_2018-02-09 10_22_59.068401+01_00 b/tests/fakenet/data/large_networks/ple2.planet-lab.eu_125.155.82.17_2018-02-09 10_22_59.068401+01_00 new file mode 100644 index 0000000..249ac72 --- /dev/null +++ b/tests/fakenet/data/large_networks/ple2.planet-lab.eu_125.155.82.17_2018-02-09 10_22_59.068401+01_00 @@ -0,0 +1,448 @@ +127.0.0.1 192.168.1.1 +192.168.1.1 132.227.123.1 +132.227.123.1 134.157.167.125 +134.157.167.125 134.157.254.124 +134.157.254.124 195.221.127.181 +195.221.127.181 193.51.181.102 +193.51.181.102 193.51.177.117 +193.51.177.117 83.97.89.9 +83.97.89.9 62.40.98.76 +62.40.98.76 62.40.98.78 +62.40.98.78 72.51.51.51 +72.51.51.51 72.52.92.166 +72.52.92.166 184.105.80.10 +184.105.80.10 184.105.64.102 +184.105.64.102 184.105.222.98 +184.105.222.98 184.105.64.113 +184.105.64.113 184.105.64.109 +184.105.64.109 72.52.108.226 +72.52.108.226 112.174.87.121 +72.52.108.226 112.174.88.173 +72.52.108.226 112.174.80.137 +72.52.108.226 112.174.87.81 +72.52.108.226 112.174.87.73 +72.52.108.226 112.174.88.249 +72.52.108.226 112.174.87.125 +72.52.108.226 112.174.87.65 +112.174.87.121 112.174.84.73 +112.174.87.121 112.174.84.201 +112.174.87.121 112.174.83.141 +112.174.87.121 112.174.84.1 +112.174.87.121 112.174.83.1 +112.174.87.121 112.174.83.13 +112.174.87.121 112.174.84.89 +112.174.87.121 112.174.83.93 +112.174.87.121 112.174.84.93 +112.174.87.121 112.174.83.149 +112.174.87.121 112.174.83.89 +112.174.87.121 112.174.84.141 +112.174.88.173 112.174.84.153 +112.174.88.173 112.174.83.165 +112.174.88.173 112.174.84.45 +112.174.88.173 112.174.83.25 +112.174.88.173 112.174.84.37 +112.174.88.173 112.174.84.113 +112.174.88.173 112.174.84.165 +112.174.88.173 112.174.83.117 +112.174.88.173 112.174.83.205 +112.174.88.173 112.174.83.113 +112.174.88.173 112.174.83.77 +112.174.88.173 112.174.84.117 +112.174.80.137 112.174.84.145 +112.174.80.137 112.174.83.101 +112.174.80.137 112.174.83.5 +112.174.80.137 112.174.84.97 +112.174.80.137 112.174.83.153 +112.174.80.137 112.174.84.5 +112.174.80.137 112.174.83.17 +112.174.80.137 112.174.83.97 +112.174.80.137 112.174.84.101 +112.174.80.137 112.174.83.145 +112.174.80.137 112.174.84.205 +112.174.80.137 112.174.84.77 +112.174.87.81 112.174.84.33 +112.174.87.81 112.174.83.73 +112.174.87.81 112.174.84.161 +112.174.87.81 112.174.83.105 +112.174.87.81 112.174.84.41 +112.174.87.81 112.174.83.201 +112.174.87.81 112.174.84.149 +112.174.87.81 112.174.84.105 +112.174.87.81 112.174.83.109 +112.174.87.81 112.174.84.109 +112.174.87.81 112.174.83.161 +112.174.87.81 112.174.83.21 +112.174.87.73 112.174.83.145 +112.174.87.73 112.174.83.97 +112.174.87.73 112.174.84.101 +112.174.87.73 112.174.83.17 +112.174.87.73 112.174.83.153 +112.174.87.73 112.174.83.101 +112.174.87.73 112.174.84.205 +112.174.87.73 112.174.84.145 +112.174.87.73 112.174.84.97 +112.174.87.73 112.174.84.77 +112.174.87.73 112.174.84.5 +112.174.87.73 112.174.83.5 +112.174.88.249 112.174.84.77 +112.174.88.249 112.174.84.205 +112.174.88.249 112.174.84.5 +112.174.88.249 112.174.83.5 +112.174.88.249 112.174.84.145 +112.174.88.249 112.174.83.145 +112.174.88.249 112.174.83.17 +112.174.88.249 112.174.83.153 +112.174.88.249 112.174.83.97 +112.174.88.249 112.174.84.97 +112.174.88.249 112.174.83.101 +112.174.88.249 112.174.84.101 +112.174.87.125 112.174.83.105 +112.174.87.125 112.174.83.73 +112.174.87.125 112.174.84.33 +112.174.87.125 112.174.83.21 +112.174.87.125 112.174.84.161 +112.174.87.125 112.174.84.149 +112.174.87.125 112.174.84.105 +112.174.87.125 112.174.84.109 +112.174.87.125 112.174.84.41 +112.174.87.125 112.174.83.201 +112.174.87.125 112.174.83.109 +112.174.87.125 112.174.83.161 +112.174.87.65 112.174.84.89 +112.174.87.65 112.174.84.201 +112.174.87.65 112.174.84.141 +112.174.87.65 112.174.84.1 +112.174.87.65 112.174.84.73 +112.174.87.65 112.174.83.149 +112.174.87.65 112.174.84.93 +112.174.87.65 112.174.83.13 +112.174.87.65 112.174.83.89 +112.174.87.65 112.174.83.93 +112.174.87.65 112.174.83.1 +112.174.87.65 112.174.83.141 +112.174.84.73 112.174.48.193 +112.174.84.73 112.174.48.233 +112.174.84.73 112.174.48.77 +112.174.84.73 112.174.48.37 +112.174.84.73 112.174.48.33 +112.174.84.73 112.174.48.73 +112.174.84.201 112.174.48.117 +112.174.84.201 112.174.48.237 +112.174.84.201 112.174.48.197 +112.174.84.201 112.174.48.113 +112.174.84.201 112.174.48.153 +112.174.84.201 112.174.48.157 +112.174.83.105 112.174.8.233 +112.174.83.105 112.174.8.193 +112.174.83.105 112.174.8.33 +112.174.83.105 112.174.8.73 +112.174.83.105 112.174.8.77 +112.174.83.105 112.174.8.37 +112.174.84.153 112.174.48.157 +112.174.84.153 112.174.48.197 +112.174.84.153 112.174.48.113 +112.174.84.153 112.174.48.117 +112.174.84.153 112.174.48.237 +112.174.84.153 112.174.48.153 +112.174.83.141 112.174.8.153 +112.174.83.141 112.174.8.117 +112.174.83.141 112.174.8.237 +112.174.83.141 112.174.8.197 +112.174.83.141 112.174.8.157 +112.174.83.141 112.174.8.113 +112.174.84.1 112.174.48.193 +112.174.84.1 112.174.48.37 +112.174.84.1 112.174.48.73 +112.174.84.1 112.174.48.77 +112.174.84.1 112.174.48.33 +112.174.84.1 112.174.48.233 +112.174.83.73 112.174.8.77 +112.174.83.73 112.174.8.37 +112.174.83.73 112.174.8.193 +112.174.83.73 112.174.8.233 +112.174.83.73 112.174.8.33 +112.174.83.73 112.174.8.73 +112.174.84.33 112.174.48.193 +112.174.84.33 112.174.48.233 +112.174.84.33 112.174.48.33 +112.174.84.33 112.174.48.37 +112.174.84.33 112.174.48.77 +112.174.84.33 112.174.48.73 +112.174.83.21 112.174.8.193 +112.174.83.21 112.174.8.73 +112.174.83.21 112.174.8.33 +112.174.83.21 112.174.8.37 +112.174.83.21 112.174.8.233 +112.174.83.21 112.174.8.77 +112.174.84.161 112.174.48.157 +112.174.84.161 112.174.48.237 +112.174.84.161 112.174.48.113 +112.174.84.161 112.174.48.153 +112.174.84.161 112.174.48.117 +112.174.84.161 112.174.48.197 +112.174.84.149 112.174.48.117 +112.174.84.149 112.174.48.237 +112.174.84.149 112.174.48.153 +112.174.84.149 112.174.48.197 +112.174.84.149 112.174.48.157 +112.174.84.149 112.174.48.113 +112.174.83.165 112.174.8.237 +112.174.83.165 112.174.8.157 +112.174.83.165 112.174.8.153 +112.174.83.165 112.174.8.197 +112.174.83.165 112.174.8.113 +112.174.83.165 112.174.8.117 +112.174.84.45 112.174.48.193 +112.174.84.45 112.174.48.33 +112.174.84.45 112.174.48.77 +112.174.84.45 112.174.48.37 +112.174.84.45 112.174.48.73 +112.174.84.45 112.174.48.233 +112.174.83.1 112.174.8.73 +112.174.83.1 112.174.8.193 +112.174.83.1 112.174.8.77 +112.174.83.1 112.174.8.33 +112.174.83.1 112.174.8.37 +112.174.83.1 112.174.8.233 +112.174.83.13 112.174.8.233 +112.174.83.13 112.174.8.193 +112.174.83.13 112.174.8.73 +112.174.83.13 112.174.8.77 +112.174.83.13 112.174.8.33 +112.174.83.13 112.174.8.37 +112.174.83.25 112.174.8.73 +112.174.83.25 112.174.8.233 +112.174.83.25 112.174.8.193 +112.174.83.25 112.174.8.77 +112.174.83.25 112.174.8.37 +112.174.83.25 112.174.8.33 +112.174.84.37 112.174.48.33 +112.174.84.37 112.174.48.193 +112.174.84.37 112.174.48.37 +112.174.84.37 112.174.48.233 +112.174.84.37 112.174.48.77 +112.174.84.37 112.174.48.73 +112.174.84.145 112.174.48.237 +112.174.84.145 112.174.48.117 +112.174.84.145 112.174.48.113 +112.174.84.145 112.174.48.197 +112.174.84.145 112.174.48.153 +112.174.84.145 112.174.48.157 +112.174.84.89 112.174.48.33 +112.174.84.89 112.174.48.37 +112.174.84.89 112.174.48.233 +112.174.84.89 112.174.48.193 +112.174.84.89 112.174.48.77 +112.174.84.89 112.174.48.73 +112.174.84.113 112.174.48.193 +112.174.84.113 112.174.48.33 +112.174.84.113 112.174.48.73 +112.174.84.113 112.174.48.233 +112.174.84.113 112.174.48.77 +112.174.84.113 112.174.48.37 +112.174.84.141 112.174.48.237 +112.174.84.141 112.174.48.197 +112.174.84.141 112.174.48.113 +112.174.84.141 112.174.48.153 +112.174.84.141 112.174.48.117 +112.174.84.141 112.174.48.157 +112.174.83.145 112.174.8.153 +112.174.83.145 112.174.8.117 +112.174.83.145 112.174.8.237 +112.174.83.145 112.174.8.157 +112.174.83.145 112.174.8.113 +112.174.83.101 112.174.8.157 +112.174.83.101 112.174.8.153 +112.174.83.101 112.174.8.197 +112.174.83.101 112.174.8.117 +112.174.83.101 112.174.8.237 +112.174.83.101 112.174.8.113 +112.174.83.5 112.174.8.73 +112.174.83.5 112.174.8.233 +112.174.83.5 112.174.8.33 +112.174.83.5 112.174.8.193 +112.174.83.5 112.174.8.37 +112.174.83.5 112.174.8.77 +112.174.83.97 112.174.8.193 +112.174.83.97 112.174.8.73 +112.174.83.97 112.174.8.233 +112.174.83.97 112.174.8.77 +112.174.83.97 112.174.8.37 +112.174.83.97 112.174.8.33 +112.174.84.97 112.174.48.193 +112.174.84.97 112.174.48.33 +112.174.84.97 112.174.48.77 +112.174.84.97 112.174.48.233 +112.174.84.97 112.174.48.73 +112.174.84.97 112.174.48.37 +112.174.84.101 112.174.48.157 +112.174.84.101 112.174.48.237 +112.174.84.101 112.174.48.153 +112.174.84.101 112.174.48.197 +112.174.84.101 112.174.48.113 +112.174.84.101 112.174.48.117 +112.174.83.17 112.174.8.73 +112.174.83.17 112.174.8.233 +112.174.83.17 112.174.8.77 +112.174.83.17 112.174.8.37 +112.174.83.17 112.174.8.193 +112.174.83.17 112.174.8.33 +112.174.83.153 112.174.8.157 +112.174.83.153 112.174.8.237 +112.174.83.153 112.174.8.153 +112.174.83.153 112.174.8.197 +112.174.83.153 112.174.8.117 +112.174.83.153 112.174.8.113 +112.174.84.41 112.174.48.193 +112.174.84.41 112.174.48.73 +112.174.84.41 112.174.48.233 +112.174.84.41 112.174.48.33 +112.174.84.41 112.174.48.37 +112.174.84.41 112.174.48.77 +112.174.84.77 112.174.48.33 +112.174.84.77 112.174.48.77 +112.174.84.77 112.174.48.37 +112.174.84.77 112.174.48.233 +112.174.84.77 112.174.48.73 +112.174.84.77 112.174.48.193 +112.174.84.205 112.174.48.197 +112.174.84.205 112.174.48.237 +112.174.84.205 112.174.48.157 +112.174.84.205 112.174.48.117 +112.174.84.205 112.174.48.153 +112.174.84.5 112.174.48.193 +112.174.84.5 112.174.48.33 +112.174.84.5 112.174.48.77 +112.174.84.5 112.174.48.233 +112.174.84.5 112.174.48.37 +112.174.84.5 112.174.48.73 +112.174.83.93 112.174.8.153 +112.174.83.93 112.174.8.113 +112.174.83.93 112.174.8.157 +112.174.83.93 112.174.8.117 +112.174.83.93 112.174.8.237 +112.174.83.93 112.174.8.197 +112.174.84.105 112.174.48.193 +112.174.84.105 112.174.48.33 +112.174.84.105 112.174.48.37 +112.174.84.105 112.174.48.233 +112.174.84.105 112.174.48.77 +112.174.84.105 112.174.48.73 +112.174.84.93 112.174.48.157 +112.174.84.93 112.174.48.117 +112.174.84.93 112.174.48.237 +112.174.84.93 112.174.48.113 +112.174.84.93 112.174.48.153 +112.174.84.93 112.174.48.197 +112.174.84.109 112.174.48.237 +112.174.84.109 112.174.48.153 +112.174.84.109 112.174.48.197 +112.174.84.109 112.174.48.157 +112.174.84.109 112.174.48.113 +112.174.84.109 112.174.48.117 +112.174.84.165 112.174.48.117 +112.174.84.165 112.174.48.237 +112.174.84.165 112.174.48.197 +112.174.84.165 112.174.48.113 +112.174.84.165 112.174.48.153 +112.174.84.165 112.174.48.157 +112.174.83.117 112.174.8.237 +112.174.83.117 112.174.8.113 +112.174.83.117 112.174.8.197 +112.174.83.117 112.174.8.117 +112.174.83.117 112.174.8.157 +112.174.83.117 112.174.8.153 +112.174.83.201 112.174.8.157 +112.174.83.201 112.174.8.153 +112.174.83.201 112.174.8.113 +112.174.83.201 112.174.8.117 +112.174.83.201 112.174.8.237 +112.174.83.201 112.174.8.197 +112.174.83.109 112.174.8.157 +112.174.83.109 112.174.8.117 +112.174.83.109 112.174.8.237 +112.174.83.109 112.174.8.153 +112.174.83.109 112.174.8.197 +112.174.83.109 112.174.8.113 +112.174.83.205 112.174.8.237 +112.174.83.205 112.174.8.157 +112.174.83.205 112.174.8.153 +112.174.83.205 112.174.8.197 +112.174.83.205 112.174.8.113 +112.174.83.205 112.174.8.117 +112.174.83.149 112.174.8.157 +112.174.83.149 112.174.8.113 +112.174.83.149 112.174.8.153 +112.174.83.149 112.174.8.237 +112.174.83.149 112.174.8.197 +112.174.83.149 112.174.8.117 +112.174.83.113 112.174.8.193 +112.174.83.113 112.174.8.73 +112.174.83.113 112.174.8.233 +112.174.83.113 112.174.8.37 +112.174.83.113 112.174.8.77 +112.174.83.113 112.174.8.33 +112.174.83.161 112.174.8.153 +112.174.83.161 112.174.8.237 +112.174.83.161 112.174.8.157 +112.174.83.161 112.174.8.117 +112.174.83.161 112.174.8.197 +112.174.83.161 112.174.8.113 +112.174.83.89 112.174.8.233 +112.174.83.89 112.174.8.77 +112.174.83.89 112.174.8.33 +112.174.83.89 112.174.8.37 +112.174.83.89 112.174.8.193 +112.174.83.89 112.174.8.73 +112.174.83.77 112.174.8.73 +112.174.83.77 112.174.8.233 +112.174.83.77 112.174.8.33 +112.174.83.77 112.174.8.37 +112.174.83.77 112.174.8.77 +112.174.83.77 112.174.8.193 +112.174.84.117 112.174.48.237 +112.174.84.117 112.174.48.197 +112.174.84.117 112.174.48.113 +112.174.84.117 112.174.48.117 +112.174.84.117 112.174.48.157 +112.174.84.117 112.174.48.153 +112.174.48.33 112.174.66.146 +112.174.8.193 112.174.26.146 +112.174.8.73 112.174.26.150 +112.174.48.157 112.174.66.198 +112.174.48.193 112.174.66.146 +112.174.8.233 112.174.26.150 +112.174.48.117 112.174.66.146 +112.174.48.37 112.174.66.146 +112.174.8.237 112.174.26.150 +112.174.48.237 112.174.66.198 +112.174.8.157 112.174.26.150 +112.174.8.77 112.174.26.150 +112.174.8.153 112.174.26.150 +112.174.8.197 112.174.26.146 +112.174.48.77 112.174.66.198 +112.174.48.73 112.174.66.198 +112.174.48.233 112.174.66.198 +112.174.48.197 112.174.66.146 +112.174.8.113 112.174.26.146 +112.174.48.113 112.174.66.146 +112.174.8.117 112.174.26.146 +112.174.8.37 112.174.26.146 +112.174.8.33 112.174.26.146 +112.174.48.153 112.174.66.198 +112.174.26.146 125.144.30.194 +112.174.26.146 125.144.17.142 +112.174.26.150 125.144.30.194 +112.174.26.150 125.144.17.142 +112.174.66.146 125.144.17.142 +112.174.66.146 125.144.30.194 +112.174.66.198 125.144.17.142 +112.174.66.198 125.144.30.194 +125.144.30.194 14.59.46.14 +125.144.30.194 14.59.46.10 +125.144.17.142 14.59.47.10 +125.144.17.142 14.59.47.14 +14.59.47.10 127.1.1.6 +14.59.47.14 127.1.1.6 +14.59.46.14 127.1.1.6 +14.59.46.10 127.1.1.6 diff --git a/tests/fakenet/data/large_networks/ple42.planet-lab.eu_2.17.140.1_2018-01-25 13_32_03.308419+01_00 b/tests/fakenet/data/large_networks/ple42.planet-lab.eu_2.17.140.1_2018-01-25 13_32_03.308419+01_00 new file mode 100644 index 0000000..93fdfca --- /dev/null +++ b/tests/fakenet/data/large_networks/ple42.planet-lab.eu_2.17.140.1_2018-01-25 13_32_03.308419+01_00 @@ -0,0 +1,132 @@ +127.0.0.1 192.168.1.1 +192.168.1.1 132.227.123.1 +132.227.123.1 134.157.167.125 +134.157.167.125 134.157.254.124 +134.157.254.124 195.221.127.181 +195.221.127.181 193.51.181.102 +193.51.181.102 193.51.177.114 +193.51.177.114 77.67.123.209 +77.67.123.209 89.149.181.145 +77.67.123.209 141.136.108.109 +77.67.123.209 141.136.111.117 +77.67.123.209 89.149.181.141 +77.67.123.209 213.200.82.181 +77.67.123.209 141.136.108.113 +77.67.123.209 141.136.108.105 +77.67.123.209 213.200.82.217 +89.149.181.145 213.248.81.29 +141.136.108.109 213.248.81.29 +141.136.111.117 213.248.81.29 +89.149.181.141 213.248.81.29 +213.200.82.181 213.248.81.29 +141.136.108.113 213.248.81.29 +141.136.108.105 213.248.81.29 +213.200.82.217 213.248.81.29 +213.248.81.29 62.115.122.10 +213.248.81.29 62.115.122.4 +62.115.122.10 62.115.122.139 +62.115.122.4 62.115.123.12 +62.115.122.139 62.115.112.95 +62.115.122.139 62.115.139.113 +62.115.122.139 213.155.135.51 +62.115.122.139 213.155.132.233 +62.115.122.139 62.115.112.91 +62.115.122.139 62.115.143.135 +62.115.122.139 213.155.135.47 +62.115.122.139 62.115.139.111 +62.115.122.139 213.155.131.51 +62.115.122.139 62.115.143.129 +62.115.122.139 80.91.251.144 +62.115.122.139 80.91.248.54 +62.115.122.139 62.115.112.89 +62.115.122.139 62.115.143.133 +62.115.122.139 213.155.132.229 +62.115.122.139 213.155.132.148 +62.115.122.139 62.115.139.109 +62.115.122.139 213.155.130.49 +62.115.122.139 213.155.132.146 +62.115.122.139 62.115.112.93 +62.115.122.139 62.115.139.115 +62.115.122.139 62.115.143.131 +62.115.122.139 213.155.132.231 +62.115.122.139 80.239.147.173 +62.115.122.139 213.155.133.113 +62.115.122.139 80.91.246.211 +62.115.123.12 62.115.112.101 +62.115.123.12 62.115.112.103 +62.115.123.12 62.115.139.101 +62.115.123.12 62.115.112.99 +62.115.123.12 62.115.143.110 +62.115.123.12 213.155.132.152 +62.115.123.12 62.115.139.105 +62.115.123.12 213.155.135.31 +62.115.123.12 80.91.246.213 +62.115.123.12 80.91.251.159 +62.115.123.12 62.115.143.108 +62.115.123.12 80.91.251.153 +62.115.123.12 62.115.112.97 +62.115.123.12 213.155.131.49 +62.115.123.12 62.115.139.103 +62.115.123.12 62.115.139.99 +62.115.123.12 80.91.251.155 +62.115.123.12 80.239.147.177 +62.115.123.12 213.155.132.150 +62.115.123.12 62.115.143.104 +62.115.123.12 213.155.133.117 +62.115.123.12 213.155.134.113 +62.115.123.12 62.115.143.106 +62.115.123.12 80.91.248.58 +62.115.123.12 80.91.251.146 +62.115.123.12 80.91.251.157 +62.115.112.101 127.1.1.6 +62.115.112.103 127.1.1.6 +62.115.139.101 127.1.1.6 +62.115.112.99 127.1.1.6 +62.115.143.110 127.1.1.6 +213.155.132.152 127.1.1.6 +62.115.139.105 127.1.1.6 +213.155.135.31 127.1.1.6 +62.115.112.95 127.1.1.6 +62.115.139.113 127.1.1.6 +213.155.135.51 127.1.1.6 +213.155.132.233 127.1.1.6 +62.115.112.91 127.1.1.6 +62.115.143.135 127.1.1.6 +213.155.135.47 127.1.1.6 +62.115.139.111 127.1.1.6 +80.91.246.213 127.1.1.6 +213.155.131.51 127.1.1.6 +62.115.143.129 127.1.1.6 +80.91.251.144 127.1.1.6 +80.91.251.159 127.1.1.6 +80.91.248.54 127.1.1.6 +62.115.143.108 127.1.1.6 +80.91.251.153 127.1.1.6 +62.115.112.97 127.1.1.6 +62.115.112.89 127.1.1.6 +62.115.143.133 127.1.1.6 +213.155.131.49 127.1.1.6 +62.115.139.103 127.1.1.6 +213.155.132.229 127.1.1.6 +213.155.132.148 127.1.1.6 +62.115.139.99 127.1.1.6 +80.91.251.155 127.1.1.6 +80.239.147.177 127.1.1.6 +62.115.139.109 127.1.1.6 +213.155.130.49 127.1.1.6 +213.155.132.146 127.1.1.6 +213.155.132.150 127.1.1.6 +62.115.112.93 127.1.1.6 +62.115.139.115 127.1.1.6 +62.115.143.131 127.1.1.6 +62.115.143.104 127.1.1.6 +213.155.133.117 127.1.1.6 +213.155.132.231 127.1.1.6 +213.155.134.113 127.1.1.6 +62.115.143.106 127.1.1.6 +80.239.147.173 127.1.1.6 +80.91.248.58 127.1.1.6 +80.91.251.146 127.1.1.6 +213.155.133.113 127.1.1.6 +80.91.246.211 127.1.1.6 +80.91.251.157 127.1.1.6 diff --git a/tests/fakenet/data/large_networks/ple42.planet-lab.eu_31.13.64.6_2018-02-22 15_47_18.906690+01_00 b/tests/fakenet/data/large_networks/ple42.planet-lab.eu_31.13.64.6_2018-02-22 15_47_18.906690+01_00 new file mode 100644 index 0000000..bb08c67 --- /dev/null +++ b/tests/fakenet/data/large_networks/ple42.planet-lab.eu_31.13.64.6_2018-02-22 15_47_18.906690+01_00 @@ -0,0 +1,766 @@ +127.0.0.1 192.168.1.1 +192.168.1.1 132.227.123.1 +132.227.123.1 134.157.167.125 +134.157.167.125 134.157.254.124 +134.157.254.124 195.221.127.181 +195.221.127.181 193.51.181.102 +193.51.181.102 193.51.177.117 +193.51.177.117 83.97.89.9 +83.97.89.9 62.40.98.76 +62.40.98.76 62.40.98.78 +62.40.98.78 62.40.98.81 +62.40.98.81 1.1.1.1 +1.1.1.1 31.13.31.38 +1.1.1.1 157.240.35.54 +1.1.1.1 31.13.31.36 +1.1.1.1 157.240.35.60 +31.13.31.38 157.240.35.159 +31.13.31.38 157.240.35.155 +31.13.31.38 157.240.35.151 +31.13.31.38 157.240.35.161 +31.13.31.38 157.240.35.149 +31.13.31.38 157.240.35.157 +31.13.31.38 157.240.35.153 +31.13.31.38 157.240.35.147 +157.240.35.54 157.240.35.169 +157.240.35.54 157.240.35.177 +157.240.35.54 157.240.35.167 +157.240.35.54 157.240.35.175 +157.240.35.54 157.240.35.165 +157.240.35.54 157.240.35.163 +157.240.35.54 157.240.35.173 +157.240.35.54 157.240.35.171 +31.13.31.36 157.240.32.15 +31.13.31.36 74.119.78.13 +31.13.31.36 31.13.29.131 +31.13.31.36 157.240.32.17 +31.13.31.36 157.240.32.13 +31.13.31.36 157.240.32.19 +31.13.31.36 74.119.78.7 +31.13.31.36 31.13.29.247 +157.240.35.60 157.240.35.179 +157.240.35.60 157.240.35.181 +157.240.35.60 157.240.35.189 +157.240.35.60 157.240.35.193 +157.240.35.60 157.240.35.183 +157.240.35.60 157.240.35.187 +157.240.35.60 157.240.35.185 +157.240.35.60 157.240.35.191 +157.240.35.159 173.252.67.129 +157.240.35.159 173.252.67.139 +157.240.35.159 173.252.67.123 +157.240.35.159 173.252.67.105 +157.240.35.159 173.252.67.115 +157.240.35.159 173.252.67.107 +157.240.35.159 173.252.67.119 +157.240.35.159 173.252.67.131 +157.240.35.159 173.252.67.111 +157.240.35.159 173.252.67.109 +157.240.35.159 173.252.67.121 +157.240.35.159 173.252.67.137 +157.240.35.159 173.252.67.117 +157.240.35.159 173.252.67.135 +157.240.35.159 173.252.67.125 +157.240.35.159 173.252.67.133 +157.240.35.159 173.252.67.127 +157.240.35.159 173.252.67.113 +157.240.35.155 173.252.67.33 +157.240.35.155 173.252.67.15 +157.240.35.155 173.252.67.1 +157.240.35.155 173.252.67.35 +157.240.35.155 173.252.67.31 +157.240.35.155 173.252.67.29 +157.240.35.155 173.252.67.19 +157.240.35.155 173.252.67.21 +157.240.35.155 173.252.67.25 +157.240.35.155 173.252.67.11 +157.240.35.155 173.252.67.23 +157.240.35.155 173.252.67.9 +157.240.35.155 173.252.67.7 +157.240.35.155 173.252.67.27 +157.240.35.155 173.252.67.5 +157.240.35.155 173.252.67.3 +157.240.35.155 173.252.67.17 +157.240.35.151 173.252.67.109 +157.240.35.151 173.252.67.137 +157.240.35.151 173.252.67.117 +157.240.35.151 173.252.67.115 +157.240.35.151 173.252.67.113 +157.240.35.151 173.252.67.127 +157.240.35.151 173.252.67.135 +157.240.35.151 173.252.67.121 +157.240.35.151 173.252.67.133 +157.240.35.151 173.252.67.119 +157.240.35.151 173.252.67.125 +157.240.35.151 173.252.67.123 +157.240.35.151 173.252.67.139 +157.240.35.151 173.252.67.107 +157.240.35.151 173.252.67.129 +157.240.35.151 173.252.67.105 +157.240.35.151 173.252.67.131 +157.240.35.151 173.252.67.111 +157.240.35.161 173.252.67.177 +157.240.35.161 173.252.67.175 +157.240.35.161 173.252.67.183 +157.240.35.161 173.252.67.157 +157.240.35.161 173.252.67.191 +157.240.35.161 173.252.67.165 +157.240.35.161 173.252.67.187 +157.240.35.161 173.252.67.161 +157.240.35.161 173.252.67.159 +157.240.35.161 173.252.67.189 +157.240.35.161 173.252.67.185 +157.240.35.161 173.252.67.163 +157.240.35.161 173.252.67.181 +157.240.35.161 173.252.67.167 +157.240.35.161 173.252.67.169 +157.240.35.161 173.252.67.171 +157.240.35.161 173.252.67.179 +157.240.35.161 173.252.67.173 +157.240.35.149 173.252.67.61 +157.240.35.149 173.252.67.81 +157.240.35.149 173.252.67.59 +157.240.35.149 173.252.67.57 +157.240.35.149 173.252.67.79 +157.240.35.149 173.252.67.69 +157.240.35.149 173.252.67.73 +157.240.35.149 173.252.67.85 +157.240.35.149 173.252.67.83 +157.240.35.149 173.252.67.71 +157.240.35.149 173.252.67.77 +157.240.35.149 173.252.67.65 +157.240.35.149 173.252.67.55 +157.240.35.149 173.252.67.63 +157.240.35.149 173.252.67.53 +157.240.35.149 173.252.67.67 +157.240.35.149 173.252.67.75 +157.240.35.149 173.252.67.87 +157.240.35.169 173.252.67.175 +157.240.35.169 173.252.67.161 +157.240.35.169 173.252.67.157 +157.240.35.169 173.252.67.169 +157.240.35.169 173.252.67.185 +157.240.35.169 173.252.67.165 +157.240.35.169 173.252.67.173 +157.240.35.169 173.252.67.181 +157.240.35.169 173.252.67.159 +157.240.35.169 173.252.67.191 +157.240.35.169 173.252.67.163 +157.240.35.169 173.252.67.167 +157.240.35.169 173.252.67.179 +157.240.35.169 173.252.67.183 +157.240.35.169 173.252.67.171 +157.240.35.169 173.252.67.187 +157.240.35.169 173.252.67.189 +157.240.35.169 173.252.67.177 +157.240.35.177 173.252.67.159 +157.240.35.177 173.252.67.175 +157.240.35.177 173.252.67.191 +157.240.35.177 173.252.67.163 +157.240.35.177 173.252.67.157 +157.240.35.177 173.252.67.165 +157.240.35.177 173.252.67.187 +157.240.35.177 173.252.67.183 +157.240.35.177 173.252.67.173 +157.240.35.177 173.252.67.177 +157.240.35.177 173.252.67.171 +157.240.35.177 173.252.67.185 +157.240.35.177 173.252.67.167 +157.240.35.177 173.252.67.169 +157.240.35.177 173.252.67.179 +157.240.35.177 173.252.67.161 +157.240.35.177 173.252.67.181 +157.240.35.167 173.252.67.117 +157.240.35.167 173.252.67.125 +157.240.35.167 173.252.67.123 +157.240.35.167 173.252.67.121 +157.240.35.167 173.252.67.105 +157.240.35.167 173.252.67.109 +157.240.35.167 173.252.67.131 +157.240.35.167 173.252.67.113 +157.240.35.167 173.252.67.107 +157.240.35.167 173.252.67.111 +157.240.35.167 173.252.67.133 +157.240.35.167 173.252.67.119 +157.240.35.167 173.252.67.115 +157.240.35.167 173.252.67.137 +157.240.35.167 173.252.67.135 +157.240.35.167 173.252.67.139 +157.240.35.167 173.252.67.127 +157.240.35.167 173.252.67.129 +157.240.35.175 173.252.67.109 +157.240.35.175 173.252.67.111 +157.240.35.175 173.252.67.115 +157.240.35.175 173.252.67.129 +157.240.35.175 173.252.67.133 +157.240.35.175 173.252.67.139 +157.240.35.175 173.252.67.121 +157.240.35.175 173.252.67.123 +157.240.35.175 173.252.67.127 +157.240.35.175 173.252.67.105 +157.240.35.175 173.252.67.125 +157.240.35.175 173.252.67.117 +157.240.35.175 173.252.67.107 +157.240.35.175 173.252.67.113 +157.240.35.175 173.252.67.119 +157.240.35.175 173.252.67.131 +157.240.35.175 173.252.67.137 +157.240.35.175 173.252.67.135 +157.240.32.15 173.252.67.135 +157.240.32.15 173.252.67.119 +157.240.32.15 173.252.67.9 +157.240.32.15 173.252.67.115 +157.240.32.15 173.252.67.133 +157.240.32.15 173.252.67.17 +157.240.32.15 173.252.67.125 +157.240.32.15 173.252.67.85 +157.240.32.15 173.252.67.55 +157.240.32.15 173.252.67.65 +157.240.32.15 173.252.67.59 +157.240.32.15 173.252.67.77 +157.240.32.15 173.252.67.113 +157.240.32.15 173.252.67.21 +157.240.32.15 173.252.67.109 +157.240.32.15 173.252.67.87 +157.240.32.15 173.252.67.131 +157.240.32.15 173.252.67.29 +157.240.32.15 173.252.67.73 +157.240.32.15 173.252.67.81 +157.240.32.15 173.252.67.83 +157.240.32.15 173.252.67.105 +157.240.32.15 173.252.67.7 +157.240.32.15 173.252.67.107 +157.240.32.15 173.252.67.69 +157.240.32.15 173.252.67.71 +157.240.32.15 173.252.67.53 +157.240.32.15 173.252.67.3 +157.240.32.15 173.252.67.127 +157.240.32.15 173.252.67.19 +157.240.32.15 173.252.67.25 +157.240.32.15 173.252.67.27 +157.240.32.15 173.252.67.123 +157.240.32.15 173.252.67.129 +157.240.32.15 173.252.67.15 +157.240.32.15 173.252.67.1 +157.240.32.15 173.252.67.23 +157.240.32.15 173.252.67.117 +157.240.32.15 173.252.67.5 +157.240.32.15 173.252.67.61 +157.240.32.15 173.252.67.111 +157.240.32.15 173.252.67.63 +157.240.32.15 173.252.67.139 +157.240.32.15 173.252.67.11 +157.240.32.15 173.252.67.137 +157.240.32.15 173.252.67.121 +157.240.32.15 173.252.67.31 +157.240.32.15 173.252.67.79 +157.240.32.15 173.252.67.57 +157.240.32.15 173.252.67.75 +157.240.32.15 173.252.67.67 +157.240.32.15 173.252.67.35 +157.240.32.15 173.252.67.33 +157.240.35.165 173.252.67.61 +157.240.35.165 173.252.67.59 +157.240.35.165 173.252.67.55 +157.240.35.165 173.252.67.75 +157.240.35.165 173.252.67.53 +157.240.35.165 173.252.67.79 +157.240.35.165 173.252.67.69 +157.240.35.165 173.252.67.71 +157.240.35.165 173.252.67.87 +157.240.35.165 173.252.67.77 +157.240.35.165 173.252.67.83 +157.240.35.165 173.252.67.57 +157.240.35.165 173.252.67.85 +74.119.78.13 173.252.67.71 +74.119.78.13 173.252.67.175 +74.119.78.13 173.252.67.169 +74.119.78.13 173.252.67.57 +74.119.78.13 173.252.67.183 +74.119.78.13 173.252.67.181 +74.119.78.13 173.252.67.179 +74.119.78.13 173.252.67.161 +74.119.78.13 173.252.67.177 +74.119.78.13 173.252.67.157 +74.119.78.13 173.252.67.185 +74.119.78.13 173.252.67.63 +74.119.78.13 173.252.67.167 +74.119.78.13 173.252.67.171 +74.119.78.13 173.252.67.173 +74.119.78.13 173.252.67.189 +31.13.29.131 173.252.67.157 +31.13.29.131 173.252.67.83 +31.13.29.131 173.252.67.187 +31.13.29.131 173.252.67.87 +31.13.29.131 173.252.67.33 +31.13.29.131 173.252.67.67 +31.13.29.131 173.252.67.163 +31.13.29.131 173.252.67.69 +31.13.29.131 173.252.67.23 +31.13.29.131 173.252.67.65 +31.13.29.131 173.252.67.25 +31.13.29.131 173.252.67.35 +31.13.29.131 173.252.67.7 +157.240.32.17 173.252.67.79 +157.240.32.17 173.252.67.75 +157.240.32.17 173.252.67.55 +157.240.32.17 173.252.67.107 +157.240.32.17 173.252.67.125 +157.240.32.17 173.252.67.111 +157.240.32.17 173.252.67.73 +157.240.32.17 173.252.67.119 +157.240.32.17 173.252.67.133 +157.240.32.17 173.252.67.61 +157.240.32.17 173.252.67.129 +157.240.32.17 173.252.67.105 +157.240.32.17 173.252.67.127 +157.240.32.17 173.252.67.113 +157.240.32.17 173.252.67.117 +157.240.32.17 173.252.67.115 +157.240.32.17 173.252.67.121 +157.240.32.17 173.252.67.139 +157.240.32.17 173.252.67.137 +157.240.32.17 173.252.67.131 +157.240.32.17 173.252.67.123 +157.240.32.17 173.252.67.109 +157.240.32.17 173.252.67.135 +157.240.32.13 173.252.67.67 +157.240.32.13 173.252.67.105 +157.240.32.13 173.252.67.139 +157.240.32.13 173.252.67.83 +157.240.32.13 173.252.67.111 +157.240.32.13 173.252.67.109 +157.240.32.13 173.252.67.31 +157.240.32.13 173.252.67.69 +157.240.32.13 173.252.67.127 +157.240.32.13 173.252.67.11 +157.240.32.13 173.252.67.119 +157.240.32.13 173.252.67.7 +157.240.32.13 173.252.67.133 +157.240.32.13 173.252.67.21 +157.240.32.13 173.252.67.113 +157.240.32.13 173.252.67.121 +157.240.32.13 173.252.67.117 +157.240.32.13 173.252.67.137 +157.240.32.13 173.252.67.125 +157.240.32.13 173.252.67.135 +157.240.32.13 173.252.67.123 +157.240.32.13 173.252.67.23 +157.240.32.13 173.252.67.115 +157.240.32.13 173.252.67.107 +157.240.32.13 173.252.67.131 +157.240.32.13 173.252.67.129 +157.240.32.13 173.252.67.33 +157.240.35.179 173.252.67.31 +157.240.35.179 173.252.67.11 +157.240.35.179 173.252.67.27 +157.240.35.179 173.252.67.17 +157.240.35.179 173.252.67.9 +157.240.35.179 173.252.67.15 +157.240.35.179 173.252.67.35 +157.240.35.179 173.252.67.3 +157.240.35.179 173.252.67.21 +157.240.35.179 173.252.67.25 +157.240.35.179 173.252.67.19 +157.240.35.179 173.252.67.29 +157.240.35.179 173.252.67.1 +157.240.35.179 173.252.67.33 +157.240.35.179 173.252.67.5 +157.240.35.179 173.252.67.7 +157.240.35.179 173.252.67.23 +157.240.35.181 173.252.67.67 +157.240.35.181 173.252.67.65 +157.240.35.181 173.252.67.63 +157.240.35.181 173.252.67.85 +157.240.35.181 173.252.67.57 +157.240.35.181 173.252.67.73 +157.240.35.181 173.252.67.77 +157.240.35.181 173.252.67.69 +157.240.35.181 173.252.67.75 +157.240.35.181 173.252.67.81 +157.240.35.181 173.252.67.79 +157.240.35.181 173.252.67.87 +157.240.35.189 173.252.67.77 +157.240.35.189 173.252.67.65 +157.240.35.189 173.252.67.83 +157.240.35.189 173.252.67.73 +157.240.35.189 173.252.67.61 +157.240.35.189 173.252.67.55 +157.240.35.189 173.252.67.79 +157.240.35.189 173.252.67.53 +157.240.35.189 173.252.67.67 +157.240.35.189 173.252.67.87 +157.240.35.189 173.252.67.75 +157.240.35.189 173.252.67.81 +157.240.35.189 173.252.67.71 +157.240.35.189 173.252.67.59 +157.240.35.189 173.252.67.63 +157.240.35.189 173.252.67.69 +157.240.35.189 173.252.67.85 +157.240.35.189 173.252.67.57 +157.240.35.193 173.252.67.189 +157.240.35.193 173.252.67.157 +157.240.35.193 173.252.67.175 +157.240.35.193 173.252.67.187 +157.240.35.193 173.252.67.159 +157.240.35.193 173.252.67.191 +157.240.35.193 173.252.67.165 +157.240.35.193 173.252.67.161 +157.240.35.193 173.252.67.185 +157.240.35.193 173.252.67.177 +157.240.35.193 173.252.67.167 +157.240.35.193 173.252.67.169 +157.240.35.193 173.252.67.181 +157.240.35.193 173.252.67.171 +157.240.35.193 173.252.67.179 +157.240.32.19 173.252.67.21 +157.240.32.19 173.252.67.165 +157.240.32.19 173.252.67.17 +157.240.32.19 173.252.67.171 +157.240.32.19 173.252.67.163 +157.240.32.19 173.252.67.35 +157.240.32.19 173.252.67.181 +157.240.32.19 173.252.67.3 +157.240.32.19 173.252.67.187 +157.240.32.19 173.252.67.7 +157.240.32.19 173.252.67.1 +157.240.32.19 173.252.67.31 +157.240.32.19 173.252.67.175 +157.240.32.19 173.252.67.11 +157.240.32.19 173.252.67.19 +157.240.32.19 173.252.67.15 +157.240.32.19 173.252.67.191 +157.240.32.19 173.252.67.157 +157.240.32.19 173.252.67.173 +157.240.32.19 173.252.67.5 +157.240.32.19 173.252.67.27 +157.240.32.19 173.252.67.183 +157.240.32.19 173.252.67.9 +157.240.32.19 173.252.67.23 +157.240.32.19 173.252.67.29 +157.240.32.19 173.252.67.159 +157.240.32.19 173.252.67.189 +157.240.32.19 173.252.67.33 +157.240.32.19 173.252.67.161 +157.240.32.19 173.252.67.25 +157.240.35.157 173.252.67.65 +157.240.35.157 173.252.67.81 +157.240.35.157 173.252.67.71 +157.240.35.157 173.252.67.63 +157.240.35.157 173.252.67.73 +157.240.35.157 173.252.67.67 +157.240.35.157 173.252.67.85 +157.240.35.157 173.252.67.83 +157.240.35.157 173.252.67.79 +157.240.35.157 173.252.67.75 +157.240.35.157 173.252.67.55 +157.240.35.157 173.252.67.87 +157.240.35.157 173.252.67.69 +157.240.35.157 173.252.67.61 +157.240.35.157 173.252.67.59 +157.240.35.157 173.252.67.77 +157.240.35.157 173.252.67.53 +157.240.35.157 173.252.67.57 +74.119.78.7 173.252.67.109 +74.119.78.7 173.252.67.3 +74.119.78.7 173.252.67.25 +74.119.78.7 173.252.67.19 +74.119.78.7 173.252.67.123 +74.119.78.7 173.252.67.105 +74.119.78.7 173.252.67.111 +74.119.78.7 173.252.67.127 +74.119.78.7 173.252.67.117 +74.119.78.7 173.252.67.133 +74.119.78.7 173.252.67.11 +74.119.78.7 173.252.67.125 +74.119.78.7 173.252.67.27 +74.119.78.7 173.252.67.131 +74.119.78.7 173.252.67.137 +74.119.78.7 173.252.67.135 +74.119.78.7 173.252.67.5 +74.119.78.7 173.252.67.115 +74.119.78.7 173.252.67.35 +74.119.78.7 173.252.67.33 +74.119.78.7 173.252.67.129 +74.119.78.7 173.252.67.7 +74.119.78.7 173.252.67.121 +74.119.78.7 173.252.67.139 +74.119.78.7 173.252.67.9 +74.119.78.7 173.252.67.21 +74.119.78.7 173.252.67.31 +74.119.78.7 173.252.67.113 +74.119.78.7 173.252.67.1 +74.119.78.7 173.252.67.119 +74.119.78.7 173.252.67.107 +74.119.78.7 173.252.67.23 +74.119.78.7 173.252.67.29 +74.119.78.7 173.252.67.15 +157.240.35.153 173.252.67.165 +157.240.35.153 173.252.67.163 +157.240.35.153 173.252.67.191 +157.240.35.153 173.252.67.179 +157.240.35.153 173.252.67.187 +157.240.35.153 173.252.67.157 +157.240.35.153 173.252.67.159 +157.240.35.153 173.252.67.189 +157.240.35.153 173.252.67.173 +157.240.35.153 173.252.67.185 +157.240.35.153 173.252.67.177 +157.240.35.153 173.252.67.167 +157.240.35.153 173.252.67.171 +157.240.35.153 173.252.67.169 +157.240.35.153 173.252.67.181 +157.240.35.153 173.252.67.183 +157.240.35.153 173.252.67.175 +157.240.35.153 173.252.67.161 +157.240.35.163 173.252.67.31 +157.240.35.163 173.252.67.23 +157.240.35.163 173.252.67.21 +157.240.35.163 173.252.67.5 +157.240.35.163 173.252.67.27 +157.240.35.163 173.252.67.11 +157.240.35.163 173.252.67.15 +157.240.35.163 173.252.67.9 +157.240.35.163 173.252.67.19 +157.240.35.163 173.252.67.17 +157.240.35.163 173.252.67.1 +157.240.35.163 173.252.67.25 +157.240.35.163 173.252.67.7 +157.240.35.163 173.252.67.3 +157.240.35.163 173.252.67.29 +157.240.35.163 173.252.67.35 +157.240.35.163 173.252.67.33 +31.13.29.247 173.252.67.67 +31.13.29.247 173.252.67.173 +31.13.29.247 173.252.67.75 +31.13.29.247 173.252.67.11 +31.13.29.247 173.252.67.33 +31.13.29.247 173.252.67.57 +31.13.29.247 173.252.67.35 +31.13.29.247 173.252.67.23 +31.13.29.247 173.252.67.185 +31.13.29.247 173.252.67.25 +31.13.29.247 173.252.67.19 +31.13.29.247 173.252.67.21 +31.13.29.247 173.252.67.71 +31.13.29.247 173.252.67.59 +31.13.29.247 173.252.67.79 +31.13.29.247 173.252.67.157 +31.13.29.247 173.252.67.3 +31.13.29.247 173.252.67.63 +31.13.29.247 173.252.67.69 +31.13.29.247 173.252.67.61 +31.13.29.247 173.252.67.1 +31.13.29.247 173.252.67.17 +31.13.29.247 173.252.67.85 +31.13.29.247 173.252.67.81 +31.13.29.247 173.252.67.15 +31.13.29.247 173.252.67.5 +31.13.29.247 173.252.67.27 +31.13.29.247 173.252.67.87 +31.13.29.247 173.252.67.7 +31.13.29.247 173.252.67.29 +31.13.29.247 173.252.67.31 +31.13.29.247 173.252.67.83 +31.13.29.247 173.252.67.65 +31.13.29.247 173.252.67.53 +31.13.29.247 173.252.67.77 +31.13.29.247 173.252.67.73 +31.13.29.247 173.252.67.175 +31.13.29.247 173.252.67.183 +31.13.29.247 173.252.67.161 +31.13.29.247 173.252.67.9 +157.240.35.173 173.252.67.79 +157.240.35.173 173.252.67.69 +157.240.35.173 173.252.67.73 +157.240.35.173 173.252.67.59 +157.240.35.173 173.252.67.75 +157.240.35.173 173.252.67.81 +157.240.35.173 173.252.67.55 +157.240.35.173 173.252.67.57 +157.240.35.173 173.252.67.77 +157.240.35.173 173.252.67.61 +157.240.35.173 173.252.67.65 +157.240.35.173 173.252.67.83 +157.240.35.173 173.252.67.87 +157.240.35.173 173.252.67.53 +157.240.35.173 173.252.67.63 +157.240.35.173 173.252.67.85 +157.240.35.173 173.252.67.71 +157.240.35.173 173.252.67.67 +157.240.35.171 173.252.67.33 +157.240.35.171 173.252.67.35 +157.240.35.171 173.252.67.29 +157.240.35.171 173.252.67.7 +157.240.35.171 173.252.67.25 +157.240.35.171 173.252.67.11 +157.240.35.171 173.252.67.23 +157.240.35.171 173.252.67.31 +157.240.35.171 173.252.67.17 +157.240.35.171 173.252.67.3 +157.240.35.171 173.252.67.1 +157.240.35.171 173.252.67.9 +157.240.35.171 173.252.67.27 +157.240.35.171 173.252.67.5 +157.240.35.171 173.252.67.21 +157.240.35.171 173.252.67.15 +157.240.35.171 173.252.67.19 +157.240.35.183 173.252.67.109 +157.240.35.183 173.252.67.119 +157.240.35.183 173.252.67.135 +157.240.35.183 173.252.67.121 +157.240.35.183 173.252.67.111 +157.240.35.183 173.252.67.127 +157.240.35.183 173.252.67.139 +157.240.35.183 173.252.67.105 +157.240.35.183 173.252.67.129 +157.240.35.183 173.252.67.125 +157.240.35.183 173.252.67.137 +157.240.35.183 173.252.67.123 +157.240.35.183 173.252.67.115 +157.240.35.183 173.252.67.117 +157.240.35.183 173.252.67.113 +157.240.35.183 173.252.67.107 +157.240.35.183 173.252.67.133 +157.240.35.183 173.252.67.131 +157.240.35.147 173.252.67.29 +157.240.35.147 173.252.67.17 +157.240.35.147 173.252.67.3 +157.240.35.147 173.252.67.11 +157.240.35.147 173.252.67.27 +157.240.35.147 173.252.67.7 +157.240.35.147 173.252.67.25 +157.240.35.147 173.252.67.35 +157.240.35.147 173.252.67.9 +157.240.35.147 173.252.67.23 +157.240.35.147 173.252.67.1 +157.240.35.147 173.252.67.33 +157.240.35.147 173.252.67.21 +157.240.35.147 173.252.67.5 +157.240.35.147 173.252.67.19 +157.240.35.147 173.252.67.15 +157.240.35.147 173.252.67.31 +157.240.35.187 173.252.67.17 +157.240.35.187 173.252.67.1 +157.240.35.187 173.252.67.21 +157.240.35.187 173.252.67.33 +157.240.35.187 173.252.67.23 +157.240.35.187 173.252.67.25 +157.240.35.187 173.252.67.29 +157.240.35.187 173.252.67.5 +157.240.35.187 173.252.67.9 +157.240.35.187 173.252.67.19 +157.240.35.187 173.252.67.31 +157.240.35.187 173.252.67.15 +157.240.35.187 173.252.67.11 +157.240.35.187 173.252.67.3 +157.240.35.187 173.252.67.35 +157.240.35.187 173.252.67.27 +157.240.35.187 173.252.67.7 +157.240.35.185 173.252.67.185 +157.240.35.185 173.252.67.179 +157.240.35.185 173.252.67.191 +157.240.35.185 173.252.67.175 +157.240.35.185 173.252.67.161 +157.240.35.185 173.252.67.157 +157.240.35.185 173.252.67.165 +157.240.35.185 173.252.67.181 +157.240.35.185 173.252.67.167 +157.240.35.185 173.252.67.159 +157.240.35.185 173.252.67.173 +157.240.35.185 173.252.67.183 +157.240.35.185 173.252.67.187 +157.240.35.185 173.252.67.169 +157.240.35.185 173.252.67.177 +157.240.35.185 173.252.67.163 +157.240.35.185 173.252.67.171 +157.240.35.185 173.252.67.189 +157.240.35.191 173.252.67.121 +157.240.35.191 173.252.67.115 +157.240.35.191 173.252.67.117 +157.240.35.191 173.252.67.133 +157.240.35.191 173.252.67.113 +157.240.35.191 173.252.67.109 +157.240.35.191 173.252.67.125 +157.240.35.191 173.252.67.105 +157.240.35.191 173.252.67.107 +157.240.35.191 173.252.67.129 +157.240.35.191 173.252.67.123 +157.240.35.191 173.252.67.137 +157.240.35.191 173.252.67.139 +157.240.35.191 173.252.67.111 +157.240.35.191 173.252.67.127 +157.240.35.191 173.252.67.131 +157.240.35.191 173.252.67.119 +157.240.35.191 173.252.67.135 +173.252.67.135 127.1.1.6 +173.252.67.119 127.1.1.6 +173.252.67.9 127.1.1.6 +173.252.67.115 127.1.1.6 +173.252.67.133 127.1.1.6 +173.252.67.17 127.1.1.6 +173.252.67.71 127.1.1.6 +173.252.67.175 127.1.1.6 +173.252.67.169 127.1.1.6 +173.252.67.157 127.1.1.6 +173.252.67.83 127.1.1.6 +173.252.67.187 127.1.1.6 +173.252.67.87 127.1.1.6 +173.252.67.79 127.1.1.6 +173.252.67.75 127.1.1.6 +173.252.67.55 127.1.1.6 +173.252.67.107 127.1.1.6 +173.252.67.125 127.1.1.6 +173.252.67.111 127.1.1.6 +173.252.67.67 127.1.1.6 +173.252.67.105 127.1.1.6 +173.252.67.139 127.1.1.6 +173.252.67.109 127.1.1.6 +173.252.67.31 127.1.1.6 +173.252.67.21 127.1.1.6 +173.252.67.165 127.1.1.6 +173.252.67.171 127.1.1.6 +173.252.67.163 127.1.1.6 +173.252.67.35 127.1.1.6 +173.252.67.3 127.1.1.6 +173.252.67.25 127.1.1.6 +173.252.67.19 127.1.1.6 +173.252.67.123 127.1.1.6 +173.252.67.173 127.1.1.6 +173.252.67.129 127.1.1.6 +173.252.67.33 127.1.1.6 +173.252.67.15 127.1.1.6 +173.252.67.1 127.1.1.6 +173.252.67.137 127.1.1.6 +173.252.67.117 127.1.1.6 +173.252.67.177 127.1.1.6 +173.252.67.183 127.1.1.6 +173.252.67.191 127.1.1.6 +173.252.67.61 127.1.1.6 +173.252.67.81 127.1.1.6 +173.252.67.59 127.1.1.6 +173.252.67.57 127.1.1.6 +173.252.67.69 127.1.1.6 +173.252.67.73 127.1.1.6 +173.252.67.85 127.1.1.6 +173.252.67.65 127.1.1.6 +173.252.67.179 127.1.1.6 +173.252.67.159 127.1.1.6 +173.252.67.29 127.1.1.6 +173.252.67.63 127.1.1.6 +173.252.67.127 127.1.1.6 +173.252.67.181 127.1.1.6 +173.252.67.161 127.1.1.6 +173.252.67.185 127.1.1.6 +173.252.67.121 127.1.1.6 +173.252.67.53 127.1.1.6 +173.252.67.23 127.1.1.6 +173.252.67.5 127.1.1.6 +173.252.67.27 127.1.1.6 +173.252.67.11 127.1.1.6 +173.252.67.7 127.1.1.6 +173.252.67.189 127.1.1.6 +173.252.67.113 127.1.1.6 +173.252.67.77 127.1.1.6 +173.252.67.167 127.1.1.6 +173.252.67.131 127.1.1.6 diff --git a/tests/fakenet/data/pl2.prakinf.tu-ilmenau.de_83.167.65.184_2018-03-01 12_36_21.748576+01_00 b/tests/fakenet/data/pl2.prakinf.tu-ilmenau.de_83.167.65.184_2018-03-01 12_36_21.748576+01_00 new file mode 100644 index 0000000..aa58fa2 --- /dev/null +++ b/tests/fakenet/data/pl2.prakinf.tu-ilmenau.de_83.167.65.184_2018-03-01 12_36_21.748576+01_00 @@ -0,0 +1,69 @@ +127.0.0.1 192.168.1.1 +192.168.1.1 141.24.249.141 +141.24.249.141 141.24.254.22 +141.24.254.22 141.24.254.21 +141.24.254.21 188.1.238.1 +188.1.238.1 188.1.144.222 +188.1.144.222 213.248.97.40 +213.248.97.40 62.115.141.226 +213.248.97.40 62.115.142.34 +213.248.97.40 62.115.140.6 +213.248.97.40 62.115.142.12 +213.248.97.40 62.115.142.18 +213.248.97.40 62.115.142.32 +213.248.97.40 62.115.140.16 +213.248.97.40 62.115.140.18 +213.248.97.40 62.115.142.20 +213.248.97.40 62.115.142.22 +213.248.97.40 62.115.142.2 +213.248.97.40 62.115.142.16 +213.248.97.40 62.115.142.14 +213.248.97.40 62.115.142.6 +213.248.97.40 62.115.142.4 +213.248.97.40 62.115.142.24 +213.248.97.40 62.115.142.0 +213.248.97.40 62.115.142.30 +213.248.97.40 62.115.141.224 +213.248.97.40 62.115.142.10 +213.248.97.40 62.115.141.230 +213.248.97.40 62.115.142.28 +213.248.97.40 62.115.142.26 +213.248.97.40 62.115.141.228 +213.248.97.40 62.115.140.20 +213.248.97.40 62.115.140.14 +213.248.97.40 62.115.142.8 +213.248.97.40 62.115.141.232 +62.115.141.226 62.115.119.185 +62.115.142.34 62.115.119.185 +62.115.140.6 62.115.119.185 +62.115.142.12 62.115.119.185 +62.115.142.18 62.115.119.185 +62.115.142.32 62.115.119.185 +62.115.140.16 62.115.119.185 +62.115.140.18 62.115.119.185 +62.115.142.20 62.115.119.185 +62.115.142.22 62.115.119.185 +62.115.142.2 62.115.119.185 +62.115.142.16 62.115.119.185 +62.115.142.14 62.115.119.185 +62.115.142.6 62.115.119.185 +62.115.142.4 62.115.119.185 +62.115.142.24 62.115.119.185 +62.115.142.0 62.115.119.185 +62.115.142.30 62.115.119.185 +62.115.141.224 62.115.119.185 +62.115.142.10 62.115.119.185 +62.115.141.230 62.115.119.185 +62.115.142.28 62.115.119.185 +62.115.142.26 62.115.119.185 +62.115.141.228 62.115.119.185 +62.115.140.20 62.115.119.185 +62.115.140.14 62.115.119.185 +62.115.142.8 62.115.119.185 +62.115.141.232 62.115.119.185 +62.115.119.185 31.28.19.50 +31.28.19.50 91.135.147.214 +91.135.147.214 83.167.66.69 +83.167.66.69 83.167.65.161 +83.167.65.161 83.167.65.162 +83.167.65.162 127.1.1.6 diff --git a/tests/fakenet/data/planetlab-2.cs.ucy.ac.cy_113.32.238.1_2018-05-17 11_26_19.047265+01_00 b/tests/fakenet/data/planetlab-2.cs.ucy.ac.cy_113.32.238.1_2018-05-17 11_26_19.047265+01_00 new file mode 100755 index 0000000..d93b0ec --- /dev/null +++ b/tests/fakenet/data/planetlab-2.cs.ucy.ac.cy_113.32.238.1_2018-05-17 11_26_19.047265+01_00 @@ -0,0 +1,59 @@ +127.0.0.1 194.42.17.190 +194.42.17.190 194.42.17.78 +194.42.17.78 194.42.0.113 +194.42.0.113 194.42.0.42 +194.42.0.42 194.42.13.150 +194.42.13.150 82.116.192.190 +82.116.192.190 83.97.88.45 +83.97.88.45 149.6.42.73 +149.6.42.73 130.117.0.1 +149.6.42.73 130.117.1.118 +130.117.0.1 130.117.0.121 +130.117.1.118 130.117.0.141 +130.117.0.121 154.54.77.246 +130.117.0.141 154.54.58.69 +154.54.77.246 154.54.44.162 +154.54.58.69 154.54.44.166 +154.54.44.162 154.54.41.205 +154.54.44.166 154.54.42.89 +154.54.41.205 154.54.31.225 +154.54.42.89 154.54.31.233 +154.54.31.225 154.54.6.221 +154.54.31.233 154.54.7.129 +154.54.6.221 154.54.42.165 +154.54.7.129 154.54.44.169 +154.54.42.165 154.54.5.89 +154.54.44.169 154.54.31.89 +154.54.5.89 154.54.41.145 +154.54.31.89 154.54.42.97 +154.54.41.145 154.54.2.197 +154.54.42.97 154.54.2.197 +154.54.2.197 154.54.84.30 +154.54.2.197 154.54.84.153 +154.54.84.30 154.24.5.246 +154.54.84.153 154.24.15.138 +154.24.5.246 154.18.0.106 +154.24.15.138 154.18.0.106 +154.18.0.106 61.122.116.1 +154.18.0.106 61.122.116.17 +61.122.116.1 221.240.51.34 +61.122.116.1 221.240.51.42 +61.122.116.1 58.159.223.34 +61.122.116.17 221.240.51.38 +61.122.116.17 221.240.51.46 +221.240.51.34 221.112.16.150 +221.240.51.34 221.112.16.178 +221.240.51.38 221.112.16.154 +221.240.51.38 221.112.16.182 +221.240.51.42 221.112.16.182 +221.240.51.42 221.112.16.154 +221.240.51.46 221.112.16.178 +221.240.51.46 221.112.16.150 +221.112.16.150 221.112.1.54 +221.112.16.154 221.112.1.50 +221.112.16.178 221.112.1.50 +221.112.16.182 221.112.1.54 +221.112.1.54 127.1.1.6 +221.112.1.50 127.1.1.6 +58.159.223.34 221.112.16.154 +58.159.223.34 221.112.16.182 diff --git a/tests/fakenet/data/ple1.cesnet.cz_203.195.189.3 b/tests/fakenet/data/ple1.cesnet.cz_203.195.189.3 new file mode 100644 index 0000000..a57ba2c --- /dev/null +++ b/tests/fakenet/data/ple1.cesnet.cz_203.195.189.3 @@ -0,0 +1,40 @@ +127.0.0.1 192.168.0.1 +192.168.0.1 195.113.161.1 +195.113.161.1 195.22.215.228 +195.22.215.228 195.22.206.148 +195.22.215.228 195.22.206.200 +195.22.206.148 195.22.206.170 +195.22.206.200 195.22.206.170 +195.22.206.170 202.97.51.157 +202.97.51.157 202.97.94.89 +202.97.94.89 202.97.94.133 +202.97.94.89 202.97.94.125 +202.97.94.89 202.97.94.121 +202.97.94.89 202.97.94.129 +202.97.94.133 113.108.208.2 +202.97.94.125 113.108.208.222 +202.97.94.121 113.108.208.222 +202.97.94.129 113.108.208.2 +113.108.208.2 113.108.209.54 +113.108.208.222 183.60.112.10 +183.60.112.10 113.108.236.222 +183.60.112.10 121.14.60.130 +183.60.112.10 121.14.60.122 +183.60.112.10 14.119.117.138 +183.60.112.10 14.119.117.142 +113.108.209.54 121.14.60.126 +113.108.209.54 14.119.117.134 +113.108.209.54 14.119.117.130 +113.108.209.54 121.14.60.118 +113.108.209.54 113.108.236.218 +113.108.236.222 8.8.8.8 +121.14.60.130 8.8.8.8 +121.14.60.122 8.8.8.8 +121.14.60.126 8.8.8.8 +14.119.117.138 8.8.8.8 +14.119.117.134 8.8.8.8 +14.119.117.130 8.8.8.8 +121.14.60.118 8.8.8.8 +14.119.117.142 8.8.8.8 +113.108.236.218 8.8.8.8 +8.8.8.8 127.1.1.6 diff --git a/tests/fakenet/data/puri.mimuw.edu.pl_103.37.81.246_2018-02-08 12_38_30.754221+01_00 b/tests/fakenet/data/puri.mimuw.edu.pl_103.37.81.246_2018-02-08 12_38_30.754221+01_00 new file mode 100644 index 0000000..2d0174f --- /dev/null +++ b/tests/fakenet/data/puri.mimuw.edu.pl_103.37.81.246_2018-02-08 12_38_30.754221+01_00 @@ -0,0 +1,80 @@ +127.0.0.1 192.168.1.1 +192.168.1.1 193.0.109.1 +193.0.109.1 193.0.103.1 +193.0.103.1 193.0.103.19 +193.0.103.19 212.191.224.33 +212.191.224.33 109.105.98.124 +109.105.98.124 109.105.97.64 +109.105.98.124 109.105.97.139 +109.105.97.64 198.32.160.223 +109.105.97.139 198.32.160.223 +198.32.160.223 182.79.176.60 +198.32.160.223 182.79.205.144 +198.32.160.223 182.79.181.77 +198.32.160.223 182.79.176.62 +198.32.160.223 182.79.181.85 +198.32.160.223 182.79.181.221 +198.32.160.223 182.79.181.225 +198.32.160.223 182.79.181.229 +198.32.160.223 182.79.176.142 +198.32.160.223 182.79.176.58 +198.32.160.223 182.79.177.127 +198.32.160.223 182.79.181.231 +198.32.160.223 182.79.191.90 +198.32.160.223 182.79.181.219 +198.32.160.223 182.79.176.140 +198.32.160.223 182.79.176.46 +198.32.160.223 182.79.181.71 +198.32.160.223 182.79.181.223 +198.32.160.223 182.79.208.138 +198.32.160.223 182.79.181.253 +198.32.160.223 182.79.181.73 +198.32.160.223 182.79.181.75 +198.32.160.223 182.79.181.227 +198.32.160.223 182.79.181.81 +198.32.160.223 182.79.208.136 +198.32.160.223 182.79.181.83 +198.32.160.223 182.79.205.146 +198.32.160.223 182.79.181.79 +198.32.160.223 182.79.176.56 +198.32.160.223 182.79.177.129 +198.32.160.223 182.79.181.255 +198.32.160.223 182.79.191.82 +198.32.160.223 182.79.181.233 +198.32.160.223 182.79.176.44 +182.79.176.60 182.76.113.18 +182.79.205.144 182.76.113.18 +182.79.181.77 182.76.113.18 +182.79.176.62 182.76.113.18 +182.79.181.85 182.76.113.18 +182.79.181.221 182.76.113.18 +182.79.181.225 182.76.113.18 +182.79.181.229 182.76.113.18 +182.79.176.142 182.76.113.18 +182.79.176.58 182.76.113.18 +182.79.177.127 182.76.113.18 +182.79.181.231 182.76.113.18 +182.79.191.90 182.76.113.18 +182.79.181.219 182.76.113.18 +182.79.176.140 182.76.113.18 +182.79.176.46 182.76.113.18 +182.79.181.71 182.76.113.18 +182.79.181.223 182.76.113.18 +182.79.208.138 182.76.113.18 +182.79.181.253 182.76.113.18 +182.79.181.73 182.76.113.18 +182.79.181.75 182.76.113.18 +182.79.181.227 182.76.113.18 +182.79.181.81 182.76.113.18 +182.79.208.136 182.76.113.18 +182.79.181.83 182.76.113.18 +182.79.205.146 182.76.113.18 +182.79.181.79 182.76.113.18 +182.79.176.56 182.76.113.18 +182.79.177.129 182.76.113.18 +182.79.181.255 182.76.113.18 +182.79.191.82 182.76.113.18 +182.79.181.233 182.76.113.18 +182.79.176.44 182.76.113.18 +182.76.113.18 103.37.83.226 +103.37.83.226 127.1.1.6 diff --git a/tests/fakenet/data/sample_net.txt b/tests/fakenet/data/sample_net.txt new file mode 100644 index 0000000..1cb97f9 --- /dev/null +++ b/tests/fakenet/data/sample_net.txt @@ -0,0 +1,22 @@ +#----------------------------------------- +# a sample network architecture +#----------------------------------------- +# 1.2---1.3---1.4 +# / / \ +# / / \ +# 0.1---0.2---0.3---0.4--0.5 +#----------------------------------------- + +10.0.0.1 10.0.0.2 +10.0.0.2 10.0.0.3 +10.0.0.3 10.0.0.4 +10.0.0.4 10.0.0.5 + + +10.0.0.1 10.0.1.2 +10.0.1.2 10.0.1.3 + +# 10.0.0.2 10.0.1.3 + +10.0.1.3 10.0.1.4 +10.0.1.4 10.0.0.5 diff --git a/tests/fakenet/fakenet.py b/tests/fakenet/fakenet.py new file mode 100644 index 0000000..cddc5ef --- /dev/null +++ b/tests/fakenet/fakenet.py @@ -0,0 +1,348 @@ +from __future__ import annotations +from dataclasses import dataclass +import xxhash +import random + +import networkx as nx +from ipaddress import ip_address +from pycaracal import Probe, Reply + + +# A graph that represents a network topology +# where nodes are routers and edges existing links. +# Nodes can have multiple outgoing edges, representing multiple interfaces. +# Edges are not weighted. +# The topology is loaded from a text file with two IPs per line, separated by a space. + + +class FakeNet(nx.DiGraph): + """ + A fake network topology that emulates a network graph. + The graph is a directed graph with a start and end node. + The class includes various methods to generate fake network topologies. + One can generate: + - a meshed topology with a given topology list + - a random graph with a given edge probability and depth + - a network with multiple single paths + - a network from a file + """ + + DEFAULT_START = "4.4.4.4" + DEFAULT_END = "44.44.44.44" + + def __init__(self): + super().__init__() + self.start = None + self.end = None + + @classmethod + def meshed(cls, topology: list[int]) -> FakeNet: + # each value in the topology list represents the number of nodes at that ttl + # the first value is the number of nodes at ttl 1 + # the second value is the number of nodes at ttl 2, etc. + net = FakeNet() + routers = [ + [f"192.{ttl+1}.{i}.0" for i in range(n)] for ttl, n in enumerate(topology) + ] + net.start = FakeNet.DEFAULT_START + net.end = FakeNet.DEFAULT_END + for ttl in range(len(topology) - 1): + for i in range(topology[ttl]): + for j in range(topology[ttl + 1]): + net.add_edge(f"192.{ttl+1}.{i}.0", f"192.{ttl+2}.{j}.0") + + for dest in routers[0]: + net.add_edge(net.start, dest) + for dest in routers[-1]: + net.add_edge(dest, net.end) + + return net + + @classmethod + def multi_single_paths(cls, n_paths: int, path_length: int) -> FakeNet: + # create a network with n_paths paths of length path_length + net = FakeNet() + net.start = FakeNet.DEFAULT_START + net.end = FakeNet.DEFAULT_END + for i in range(n_paths): + net.add_edge(net.start, f"192.{i}.0.0") + for j in range(0, path_length): + start = f"192.{i}.{j}.0" + dest = f"192.{i}.{j+1}.0" + net.add_edge(start, dest) + net.add_edge(dest, net.end) + return net + + @classmethod + def from_file(cls, filepath: str) -> FakeNet: + """ + Create a network topology from a file. + The file should contain two IP addresses per line, separated by a space. + Comments are allowed and start with a #. + The graph is a directed graph with a start and end node. + The start node is the first node in a topological sort; the end node is the last node. + """ + net = FakeNet() + # open the file and add edges + with open(filepath) as f: + for i, line in enumerate(f.readlines()): + line = line.strip() + # we skip empty lines and comments + if line and not line.startswith("#"): + try: + (start, end) = line.split(" ", maxsplit=1) + # We still try to validate the IP addresses + _, _ = ip_address(start), ip_address(end) + net.add_edge(start, end) + except ValueError as e: + raise ValueError(f"Error on line {i+1} in file {filepath}: {e}") + # set start to the single node in the graph with no incoming edges + # i.e. the first node in a topological sort + net.start = next(iter(nx.topological_sort(net))) + # set end to the single node in the graph with no outgoing edges + # i.e. the last node in a topological sort + net.end = list(nx.topological_sort(net))[-1] + return net + + @classmethod + def random_graph(cls, p_edge: float, depth: int, seed: int = 0) -> FakeNet: + """ + Generate a random graph with a given edge probability and depth (number of ttl levels) + The graph is a directed graph with a start and end node + The start node is connected to all nodes at ttl 1 + The end node is connected to all nodes at last ttl + :param p_edge: probability of an edge existing between two nodes + :param depth: number of ttl levels + :return: a FakeNet instance + """ + # we seed the random number generator to get reproducible results + random.seed(seed) + + # TODO: parametrize the topology generation + # generate a random topology with a random number of nodes at each ttl + # the first value is the number of nodes at ttl 1, the second value at ttl 2, etc. + # the topology is generated by picking a random number of nodes between 1 and 5, + # with a bias toward 1 (2/3 of values will be 1) + + topology = [max(random.randint(-3, 6), 1) for _ in range(depth)] + + # generate a list of routers IPs for each ttl + # routers = [ [list of routers at ttl 1], [list of routers at ttl 2], ...] + routers = [ + [f"192.{ttl+1}.{i}.0" for i in range(n)] for ttl, n in enumerate(topology) + ] + + random_graph = nx.DiGraph() + + for ttl in range(len(topology) - 1): + for i, src in enumerate(routers[ttl]): + for j, dst in enumerate(routers[ttl + 1]): + # we always add an edge between the first nodes at each ttl + # this is to ensure that the end node is reachable from the start node + if i == 0 and j == 0: + random_graph.add_edge(src, dst) + elif random.random() < p_edge: + random_graph.add_edge(src, dst) + start = FakeNet.DEFAULT_START + end = FakeNet.DEFAULT_END + for dst in routers[0]: + random_graph.add_edge(start, dst) + for src in routers[-1]: + random_graph.add_edge(src, end) + + # filter edges such that all nodes are reachable from the start node + # and the end node is reachable from all nodes + random_graph = nx.DiGraph( + [ + (u, v) + for (u, v) in random_graph.edges() + if nx.has_path(random_graph, start, u) + and nx.has_path(random_graph, v, end) + ] + ) + # TODO: add logging + + net = FakeNet() + net.start = start + net.end = end + net.add_edges_from(random_graph.edges()) + + return net + + +class FakeProber: + """ + A fake prober that generates fake replies for a given list of probes. + It aims to emulate the prober part (caracal) of the fast_mda_traceroute tool. + It is initialized with a network topology and a seed. + The `probe` method simulates the network traversal of the probes and returns a list of replies. + The seed parameter is used to generate random paths for the probes, based on the probe's attributes. + """ + + def __init__(self, net: FakeNet, seed: int = 0): + """ + Initialize the prober with a network topology and a seed. + :param net: a FakeNet instance + :param seed: an integer seed + """ + self.net = net + self.seed = seed + + @classmethod + def flow_id(cls, probe: Probe, local_seed: int) -> int: + """ + Generate a unique identifier for a flow based on the probe attributes and a local seed. + It uses the following attributes of the probe: + - dst_addr + - src_port + - protocol + - dst_port + The xxhash algorithm is used to generate the hash. + + :param probe: a Probe instance + :param local_seed: an integer seed + """ + # select the probe attributes that uniquely identify a flow + attributes = ( + probe.dst_addr, + probe.src_port, + probe.protocol, + probe.dst_port, + ) + # use a fast hash + return xxhash.xxh32(str(attributes).encode(), seed=local_seed).intdigest() + + def node_seed(self, node_id: str) -> int: + """ + Generate a unique seed for a node based on its id. + Nodes are routers in the network topology. + The hash is computed using the xxhash algorithm. + The prober's seed is used as a seed for the hash. + :param node_id: a string representing the node + """ + # use a fast hash + return xxhash.xxh32(node_id.encode(), seed=self.seed).intdigest() + + def probe(self, probes: list[Probe]) -> list[Reply]: + """ + Simulate the network traversal of the probes and generate fake replies. + Replies can be ICMP time exceeded or ICMP echo replies. + :param probes: a list of Probe instances + + :return: a list of Reply instances + """ + replies = [] + for probe in probes: + # walks the graph from the start node to the probe's destination + # monitors the ttl and returns a reply when the destination is reached or the ttl is exceeded + # a random path is chosen using the id of the flow modulo the number of successors of the current node + dst = probe.dst_addr + ttl = probe.ttl + current = self.net.start + while ttl > 0 and current != dst: + succ = list(self.net.successors(current)) + + # fetch a unique identifier for the current node + local_seed = self.node_seed(current) + # from the probe attributes and the current node's hash, get a unique identifier for the flow + flow_id = FakeProber.flow_id(probe, local_seed=local_seed) + + # select the successor based on the flow id + current = succ[flow_id % len(succ)] + ttl -= 1 + if ttl == 0: + replies.append(FakeReply.icmp_time_exceeded_reply(current, probe)) + else: + replies.append(FakeReply.icmp_echo_reply(current, probe)) + + return replies + + +@dataclass(frozen=True) +class FakeReply: + """ + A fake reply that emulates the replies generated by the prober. + The class provides two class methods to generate ICMP time exceeded and ICMP echo replies. + """ + + # a fake reply that has the following: + probe_protocol: str + probe_dst_addr: str + probe_src_port: int + probe_dst_port: int + probe_ttl: int + reply_ttl: int + reply_src_addr: str + reply_icmp_type: int + reply_icmp_code: int + reply_id: int + quoted_ttl: int + capture_timestamp: int + rtt: int + + @property + def time_exceeded(self): + # This method is used by the DiamondMiner class to filter time exceeded replies + return self.reply_icmp_type == 11 + + @property + def echo_reply(self): + # This method is used by the DiamondMiner class to filter echo replies + return self.reply_icmp_type == 0 + + @classmethod + def icmp_time_exceeded_reply(cls, src: int, probe: Probe) -> FakeReply: + """ + Generate a fake ICMP time exceeded reply for a given probe. + The probe's TTL is normally embedded in the IP ID field. + Here, we directly use the probe's TTL. + :param src: the source address of the reply + :param probe: a Probe instance + + :return: a FakeReply instance + """ + + # return a fake ICMP time exceeded reply using information from the probe + return FakeReply( + probe_protocol=probe.protocol, + probe_dst_addr=probe.dst_addr, + probe_src_port=probe.src_port, + probe_dst_port=probe.dst_port, + probe_ttl=probe.ttl, + reply_ttl=255 - probe.ttl, + reply_src_addr=src, + reply_icmp_type=11, + reply_icmp_code=0, + reply_id=FakeProber.flow_id(probe, 0) % 2**16, + quoted_ttl=1, + capture_timestamp=0, + rtt=0, + ) + + @classmethod + def icmp_echo_reply(cls, src: int, probe: Probe) -> FakeReply: + """ + Generate a fake ICMP echo reply for a given probe. + Same as the ICMP time exceeded reply, but with a different ICMP type. + :param src: the source address of the reply + :param probe: a Probe instance + + :return: a FakeReply instance + """ + # return a fake ICMP time ECHO reply using information from the probe + # does not reuse because FakeReply is immutable (frozen) + return FakeReply( + probe_protocol=probe.protocol, + probe_dst_addr=probe.dst_addr, + probe_src_port=probe.src_port, + probe_dst_port=probe.dst_port, + probe_ttl=probe.ttl, + reply_ttl=255 - probe.ttl, + reply_src_addr=src, + reply_icmp_type=0, + reply_icmp_code=0, + reply_id=FakeProber.flow_id(probe, 0) % 2**16, + quoted_ttl=1, + capture_timestamp=0, + rtt=0, + ) diff --git a/tests/fakenet/test_apriori.py b/tests/fakenet/test_apriori.py new file mode 100644 index 0000000..1fc76a5 --- /dev/null +++ b/tests/fakenet/test_apriori.py @@ -0,0 +1,56 @@ +import pytest +from tests.fakenet.apriori import apriori_prob +from fakenet.fakenet import FakeNet + + +def assert_sorted_probs(probs): + assert all([0 <= prob <= 1 for prob in probs]) + assert sorted(probs) == probs + + +@pytest.mark.parametrize("n_paths", range(3, 6)) +def test_apriori_multi_path(n_paths: int): + """ + Checks the apriori probability for a network with a single load-balancer. + """ + confidences = [0.80, 0.90, 0.95, 0.99] + net = FakeNet.multi_single_paths(n_paths=n_paths, path_length=3) + expected_probs = [apriori_prob(net, confidence=conf) for conf in confidences] + assert_sorted_probs(expected_probs) + assert len(set(expected_probs)) == len(expected_probs) + for prob, confidence in zip(expected_probs, confidences): + a, b = confidence * 0.95, confidence * 1.05 + # for confidence=0.95, we expect the probability to be between 0.9025 and 0.9975 + assert a <= prob <= b + + +@pytest.mark.parametrize("height", range(3, 6)) +@pytest.mark.parametrize("length", range(3, 6)) +def test_apriori_meshed(height: int, length: int): + """ + Checks the apriori probability for a meshed network. + """ + confidences = [0.80, 0.90, 0.95, 0.99] + net = FakeNet.meshed([height for _ in range(length)]) + expected_probs = [apriori_prob(net, confidence=conf) for conf in confidences] + assert_sorted_probs(expected_probs) + assert len(set(expected_probs)) == len(expected_probs) + n_nodes = height * (length - 1) + 1 + for prob, confidence in zip(expected_probs, confidences): + a, b = confidence * 0.95, confidence * 1.05 + # for confidence=0.95, we expect the probability to be between 0.9025 and 0.9975 + # each bound is raised to the power of the number of nodes + assert a**n_nodes <= prob <= b**n_nodes + + +@pytest.mark.parametrize("seed", range(10)) +def test_apriori_random(seed: int): + """ + Checks the apriori probability for a random network. + """ + confidences = [0.80, 0.90, 0.95, 0.99] + net = FakeNet.random_graph(p_edge=0.7, depth=8, seed=seed) + expected_probs = [apriori_prob(net, confidence=conf) for conf in confidences] + + assert all([0 <= prob <= 1 for prob in expected_probs]) + assert sorted(expected_probs) == expected_probs diff --git a/tests/fakenet/test_artificial_networks.py b/tests/fakenet/test_artificial_networks.py new file mode 100644 index 0000000..7301d46 --- /dev/null +++ b/tests/fakenet/test_artificial_networks.py @@ -0,0 +1,165 @@ +import pytest +from fakenet.fakenet import FakeNet +from tests.fakenet.apriori import ( + apriori_prob, +) +from tests.fakenet.config import ( + DEFAULT_CONFIDENCE, + N_TRIES, + DELTA_THRESHOLD, +) +from tests.fakenet.utils import eval_diamond_miner + + +@pytest.mark.parametrize("height", range(2, 5)) +@pytest.mark.parametrize("length", range(3, 6)) +@pytest.mark.parametrize("optimal_jump", [False, True]) +def test_meshed_networks(height, length, optimal_jump): + """ + Checks that the algorithm succeeds on meshed networks + with a probability higher than the expected apriori threshold. + """ + net = FakeNet.meshed([height for _ in range(length)]) + expected = DELTA_THRESHOLD * apriori_prob(net, confidence=DEFAULT_CONFIDENCE / 100) + OK = sum( + ( + 1 + if eval_diamond_miner( + net=net, + confidence=DEFAULT_CONFIDENCE, + seed=seed, + optimal_jump=optimal_jump, + ) + else 0 + ) + for seed in range(N_TRIES) + ) + + assert OK / N_TRIES > expected + + +@pytest.mark.parametrize("n_paths", range(3, 6)) +@pytest.mark.parametrize("length", range(3, 6)) +@pytest.mark.parametrize("optimal_jump", [False, True]) +def test_multi_single_paths_networks(n_paths, length, optimal_jump): + """ + Checks that the algorithm succeeds on a simple network with a single load-balancer. + """ + net = FakeNet.multi_single_paths(n_paths=n_paths, path_length=length) + expected = DELTA_THRESHOLD * apriori_prob(net, confidence=DEFAULT_CONFIDENCE / 100) + + OK = sum( + ( + 1 + if eval_diamond_miner( + net=net, + confidence=DEFAULT_CONFIDENCE, + seed=seed, + optimal_jump=optimal_jump, + ) + else 0 + ) + for seed in range(N_TRIES) + ) + assert OK / N_TRIES > expected + + +@pytest.mark.parametrize("length", range(1, 20)) +@pytest.mark.parametrize("optimal_jump", [False, True]) +def test_single_path_network(length, optimal_jump): + """ + Checks that the algorithm succeeds on a simple network with no load-balancer. + """ + net = FakeNet.multi_single_paths(n_paths=1, path_length=length) + expected = DELTA_THRESHOLD * apriori_prob(net, confidence=DEFAULT_CONFIDENCE / 100) + + OK = sum( + ( + 1 + if eval_diamond_miner( + net=net, + confidence=DEFAULT_CONFIDENCE, + seed=seed, + optimal_jump=optimal_jump, + ) + else 0 + ) + for seed in range(N_TRIES) + ) + assert OK / N_TRIES > expected + + +@pytest.mark.parametrize("confidence", [60.0, 70.0, 80.0, 90.0]) +def test_varying_confidence(confidence): + """ + Checks that the algorithm succeeds on a simple network + more often than the expected apriori probability. + """ + net = FakeNet.multi_single_paths(n_paths=4, path_length=5) + expected = DELTA_THRESHOLD * apriori_prob(net, confidence=confidence / 100) + + OK = sum( + ( + 1 + if eval_diamond_miner( + net=net, + confidence=confidence, + seed=seed, + ) + else 0 + ) + for seed in range(N_TRIES) + ) + assert OK / N_TRIES > expected + + +@pytest.mark.parametrize("confidence", [10.0, 30.0, 50.0]) +def test_low_confidence_fails(confidence): + """ + Checks that the algorithm fails when the confidence is too low, + more often than the expected threshold. + """ + net = FakeNet.meshed([4 for _ in range(4)]) + expected = DELTA_THRESHOLD * apriori_prob(net, confidence=0.95) + + OK = sum( + ( + 1 + if eval_diamond_miner( + net=net, + confidence=confidence, + seed=seed, + ) + else 0 + ) + for seed in range(N_TRIES) + ) + assert OK / N_TRIES < expected + + +@pytest.mark.parametrize("density", [0.5, 0.7, 0.9]) +@pytest.mark.parametrize("depth", range(2, 6)) +@pytest.mark.parametrize("graph_seed", range(5)) +@pytest.mark.parametrize("optimal_jump", [False, True]) +def test_random_network(density, depth, graph_seed, optimal_jump): + """ + Checks that the algorithm succeeds on random networks + with a probability higher than the expected apriori threshold. + """ + net = FakeNet.random_graph(p_edge=density, depth=depth, seed=graph_seed) + expected = DELTA_THRESHOLD * apriori_prob(net, confidence=DEFAULT_CONFIDENCE / 100) + + OK = sum( + ( + 1 + if eval_diamond_miner( + net=net, + confidence=DEFAULT_CONFIDENCE, + seed=seed, + optimal_jump=optimal_jump, + ) + else 0 + ) + for seed in range(N_TRIES) + ) + assert OK / N_TRIES > expected diff --git a/tests/fakenet/test_real_networks.py b/tests/fakenet/test_real_networks.py new file mode 100644 index 0000000..a4b49ed --- /dev/null +++ b/tests/fakenet/test_real_networks.py @@ -0,0 +1,33 @@ +import pytest +from fakenet.fakenet import FakeNet +from tests.fakenet.apriori import apriori_prob +from tests.fakenet.config import ( + DEFAULT_CONFIDENCE, + DELTA_THRESHOLD, + N_TRIES, + SAMPLE_FILES, +) +from tests.fakenet.utils import eval_diamond_miner + + +@pytest.mark.parametrize("filepath", SAMPLE_FILES) +@pytest.mark.parametrize("optimal_jump", [False, True]) +def test_real_networks(filepath, optimal_jump): + net = FakeNet.from_file(filepath) + expected = DELTA_THRESHOLD * apriori_prob(net, confidence=DEFAULT_CONFIDENCE / 100) + if len(net.nodes()) > 80 or len(net.edges()) > 100: + assert False, f"Skipping {filepath}, got {len(net.nodes())} nodes and {len(net.edges())} edges" + OK = sum( + ( + 1 + if eval_diamond_miner( + net=net, + confidence=DEFAULT_CONFIDENCE, + seed=seed, + optimal_jump=optimal_jump, + ) + else 0 + ) + for seed in range(N_TRIES) + ) + assert OK / N_TRIES > expected diff --git a/tests/fakenet/utils.py b/tests/fakenet/utils.py new file mode 100644 index 0000000..090b818 --- /dev/null +++ b/tests/fakenet/utils.py @@ -0,0 +1,88 @@ +import networkx as nx +from pycaracal import Probe, Reply +from fast_mda_traceroute.algorithms.diamond_miner import DiamondMiner +from fast_mda_traceroute.typing import Protocol +from fakenet.fakenet import FakeNet, FakeProber + + +def eval_diamond_miner( + net: FakeNet, confidence: float = 95.0, seed: int = 0, optimal_jump=False +) -> bool: + prober = FakeProber(net, seed=seed) + + protocol = Protocol.ICMP + src_port = 12345 + dst_port = 33434 + max_round = 100 + min_ttl = 1 + # fetch the distance between the start and end nodes + # NOTE: we cannot use the shortest path because the network may be unbalanced + max_ttl = nx.dag_longest_path_length(net) + 1 + + src_addr = net.start + dst_addr = net.end + + alg = DiamondMiner( + dst_addr=dst_addr, + min_ttl=min_ttl, + max_ttl=max_ttl, + src_port=src_port, + dst_port=dst_port, + protocol=protocol.value, + confidence=confidence, + max_round=max_round, + ) + + last_replies: list[Reply] = [] + rnd = 0 + while True: + rnd += 1 + probes = [ + Probe(*x) for x in alg.next_round(last_replies, optimal_jump=optimal_jump) + ] + if not probes: + break + last_replies = prober.probe(probes) + # transform links_by_ttl to a dict of lists + links = { + ttl: list((x, y) for _, x, y in alg.links_by_ttl[ttl] if x and y) + for ttl in range(1, max_ttl) + } + # filter links to only show the ttl that have links + links = {k: v for k, v in links.items() if v} + + # create a graph from the links + nx_graph = graph_from_links(src_addr, links) + + # check if nx_graph is equal to net + res = nx.is_isomorphic(nx_graph, net) + return res + + +def graph_from_links( + src_addr: str, links: dict[int, list[tuple[str, str]]] +) -> nx.DiGraph: + """ + Create a networkx graph from a dictionary of links. + The dictionary has the following structure: + { + ttl: [(src, dst), ...], + ... + } + Since the links dictionnary starts at TTL 1, + we need to connect the source address to all nodes at TTL 1. + :param src_addr: the source address of the network + :param links: a dictionary of links by TTL + + :return: a networkx DiGraph instance + """ + nx_graph = nx.DiGraph() + # link source address to all nodes at ttl 1 + for link in links[1]: + nx_graph.add_edge(src_addr, link[0]) + + # add all edges to the graph + for _, links in links.items(): + nx_graph.add_edges_from(list(set(links))) + + return nx_graph diff --git a/tests/test_links.py b/tests/test_links.py index 4f7afc7..931b605 100644 --- a/tests/test_links.py +++ b/tests/test_links.py @@ -17,7 +17,7 @@ def test_get_replies_by_flow(make_reply): make_reply(1, "::9", 24001, 33434, 1, "::1"), make_reply(1, "::9", 24001, 33434, 3, "::3"), ] - assert get_replies_by_flow([*replies_flow_1, *replies_flow_2]) == { + assert get_replies_by_flow((*replies_flow_1, *replies_flow_2)) == { (1, "::9", 24000, 33434): replies_flow_1, (1, "::9", 24001, 33434): replies_flow_2, } @@ -35,7 +35,7 @@ def test_get_replies_by_ttl(make_reply): make_reply(1, "::9", 24000, 33434, 3, "::3"), make_reply(1, "::9", 24001, 33434, 3, "::3"), ] - assert get_replies_by_ttl([*replies_ttl_1, *replies_ttl_2, *replies_ttl_3]) == { + assert get_replies_by_ttl((*replies_ttl_1, *replies_ttl_2, *replies_ttl_3)) == { 1: replies_ttl_1, 2: replies_ttl_2, 3: replies_ttl_3, @@ -52,15 +52,23 @@ def test_get_pairs_by_flow(make_reply): make_reply(1, "::9", 24001, 33434, 1, "::1"), make_reply(1, "::9", 24001, 33434, 3, "::3"), ] - assert get_pairs_by_flow([*replies_flow_1, *replies_flow_2]) == { - (1, "::9", 24000, 33434): [ + + pairs = get_pairs_by_flow((*replies_flow_1, *replies_flow_2)) + pairs = { + k: set(x for x in v if x[0] > 0 and (x[1] or x[2])) + for k, v in pairs.items() + if k[0] > 0 + } + pairs = {k: v for k, v in pairs.items() if v} + assert pairs == { + (1, "::9", 24000, 33434): { (1, replies_flow_1[0], replies_flow_1[1]), (2, replies_flow_1[1], replies_flow_1[2]), - ], - (1, "::9", 24001, 33434): [ + }, + (1, "::9", 24001, 33434): { (1, replies_flow_2[0], None), (2, None, replies_flow_2[1]), - ], + }, } @@ -74,7 +82,12 @@ def test_get_links_by_ttl(make_reply): make_reply(1, "::9", 24001, 33434, 1, "::1"), make_reply(1, "::9", 24001, 33434, 3, "::3"), ] - assert get_links_by_ttl([*replies_flow_1, *replies_flow_2]) == { + links_by_ttl = get_links_by_ttl((*replies_flow_1, *replies_flow_2)) + links_by_ttl = { + k: set(x for x in v if x[1] or x[2]) for k, v in links_by_ttl.items() if k > 0 + } + links_by_ttl = {k: v for k, v in links_by_ttl.items() if v} + assert links_by_ttl == { 1: {(1, "::1", "::2"), (1, "::1", None)}, 2: {(2, "::2", "::3"), (2, None, "::3")}, } @@ -90,7 +103,7 @@ def test_get_scamper_links(make_reply): make_reply(1, "::9", 24001, 33434, 1, "::1"), make_reply(1, "::9", 24001, 33434, 3, "::3"), ] - assert get_scamper_links([*replies_flow_1, *replies_flow_2]) == { + assert get_scamper_links((*replies_flow_1, *replies_flow_2)) == { "::1": { 2: {"::2": [replies_flow_1[1]], None: [None]}, 3: {"::3": [replies_flow_2[1]]},