From 5ac593342e0761dd313ce8197a0b44d451b46c79 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Sat, 18 May 2024 23:04:53 -0400 Subject: [PATCH 01/15] added networkmanager:CreateGlobalNetwork --- moto/backend_index.py | 3 +- moto/networkmanager/__init__.py | 1 + moto/networkmanager/exceptions.py | 1 + moto/networkmanager/models.py | 55 +++++++++++++++++++ moto/networkmanager/responses.py | 37 +++++++++++++ moto/networkmanager/urls.py | 12 ++++ tests/test_networkmanager/__init__.py | 0 .../test_networkmanager.py | 24 ++++++++ 8 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 moto/networkmanager/__init__.py create mode 100644 moto/networkmanager/exceptions.py create mode 100644 moto/networkmanager/models.py create mode 100644 moto/networkmanager/responses.py create mode 100644 moto/networkmanager/urls.py create mode 100644 tests/test_networkmanager/__init__.py create mode 100644 tests/test_networkmanager/test_networkmanager.py diff --git a/moto/backend_index.py b/moto/backend_index.py index 6406cc3bdef5..52e2a3c08db4 100644 --- a/moto/backend_index.py +++ b/moto/backend_index.py @@ -21,9 +21,9 @@ ("awslambda", re.compile("https?://lambda\\.(.+)\\.amazonaws\\.com")), ("backup", re.compile("https?://backup\\.(.+)\\.amazonaws\\.com")), ("batch", re.compile("https?://batch\\.(.+)\\.amazonaws.com")), - ("budgets", re.compile("https?://budgets\\.amazonaws\\.com")), ("bedrock", re.compile("https?://bedrock\\.(.+)\\.amazonaws\\.com")), ("bedrockagent", re.compile("https?://bedrock-agent\\.(.+)\\.amazonaws\\.com")), + ("budgets", re.compile("https?://budgets\\.amazonaws\\.com")), ("ce", re.compile("https?://ce\\.(.+)\\.amazonaws\\.com")), ("cloudformation", re.compile("https?://cloudformation\\.(.+)\\.amazonaws\\.com")), ("cloudfront", re.compile("https?://cloudfront\\.amazonaws\\.com")), @@ -119,6 +119,7 @@ ("meteringmarketplace", re.compile("https?://aws-marketplace.(.+).amazonaws.com")), ("moto_api._internal", re.compile("https?://motoapi.amazonaws.com")), ("mq", re.compile("https?://mq\\.(.+)\\.amazonaws\\.com")), + ("networkmanager", re.compile("https?://networkmanager\\.(.+)\\.amazonaws\\.com")), ("opsworks", re.compile("https?://opsworks\\.us-east-1\\.amazonaws.com")), ("organizations", re.compile("https?://organizations\\.(.+)\\.amazonaws\\.com")), ("panorama", re.compile("https?://panorama\\.(.+)\\.amazonaws.com")), diff --git a/moto/networkmanager/__init__.py b/moto/networkmanager/__init__.py new file mode 100644 index 000000000000..ddc3c28ffc2b --- /dev/null +++ b/moto/networkmanager/__init__.py @@ -0,0 +1 @@ +from .models import networkmanager_backends # noqa: F401 diff --git a/moto/networkmanager/exceptions.py b/moto/networkmanager/exceptions.py new file mode 100644 index 000000000000..1780cb570937 --- /dev/null +++ b/moto/networkmanager/exceptions.py @@ -0,0 +1 @@ +"""Exceptions raised by the networkmanager service.""" diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py new file mode 100644 index 000000000000..8608ccdfe431 --- /dev/null +++ b/moto/networkmanager/models.py @@ -0,0 +1,55 @@ +"""NetworkManagerBackend class with methods for supported APIs.""" + +from typing import Dict, List, Optional + +from moto.core.base_backend import BackendDict, BaseBackend +from moto.core.common_models import BaseModel +from moto.utilities.tagging_service import TaggingService + + +class GlobalNetwork(BaseModel): + def __init__( + self, description: Optional[str], tags: Optional[List[Dict[str, str]]] + ): + self.description = description + self.tags = tags + self.global_network_id = "global-network-1" + self.global_network_arn = "arn:aws:networkmanager:us-west-2:123456789012:global-network/global-network-1" + self.created_at = "2021-07-15T12:34:56Z" + self.state = "PENDING" + + def to_dict(self): + return { + "GlobalNetworkId": self.global_network_id, + "GlobalNetworkArn": self.global_network_arn, + "Description": self.description, + "Tags": self.tags, + "State": self.state, + "CreatedAt": self.created_at, + } + + +class NetworkManagerBackend(BaseBackend): + """Implementation of NetworkManager APIs.""" + + def __init__(self, region_name, account_id): + super().__init__(region_name, account_id) + self.global_networks: Dict[str, GlobalNetwork] = {} + self.tags: TaggingService = TaggingService() + + # add methods from here + + def create_global_network(self, description, tags): + global_network = GlobalNetwork(description, tags) + gnw_id = global_network.global_network_id + self.global_networks[gnw_id] = global_network + self.tags.tag_resource(gnw_id, tags) + return global_network + + +networkmanager_backends = BackendDict( + NetworkManagerBackend, + "networkmanager", + use_boto3_regions=False, + additional_regions=["global"], +) diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py new file mode 100644 index 000000000000..2bdcf16cb7c5 --- /dev/null +++ b/moto/networkmanager/responses.py @@ -0,0 +1,37 @@ +"""Handles incoming networkmanager requests, invokes methods, returns responses.""" + +import json + +from moto.core.responses import BaseResponse + +from .models import networkmanager_backends + + +class NetworkManagerResponse(BaseResponse): + """Handler for NetworkManager requests and responses.""" + + def __init__(self): + super().__init__(service_name="networkmanager") + + @property + def networkmanager_backend(self): + """Return backend instance specific for this region.""" + # TODO + # networkmanager_backends is not yet typed + # Please modify moto/backends.py to add the appropriate type annotations for this service + return networkmanager_backends[self.current_account]["global"] + + # add methods from here + + def create_global_network(self): + params = json.loads(self.body) + description = params.get("Description") + tags = params.get("Tags") + global_network = self.networkmanager_backend.create_global_network( + description=description, + tags=tags, + ) + return json.dumps(dict(GlobalNetwork=global_network.to_dict())) + + +# add templates from here diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py new file mode 100644 index 000000000000..6371a6568d4e --- /dev/null +++ b/moto/networkmanager/urls.py @@ -0,0 +1,12 @@ +"""networkmanager base URL and path.""" + +from .responses import NetworkManagerResponse + +url_bases = [ + r"https?://networkmanager\.(.+)\.amazonaws\.com", +] + +url_paths = { + "0/.*$": NetworkManagerResponse.dispatch, + "{0}/global-networks$": NetworkManagerResponse.dispatch, +} diff --git a/tests/test_networkmanager/__init__.py b/tests/test_networkmanager/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/test_networkmanager/test_networkmanager.py b/tests/test_networkmanager/test_networkmanager.py new file mode 100644 index 000000000000..d16904129ff3 --- /dev/null +++ b/tests/test_networkmanager/test_networkmanager.py @@ -0,0 +1,24 @@ +"""Unit tests for networkmanager-supported APIs.""" + +import boto3 + +from moto import mock_aws + +# See our Development Tips on writing tests for hints on how to write good tests: +# http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html + + +@mock_aws +def test_create_global_network(): + client = boto3.client("networkmanager") + resp = client.create_global_network( + Description="Test global network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + ) + + global_network = resp["GlobalNetwork"] + assert global_network["Description"] == "Test global network" + assert global_network["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}] + assert global_network["State"] == "PENDING" From 1f660f1ee85218bfea235d64fc6faf714d30bcb5 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Sun, 19 May 2024 13:51:26 -0400 Subject: [PATCH 02/15] added CreateCoreNetwork support --- moto/networkmanager/models.py | 59 ++++++++++++++++++- moto/networkmanager/responses.py | 18 +++++- moto/networkmanager/urls.py | 1 + .../test_networkmanager.py | 27 +++++++++ 4 files changed, 103 insertions(+), 2 deletions(-) diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 8608ccdfe431..21b24849b3b8 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -29,23 +29,80 @@ def to_dict(self): } +class CoreNetwork(BaseModel): + def __init__( + self, + global_network_id: str, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], + policy_document: str, + client_token: str, + ): + self.global_network_id = global_network_id + self.description = description + self.tags = tags + self.policy_document = policy_document + self.client_token = client_token + self.core_network_id = "core-network-1" + self.core_network_arn = ( + "arn:aws:networkmanager:us-west-2:123456789012:core-network/core-network-1" + ) + self.created_at = "2021-07-15T12:34:56Z" + self.state = "PENDING" + + def to_dict(self): + return { + "CoreNetworkId": self.core_network_id, + "CoreNetworkArn": self.core_network_arn, + "GlobalNetworkId": self.global_network_id, + "Description": self.description, + "Tags": self.tags, + "PolicyDocument": self.policy_document, + "State": self.state, + "CreatedAt": self.created_at, + } + + class NetworkManagerBackend(BaseBackend): """Implementation of NetworkManager APIs.""" def __init__(self, region_name, account_id): super().__init__(region_name, account_id) self.global_networks: Dict[str, GlobalNetwork] = {} + self.core_networks: Dict[str, CoreNetwork] = {} self.tags: TaggingService = TaggingService() # add methods from here - def create_global_network(self, description, tags): + def create_global_network( + self, description: Optional[str], tags: Optional[List[Dict[str, str]]] + ) -> GlobalNetwork: global_network = GlobalNetwork(description, tags) gnw_id = global_network.global_network_id self.global_networks[gnw_id] = global_network self.tags.tag_resource(gnw_id, tags) return global_network + def create_core_network( + self, + global_network_id: str, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], + policy_document: str, + client_token: str, + ) -> CoreNetwork: + # check if global network exists + if global_network_id not in self.global_networks: + raise Exception("Resource not found") + + core_network = CoreNetwork( + global_network_id, description, tags, policy_document, client_token + ) + cnw_id = core_network.core_network_id + self.tags.tag_resource(cnw_id, tags) + self.core_networks[cnw_id] = core_network + return core_network + networkmanager_backends = BackendDict( NetworkManagerBackend, diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index 2bdcf16cb7c5..1026063b75b3 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -23,7 +23,7 @@ def networkmanager_backend(self): # add methods from here - def create_global_network(self): + def create_global_network(self) -> str: params = json.loads(self.body) description = params.get("Description") tags = params.get("Tags") @@ -33,5 +33,21 @@ def create_global_network(self): ) return json.dumps(dict(GlobalNetwork=global_network.to_dict())) + def create_core_network(self): + params = json.loads(self.body) + global_network_id = params.get("GlobalNetworkId") + description = params.get("Description") + tags = params.get("Tags") + policy_document = params.get("PolicyDocument") + client_token = params.get("ClientToken") + core_network = self.networkmanager_backend.create_core_network( + global_network_id=global_network_id, + description=description, + tags=tags, + policy_document=policy_document, + client_token=client_token, + ) + return json.dumps(dict(CoreNetwork=core_network.to_dict())) + # add templates from here diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index 6371a6568d4e..77ba1c1f66e7 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -9,4 +9,5 @@ url_paths = { "0/.*$": NetworkManagerResponse.dispatch, "{0}/global-networks$": NetworkManagerResponse.dispatch, + "{0}/core-networks$": NetworkManagerResponse.dispatch, } diff --git a/tests/test_networkmanager/test_networkmanager.py b/tests/test_networkmanager/test_networkmanager.py index d16904129ff3..54330a539129 100644 --- a/tests/test_networkmanager/test_networkmanager.py +++ b/tests/test_networkmanager/test_networkmanager.py @@ -22,3 +22,30 @@ def test_create_global_network(): assert global_network["Description"] == "Test global network" assert global_network["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}] assert global_network["State"] == "PENDING" + + +@mock_aws +def test_create_core_network(): + client = boto3.client("networkmanager") + # Create a global network + global_network_id = client.create_global_network( + Description="Test global network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + )["GlobalNetwork"]["GlobalNetworkId"] + + resp = client.create_core_network( + GlobalNetworkId=global_network_id, + Description="Test core network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + PolicyDocument="policy-document", + ClientToken="client-token", + ) + + core_network = resp["CoreNetwork"] + assert core_network["GlobalNetworkId"] == global_network_id + assert core_network["Description"] == "Test core network" + assert len(core_network["Tags"]) == 1 From e26dfcc4c87ee72c2fe9b67ea0dacef34a82aa70 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Sun, 19 May 2024 23:03:01 -0400 Subject: [PATCH 03/15] add Delete/List/Get CoreNetwork endpoints --- moto/networkmanager/models.py | 49 ++++++++++-- moto/networkmanager/responses.py | 53 ++++++++++++- moto/networkmanager/urls.py | 1 + .../test_networkmanager.py | 74 +++++++++++++++++++ 4 files changed, 167 insertions(+), 10 deletions(-) diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 21b24849b3b8..81288ccff4c8 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -1,9 +1,12 @@ """NetworkManagerBackend class with methods for supported APIs.""" -from typing import Dict, List, Optional +import random +from datetime import datetime, timezone +from typing import Dict, List, Optional, Tuple from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel +from moto.ec2.utils import HEX_CHARS from moto.utilities.tagging_service import TaggingService @@ -13,9 +16,11 @@ def __init__( ): self.description = description self.tags = tags - self.global_network_id = "global-network-1" - self.global_network_arn = "arn:aws:networkmanager:us-west-2:123456789012:global-network/global-network-1" - self.created_at = "2021-07-15T12:34:56Z" + self.global_network_id = "global-network-" + "".join( + random.choice(HEX_CHARS) for _ in range(18) + ) + self.global_network_arn = f"arn:aws:networkmanager:123456789012:global-network/{self.global_network_id}" + self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" def to_dict(self): @@ -43,11 +48,14 @@ def __init__( self.tags = tags self.policy_document = policy_document self.client_token = client_token - self.core_network_id = "core-network-1" + self.core_network_id = "core-network-" + "".join( + random.choice(HEX_CHARS) for _ in range(18) + ) self.core_network_arn = ( - "arn:aws:networkmanager:us-west-2:123456789012:core-network/core-network-1" + f"arn:aws:networkmanager:123456789012:core-network/{self.core_network_id}" ) - self.created_at = "2021-07-15T12:34:56Z" + + self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" def to_dict(self): @@ -103,6 +111,33 @@ def create_core_network( self.core_networks[cnw_id] = core_network return core_network + def delete_core_network(self, core_network_id) -> CoreNetwork: + # Check if core network exists + if core_network_id not in self.core_networks: + raise Exception("Resource not found") + core_network = self.core_networks.pop(core_network_id) + core_network.state = "DELETING" + return core_network + + def tag_resource(self, resource_arn, tags): + # implement here + return + + def untag_resource(self, resource_arn, tag_keys): + # implement here + return + + def list_core_networks( + self, max_results, next_token + ) -> Tuple[List[CoreNetwork], str]: + return list(self.core_networks.values()), next_token + + def get_core_network(self, core_network_id) -> CoreNetwork: + if core_network_id not in self.core_networks: + raise Exception("Resource not found") + core_network = self.core_networks[core_network_id] + return core_network + networkmanager_backends = BackendDict( NetworkManagerBackend, diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index 1026063b75b3..e93500364f00 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -4,7 +4,7 @@ from moto.core.responses import BaseResponse -from .models import networkmanager_backends +from .models import NetworkManagerBackend, networkmanager_backends class NetworkManagerResponse(BaseResponse): @@ -14,7 +14,7 @@ def __init__(self): super().__init__(service_name="networkmanager") @property - def networkmanager_backend(self): + def networkmanager_backend(self) -> NetworkManagerBackend: """Return backend instance specific for this region.""" # TODO # networkmanager_backends is not yet typed @@ -49,5 +49,52 @@ def create_core_network(self): ) return json.dumps(dict(CoreNetwork=core_network.to_dict())) + def delete_core_network(self): + core_network_id = self.uri_match.groups()[0] + core_network = self.networkmanager_backend.delete_core_network( + core_network_id=core_network_id, + ) + return json.dumps(dict(CoreNetwork=core_network.to_dict())) + + def tag_resource(self): + params = json.loads(self.body) + resource_arn = params.get("ResourceArn") + tags = params.get("Tags") + self.networkmanager_backend.tag_resource( + resource_arn=resource_arn, + tags=tags, + ) + # TODO: adjust response + return json.dumps(dict()) + + # add templates from here -# add templates from here + def untag_resource(self): + params = json.loads(self.body) + resource_arn = params.get("ResourceArn") + tag_keys = params.get("TagKeys") + self.networkmanager_backend.untag_resource( + resource_arn=resource_arn, + tag_keys=tag_keys, + ) + # TODO: adjust response + return json.dumps(dict()) + + def list_core_networks(self): + params = self._get_params() + max_results = params.get("MaxResults") + next_token = params.get("NextToken") + core_networks, next_token = self.networkmanager_backend.list_core_networks( + max_results=max_results, + next_token=next_token, + ) + list_core_networks = [core_network.to_dict() for core_network in core_networks] + # TODO: adjust response + return json.dumps(dict(CoreNetworks=list_core_networks, nextToken=next_token)) + + def get_core_network(self): + core_network_id = self.uri_match.groups()[0] + core_network = self.networkmanager_backend.get_core_network( + core_network_id=core_network_id, + ) + return json.dumps(dict(CoreNetwork=core_network.to_dict())) diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index 77ba1c1f66e7..7f960f6c55c9 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -10,4 +10,5 @@ "0/.*$": NetworkManagerResponse.dispatch, "{0}/global-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks$": NetworkManagerResponse.dispatch, + "{0}/core-networks/(?P[^/]+)$": NetworkManagerResponse.dispatch, } diff --git a/tests/test_networkmanager/test_networkmanager.py b/tests/test_networkmanager/test_networkmanager.py index 54330a539129..9197fc566700 100644 --- a/tests/test_networkmanager/test_networkmanager.py +++ b/tests/test_networkmanager/test_networkmanager.py @@ -1,6 +1,7 @@ """Unit tests for networkmanager-supported APIs.""" import boto3 +import pytest from moto import mock_aws @@ -8,6 +9,15 @@ # http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html +def create_global_network(client) -> str: + return client.create_global_network( + Description="Test global network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + )["GlobalNetwork"]["GlobalNetworkId"] + + @mock_aws def test_create_global_network(): client = boto3.client("networkmanager") @@ -49,3 +59,67 @@ def test_create_core_network(): assert core_network["GlobalNetworkId"] == global_network_id assert core_network["Description"] == "Test core network" assert len(core_network["Tags"]) == 1 + + +@mock_aws +def test_delete_core_network(): + client = boto3.client("networkmanager") + gn_id = create_global_network(client) + core_network = client.create_core_network(GlobalNetworkId=gn_id) + cn_id = core_network["CoreNetwork"]["CoreNetworkId"] + assert len(client.list_core_networks()["CoreNetworks"]) == 1 + resp = client.delete_core_network(CoreNetworkId=cn_id) + assert resp["CoreNetwork"]["CoreNetworkId"] == cn_id + assert resp["CoreNetwork"]["State"] == "DELETING" + assert len(client.list_core_networks()["CoreNetworks"]) == 0 + + +@mock_aws +@pytest.mark.skip(reason="NotYetImplemented") +def test_tag_resource(): + client = boto3.client("networkmanager") + resp = client.tag_resource() + + raise Exception("NotYetImplemented") + + +@mock_aws +@pytest.mark.skip(reason="NotYetImplemented") +def test_untag_resource(): + client = boto3.client("networkmanager") + resp = client.untag_resource() + + raise Exception("NotYetImplemented") + + +@mock_aws +def test_list_core_networks(): + NUM_CORE_NETWORKS = 3 + client = boto3.client("networkmanager") + for _ in range(NUM_CORE_NETWORKS): + gn_id = create_global_network(client) + client.create_core_network(GlobalNetworkId=gn_id) + + resp = client.list_core_networks() + pytest.set_trace() + assert len(resp["CoreNetworks"]) == NUM_CORE_NETWORKS + + +@mock_aws +def test_get_core_network(): + client = boto3.client("networkmanager") + gn_id = create_global_network(client) + cn_id = client.create_core_network( + GlobalNetworkId=gn_id, + Description="Test core network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + PolicyDocument="policy-document", + ClientToken="client-token", + )["CoreNetwork"]["CoreNetworkId"] + + resp = client.get_core_network(CoreNetworkId=cn_id) + assert resp["CoreNetwork"]["CoreNetworkId"] == cn_id + assert resp["CoreNetwork"]["Description"] == "Test core network" + assert len(resp["CoreNetwork"]["Tags"]) == 1 From 0cf7cbcc81555df9635abfe4496e7dae425ab6e2 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Mon, 20 May 2024 16:51:48 -0400 Subject: [PATCH 04/15] add TagResource, UntagResource and DescribeGlobalNetworks --- moto/networkmanager/exceptions.py | 12 +++ moto/networkmanager/models.py | 82 ++++++++++++++----- moto/networkmanager/responses.py | 31 +++++-- moto/networkmanager/urls.py | 2 + .../test_networkmanager.py | 67 +++++++++++++-- 5 files changed, 156 insertions(+), 38 deletions(-) diff --git a/moto/networkmanager/exceptions.py b/moto/networkmanager/exceptions.py index 1780cb570937..301e39ff47ec 100644 --- a/moto/networkmanager/exceptions.py +++ b/moto/networkmanager/exceptions.py @@ -1 +1,13 @@ """Exceptions raised by the networkmanager service.""" + +from moto.core.exceptions import JsonRESTError + + +class ValidationError(JsonRESTError): + def __init__(self, message: str): + super().__init__("ValidationException", message) + + +class ResourceNotFound(JsonRESTError): + def __init__(self, message: str): + super().__init__(__class__.__name__, message) # type: ignore diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 81288ccff4c8..d183f46c338e 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -2,24 +2,28 @@ import random from datetime import datetime, timezone -from typing import Dict, List, Optional, Tuple +from typing import Any, Dict, List, Optional, Tuple from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.ec2.utils import HEX_CHARS -from moto.utilities.tagging_service import TaggingService + +from .exceptions import ResourceNotFound, ValidationError class GlobalNetwork(BaseModel): def __init__( - self, description: Optional[str], tags: Optional[List[Dict[str, str]]] + self, + account_id: str, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], ): self.description = description - self.tags = tags + self.tags = tags or [] self.global_network_id = "global-network-" + "".join( random.choice(HEX_CHARS) for _ in range(18) ) - self.global_network_arn = f"arn:aws:networkmanager:123456789012:global-network/{self.global_network_id}" + self.global_network_arn = f"arn:aws:networkmanager:{account_id}:global-network/{self.global_network_id}" self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" @@ -37,6 +41,7 @@ def to_dict(self): class CoreNetwork(BaseModel): def __init__( self, + account_id: str, global_network_id: str, description: Optional[str], tags: Optional[List[Dict[str, str]]], @@ -45,14 +50,14 @@ def __init__( ): self.global_network_id = global_network_id self.description = description - self.tags = tags + self.tags = tags or [] self.policy_document = policy_document self.client_token = client_token self.core_network_id = "core-network-" + "".join( random.choice(HEX_CHARS) for _ in range(18) ) self.core_network_arn = ( - f"arn:aws:networkmanager:123456789012:core-network/{self.core_network_id}" + f"arn:aws:networkmanager:{account_id}:core-network/{self.core_network_id}" ) self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") @@ -78,17 +83,21 @@ def __init__(self, region_name, account_id): super().__init__(region_name, account_id) self.global_networks: Dict[str, GlobalNetwork] = {} self.core_networks: Dict[str, CoreNetwork] = {} - self.tags: TaggingService = TaggingService() # add methods from here def create_global_network( - self, description: Optional[str], tags: Optional[List[Dict[str, str]]] + self, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], ) -> GlobalNetwork: - global_network = GlobalNetwork(description, tags) + global_network = GlobalNetwork( + description=description, + tags=tags, + account_id=self.account_id, + ) gnw_id = global_network.global_network_id self.global_networks[gnw_id] = global_network - self.tags.tag_resource(gnw_id, tags) return global_network def create_core_network( @@ -104,28 +113,32 @@ def create_core_network( raise Exception("Resource not found") core_network = CoreNetwork( - global_network_id, description, tags, policy_document, client_token + global_network_id=global_network_id, + description=description, + tags=tags, + policy_document=policy_document, + client_token=client_token, + account_id=self.account_id, ) cnw_id = core_network.core_network_id - self.tags.tag_resource(cnw_id, tags) self.core_networks[cnw_id] = core_network return core_network def delete_core_network(self, core_network_id) -> CoreNetwork: # Check if core network exists if core_network_id not in self.core_networks: - raise Exception("Resource not found") + raise ResourceNotFound core_network = self.core_networks.pop(core_network_id) core_network.state = "DELETING" return core_network - def tag_resource(self, resource_arn, tags): - # implement here - return + def tag_resource(self, resource_arn, tags) -> None: + resource = self._get_resource_from_arn(resource_arn) + resource.tags.extend(tags) - def untag_resource(self, resource_arn, tag_keys): - # implement here - return + def untag_resource(self, resource_arn, tag_keys) -> None: + resource = self._get_resource_from_arn(resource_arn) + resource.tags = [tag for tag in resource.tags if tag["Key"] not in tag_keys] def list_core_networks( self, max_results, next_token @@ -134,10 +147,37 @@ def list_core_networks( def get_core_network(self, core_network_id) -> CoreNetwork: if core_network_id not in self.core_networks: - raise Exception("Resource not found") + raise ResourceNotFound core_network = self.core_networks[core_network_id] return core_network + def _get_resource_from_arn(self, arn: str) -> Any: + resources = { + "core-network": self.core_networks, + "global-network": self.global_networks, + } + target_resource, target_name = arn.split(":")[-1].split("/") + try: + resource = resources.get(target_resource).get(target_name) # type: ignore + except KeyError: + message = f"Could not find {target_resource} with name {target_name}" + raise ValidationError(message=message) + return resource + + def describe_global_networks(self, + global_network_ids:List[str], + max_results: int, + next_token: str,) -> Tuple[List[GlobalNetwork], str]: + global_networks = [] + if not global_network_ids: + global_networks = list(self.global_networks.values()) + else: + for id in global_network_ids: + if id in self.global_networks: + global_network = self.global_networks[id] + global_networks.append(global_network) + return global_networks, next_token + networkmanager_backends = BackendDict( NetworkManagerBackend, diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index e93500364f00..2e47ad5cf526 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -58,27 +58,28 @@ def delete_core_network(self): def tag_resource(self): params = json.loads(self.body) - resource_arn = params.get("ResourceArn") tags = params.get("Tags") + resource_arn = self.uri_match.groups()[0] + resource_arn = resource_arn.replace("%3A", ":").replace("%2F", "/") + self.networkmanager_backend.tag_resource( resource_arn=resource_arn, tags=tags, ) - # TODO: adjust response - return json.dumps(dict()) + return 200, {}, json.dumps({}) # add templates from here def untag_resource(self): - params = json.loads(self.body) - resource_arn = params.get("ResourceArn") - tag_keys = params.get("TagKeys") + params = self._get_params() + tag_keys = params.get("tagKeys") + resource_arn = self.uri_match.groups()[0] + resource_arn = resource_arn.replace("%3A", ":").replace("%2F", "/") self.networkmanager_backend.untag_resource( resource_arn=resource_arn, tag_keys=tag_keys, ) - # TODO: adjust response - return json.dumps(dict()) + return 200, {}, json.dumps({}) def list_core_networks(self): params = self._get_params() @@ -89,7 +90,6 @@ def list_core_networks(self): next_token=next_token, ) list_core_networks = [core_network.to_dict() for core_network in core_networks] - # TODO: adjust response return json.dumps(dict(CoreNetworks=list_core_networks, nextToken=next_token)) def get_core_network(self): @@ -98,3 +98,16 @@ def get_core_network(self): core_network_id=core_network_id, ) return json.dumps(dict(CoreNetwork=core_network.to_dict())) + + def describe_global_networks(self): + params = self._get_params() + global_network_ids = params.get("GlobalNetworkIds") + max_results = params.get("MaxResults") + next_token = params.get("NextToken") + global_networks, next_token = self.networkmanager_backend.describe_global_networks( + global_network_ids=global_network_ids, + max_results=max_results, + next_token=next_token, + ) + list_global_networks = [global_network.to_dict() for global_network in global_networks] + return json.dumps(dict(GlobalNetworks=list_global_networks, nextToken=next_token)) diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index 7f960f6c55c9..b0a8ef09b2bd 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -11,4 +11,6 @@ "{0}/global-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks/(?P[^/]+)$": NetworkManagerResponse.dispatch, + "{0}/global-networks/(?P[^/]+)$": NetworkManagerResponse.dispatch, + "{0}/tags/(?P[^/]+)$": NetworkManagerResponse.dispatch, } diff --git a/tests/test_networkmanager/test_networkmanager.py b/tests/test_networkmanager/test_networkmanager.py index 9197fc566700..20bb595aefcf 100644 --- a/tests/test_networkmanager/test_networkmanager.py +++ b/tests/test_networkmanager/test_networkmanager.py @@ -1,7 +1,7 @@ """Unit tests for networkmanager-supported APIs.""" -import boto3 import pytest +import boto3 from moto import mock_aws @@ -75,21 +75,51 @@ def test_delete_core_network(): @mock_aws -@pytest.mark.skip(reason="NotYetImplemented") def test_tag_resource(): client = boto3.client("networkmanager") - resp = client.tag_resource() + gn_id = create_global_network(client) + cn = client.create_core_network(GlobalNetworkId=gn_id)["CoreNetwork"] - raise Exception("NotYetImplemented") + # Check tagging core-network + resp = client.tag_resource( + ResourceArn=cn["CoreNetworkArn"], + Tags=[{"Key": "Test", "Value": "TestValue-Core"}], + ) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_cn = client.get_core_network(CoreNetworkId=cn["CoreNetworkId"])[ + "CoreNetwork" + ] + assert updated_cn["Tags"] == [{"Key": "Test", "Value": "TestValue-Core"}] + + # Check tagging global-network + gn_arn = client.describe_global_networks()["GlobalNetworks"][0]["GlobalNetworkArn"] + resp = client.tag_resource(ResourceArn=gn_arn, Tags=[{"Key": "Test", "Value": "TestValue-Global"}]) + assert resp['ResponseMetadata']['HTTPStatusCode'] == 200 + updated_gn = client.describe_global_networks(GlobalNetworkIds=[gn_id])["GlobalNetworks"][0] + assert len(updated_gn["Tags"]) == 2 + assert updated_gn["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}, {"Key": "Test", "Value": "TestValue-Global"}] @mock_aws -@pytest.mark.skip(reason="NotYetImplemented") def test_untag_resource(): client = boto3.client("networkmanager") - resp = client.untag_resource() + gn_id = create_global_network(client) + cn = client.create_core_network( + GlobalNetworkId=gn_id, + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + {"Key": "DeleteMe", "Value": "DeleteThisTag!"}, + ], + )["CoreNetwork"] - raise Exception("NotYetImplemented") + # Check untagging core-network + resp = client.untag_resource(ResourceArn=cn["CoreNetworkArn"], TagKeys=["DeleteMe"]) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_cn = client.get_core_network(CoreNetworkId=cn["CoreNetworkId"])[ + "CoreNetwork" + ] + assert len(updated_cn["Tags"]) == 1 + assert updated_cn["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}] @mock_aws @@ -101,7 +131,6 @@ def test_list_core_networks(): client.create_core_network(GlobalNetworkId=gn_id) resp = client.list_core_networks() - pytest.set_trace() assert len(resp["CoreNetworks"]) == NUM_CORE_NETWORKS @@ -123,3 +152,25 @@ def test_get_core_network(): assert resp["CoreNetwork"]["CoreNetworkId"] == cn_id assert resp["CoreNetwork"]["Description"] == "Test core network" assert len(resp["CoreNetwork"]["Tags"]) == 1 + + +@mock_aws +def test_describe_global_networks(): + NUM_NETWORKS = 3 + client = boto3.client("networkmanager") + global_ids = [] + for i in range(NUM_NETWORKS): + global_id = client.create_global_network( + Description=f"Test global network #{i}", + Tags=[ + {"Key": "Name", "Value": f"TestNetwork-{i}"}, + ], + )['GlobalNetwork']['GlobalNetworkId'] + global_ids.append(global_id) + resp = client.describe_global_networks() + assert len(resp["GlobalNetworks"]) == NUM_NETWORKS + + # Check each global network by ID + for g_id in global_ids: + gn = client.describe_global_networks(GlobalNetworkIds=[g_id])["GlobalNetworks"][0] + assert gn["GlobalNetworkId"] == g_id From 1078af48cb975e5115fe6d3cda4de6ab8073bd21 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Mon, 20 May 2024 20:17:37 -0400 Subject: [PATCH 05/15] fixed test --- moto/networkmanager/models.py | 24 +- moto/networkmanager/responses.py | 30 +- ...CoreApp,Version=v7.0.AssemblyAttributes.cs | 4 + .../net7.0/ElasticBlockStore.AssemblyInfo.cs | 23 + ...ElasticBlockStore.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 11 + .../ElasticBlockStore.GlobalUsings.g.cs | 8 + .../net7.0/ElasticBlockStore.assets.cache | Bin 0 -> 82831 bytes ...cBlockStore.csproj.AssemblyReference.cache | Bin 0 -> 90769 bytes ...ElasticBlockStore.csproj.nuget.dgspec.json | 91 + .../ElasticBlockStore.csproj.nuget.g.props | 29 + .../ElasticBlockStore.csproj.nuget.g.targets | 10 + .../tests_dotnet/ebs/obj/project.assets.json | 6936 +++++++++++++++++ .../tests_dotnet/ebs/obj/project.nuget.cache | 116 + .../test_networkmanager.py | 30 +- 15 files changed, 7281 insertions(+), 32 deletions(-) create mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs create mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfo.cs create mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfoInputs.cache create mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GlobalUsings.g.cs create mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.assets.cache create mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.csproj.AssemblyReference.cache create mode 100644 other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.dgspec.json create mode 100644 other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.props create mode 100644 other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.targets create mode 100644 other_langs/tests_dotnet/ebs/obj/project.assets.json create mode 100644 other_langs/tests_dotnet/ebs/obj/project.nuget.cache diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index d183f46c338e..8593ea01e945 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -110,7 +110,7 @@ def create_core_network( ) -> CoreNetwork: # check if global network exists if global_network_id not in self.global_networks: - raise Exception("Resource not found") + raise ResourceNotFound core_network = CoreNetwork( global_network_id=global_network_id, @@ -164,20 +164,26 @@ def _get_resource_from_arn(self, arn: str) -> Any: raise ValidationError(message=message) return resource - def describe_global_networks(self, - global_network_ids:List[str], + def describe_global_networks( + self, + global_network_ids: List[str], max_results: int, - next_token: str,) -> Tuple[List[GlobalNetwork], str]: - global_networks = [] + next_token: str, + ) -> Tuple[List[GlobalNetwork], str]: + queried_global_networks = [] if not global_network_ids: - global_networks = list(self.global_networks.values()) + queried_global_networks = list(self.global_networks.values()) + elif isinstance(global_network_ids, str): + if global_network_ids not in self.global_networks: + raise ResourceNotFound + queried_global_networks.append(self.global_networks[global_network_ids]) else: for id in global_network_ids: if id in self.global_networks: global_network = self.global_networks[id] - global_networks.append(global_network) - return global_networks, next_token - + queried_global_networks.append(global_network) + return queried_global_networks, next_token + networkmanager_backends = BackendDict( NetworkManagerBackend, diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index 2e47ad5cf526..103a5bc81d98 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -83,8 +83,8 @@ def untag_resource(self): def list_core_networks(self): params = self._get_params() - max_results = params.get("MaxResults") - next_token = params.get("NextToken") + max_results = params.get("maxResults") + next_token = params.get("nextToken") core_networks, next_token = self.networkmanager_backend.list_core_networks( max_results=max_results, next_token=next_token, @@ -98,16 +98,22 @@ def get_core_network(self): core_network_id=core_network_id, ) return json.dumps(dict(CoreNetwork=core_network.to_dict())) - + def describe_global_networks(self): params = self._get_params() - global_network_ids = params.get("GlobalNetworkIds") - max_results = params.get("MaxResults") - next_token = params.get("NextToken") - global_networks, next_token = self.networkmanager_backend.describe_global_networks( - global_network_ids=global_network_ids, - max_results=max_results, - next_token=next_token, + global_network_ids = params.get("globalNetworkIds") + max_results = params.get("maxResults") + next_token = params.get("nextToken") + global_networks, next_token = ( + self.networkmanager_backend.describe_global_networks( + global_network_ids=global_network_ids, + max_results=max_results, + next_token=next_token, + ) + ) + list_global_networks = [ + global_network.to_dict() for global_network in global_networks + ] + return json.dumps( + dict(GlobalNetworks=list_global_networks, nextToken=next_token) ) - list_global_networks = [global_network.to_dict() for global_network in global_networks] - return json.dumps(dict(GlobalNetworks=list_global_networks, nextToken=next_token)) diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs new file mode 100644 index 000000000000..4257f4bc63d7 --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")] diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfo.cs b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfo.cs new file mode 100644 index 000000000000..45475875dbcb --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: Microsoft.Extensions.Configuration.UserSecrets.UserSecretsIdAttribute("45a910a7-aba2-43ee-ad3c-ccad57f044d9")] +[assembly: System.Reflection.AssemblyCompanyAttribute("ElasticBlockStore")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("ElasticBlockStore")] +[assembly: System.Reflection.AssemblyTitleAttribute("ElasticBlockStore")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfoInputs.cache b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfoInputs.cache new file mode 100644 index 000000000000..0c11439f95fa --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +12d1ea2343a09a8827b7acbf48544090a64af1ba diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GeneratedMSBuildEditorConfig.editorconfig b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 000000000000..76eb72663712 --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,11 @@ +is_global = true +build_property.TargetFramework = net7.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = ElasticBlockStore +build_property.ProjectDir = c:\Coding\moto\other_langs\tests_dotnet\ebs\ diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GlobalUsings.g.cs b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GlobalUsings.g.cs new file mode 100644 index 000000000000..8578f3d03de5 --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.assets.cache b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..7e06fb23ba9bd655c0d4a2f612bcb185ad952c2b GIT binary patch literal 82831 zcmd5_2b>*8d6#8Nw%jB)*_MlJxyVg>I-Qy=BP5@yEy+T6whSDQcklL2&wBUX@%B9x z(`*RE5PI*;Ktdp$B!q;BklqU+2}uZ~kdQ`tBMJF``(|dpnVs3$-P?CTKd;~I?9BK5 zzp}H_zL~=h?A>|cqD71LeEFFdZvVpDpZ5HxjjlTMjW>Stqp!H_bx(c#>$|^r=Z>eo ze&)S<>t9~9=xpQ*NAH<dl1RiMd++cx@((CTb_6XzF+nPDT?W z!Iofn{rX^d)5t`vRcoGpjEYUQyDb!`M-w}bj*ablAlQB1STNe23U^YLs1XHI&E{fo zqJL-MqQ8mrX%FY7Rf!rFr6X8gG)&aqSF;2bXk2NLpPT*PrX zt`~SX&Nk|Bo%VD$sKZ<9?Gx~jnQ&qlPM$Cp`lXbED*wZcs8?%_b$e5dcI@h-qHr*F ztTD@RtpEJ?q z=gV;s=PPje-nfJ_UZ1cPksY9%)^ua0*MED&J1DGz7m{gZcT#4Qm*J>Z0tKO>H;zzU ziR;a0YT?q8P@Vi~t9G6##O;SL6Qe6#$-YG{Z!iQfl1;5=`gp z{aa;#z6SR%s{k~sg^Ou7u8A4IYYl+c;r@*k0PN9+EUb6%nv_y0eF(?;<+&4FZ@^uR z`*L1OW}oY{Pc)_gw2ar1(GM#EF0Z}80DL3vUsFoII^elu_@LKo&78{B!5$Wcxn|cG zKySi*IZq{^{T9PavpqT4Xw4J=*>5%M6$LrKn+<@s;65r-U(IzIvyE=!1e#R&>Zil1 z0LOEyfoE+og>}QIJJ+mrr`w&`pgs9$Sntl_|Ux5pHx7>z%;* zWJ#=~;A8EmTf*YAvuFd?<5slQ^miGiUx)k07apd=F->&jm@i#$bZBu#JmCh#G?n{g4} zEx4ZR<4dDA!E~oK8=h=;jz<%lf??L3m7F&~ABTE-k#&#C$_=m;tcdm9xQO*VxSr=> zEyimw8i6h&joP5&YSsH@IZCs0ZVo-gcz}m>4z__8SNFZRujS)iZ#SE0(!}Ej4(210 z`Dl`tOa3&2`*z%)EXz(;o zjAqS*9RS1#gZX-phxD7p7~$X~w7Y|S5*+MK0ro!plIx7(dS+e);*DvBIW!jM<6L(M zuJRq-jr-YrT&EhfnHE|^jXD~#;bd>d%YPRuv5QJ@Bzp`bd&?o|w%g6fg+!T#BN?X> z9LYWd$$s4XYEj`eTqiWJLft9H3$;nQiH4MLk$wRVXB)UCa6gvM zW15ZD^IZy2Es+Dr#4Yh0gWq#;e>^|GAUq{~&iQicymu!BIF9ETIKBh-zNV+J2j&Wb zW8E%IA6Q#q>K!?RjQfz0^Q{?tCvl(i4JE#L+TOzY#NBT5x`AN|_c_~vgdu9zkJC7C z9`VQedASBcgZp%T?tEO$$KBBbn=!Z_!+p;7H@Z2Z4eSzK)yhXyRxWwN;Qc7>d-;4n z;f*&y&LFv9s74HfVV}=9ZXjynK4(LQA({=lwW(USHZdH~bfVE0W9?mr=b$LV^)oBb zwD3zUh&Ha``tiRaHvQP&lsSP&wkV#D`xoW4SQJl?M*%*m@n1==z*=oERI=m|QPR>G z=orW%+~@2JB#k{Qj>L)6ZM?3*wTJt5PJIY!e)mlQu>0-_1ItO=H;Q37h8bT>Zn)kf zRgufq?!JD0?z5*16sK{2su+p}I_jPF9A?N)H0mZAHBCM&djk^8{(iABQH+Cn%mDQQ z+`m6(w^n#ZV4#v+ghq>II5HdRUZg^T{Rt@!{)Gnk7vVl<3qfLU^=88kdYvxArVt(y z1vriu8#rEqd+(s4Xd*};uxTUds%SOSux;f*%Hv>NM!;T4JuZMgfnTaNUy3U)P|WG} zI*sn>px!w>*KN;qYM6-(YR#E8Qjg6#HK^KHnAGhP807?ZDgs=iFB3pzZTg+K_YTAh zjoN{REvzuf=t3)f+F|Y%#W~2A8z5gXZ*6L3w^q3xn0B+j(g6A@+WWVm*pG(f)^_c=Ra@n~jlgU9RCZ1#PPf#ADv zpR*&TA;{4VQ)bn{*gt2lHE_KS_c=QT8m=ff8BV5W!iB{&BvEiQoaEMdy}+;pzf_aF z0he!ineeC>gMAqbXKjwepJQ-*Bkps4K4XrZaHiL+b)3Dz^yf3yz>$72N8j*G0+g($ z-i&+S+A^tzV^}qqt411^Ik^GeVsL&d?sK+jx{4mw`eAy)*FQ@5k5hh*;%x?sx0gbJ z@kAN{w^n!?WDUYlP=1c$9R`Yb;y!0P;M8mrt?n9@0-eNX%nd`mppT%yk+{IoxB$oT zE(6EAai6owA{?it+I6%pa!gkch(~sb+#JDs39C6QnJdUk%Y=$>v@n2V$-ab>cGi`M1K#maGh_9$LLOo?lfMAit<=KUz!kUv|% zS6@+?;T&aXFgW2$rPk&sMW1ZS8|28#mU&VUyC4L^zS5G)+-YT_myrt|DZgEWWZYY> zJ*2#=t+bQoHRWM8J+yl~7{{uvU~Gy!WYINAaXcbN3FNXK8h%-Hb^7^ut%GF)@l$4e zA}UJ;Y@m{eFpOF@y4i=xRLZj|VPr0^pvRX1-I!R-9vo;)c4{3OmRPjhSQ0^LE6l|T zl(rQRnC`SN-7JC0D!ay|Z?0tX-=fc)lM8k=T_Df>Z;Z(a*3pR{Y zN^RqOs9hnkX)+P&o2^d*ecFpMUT@DR$NnkHusw@ib6C33j4Pm#BBhwV56W_F*dW5f z?O=E$*f1Y0r73R20@nFZ+^aA~rzqTKczt1NN>9qa+NEhR?d_4sI>)e7bW34ajMM>1 zsyB(T&t5Q$+4XsOYlU>JNR3x#rLX>=6 zI++&9h?P5(<93z9w{(VbOU|G{>t878DnWoRs)(1G(8HT-57nBKe#D!LNW4mf9x(pEUogX?V%0=3+LvaGgd(LeXgM4tV$Qex2+>W)w4(-Ub1 zy|xR)#5(1WNVO?udLUtF57;~;<+(sGrnzCdzmnYttWQqQmWyY+K9#`r8BWSA-HM)w zsYjk{d}^h)Ceu=sS=uK_4R#~IfF4QrFdhZ_48Wddv>pZXH1FgokDX-L?J@06X z=9_()BARAgbc;Y}rzD3mDd)|ZIazfqg|?H_edUf!qG+#ovHmlh+J$*u!mutgyEz0* zC1jPM4MEZaS!HMsP!GsyZptH_P0JIHU((YR0!;i=_E)5v#fj+wKdqb`JEKJDxol{P z2FU2qjgpVdAN0r0bgUKvG`2+qq=%a0P4rCaM;ivB2TS7d1^Vk!F=E0-btrkcNS2Y~ zly;#=i-%w+;rxCAjR(-}RsGwruVpr1LJzOAJyZh~l;i4tj!v(I@bBP69JU+9VY~En zDXx`C|9ObTw=cn?@5V)){_nv>o&JyG`d(b0!1YO7--qk_aji7_+(U8bvLr#hc_Kl* zc^iozK>Eg{r<54USa-`htwV7HnPhOiU_kda20w`O>kSY9~HEI%t7nNkxo`w?HTPtmPNE~I_IcR zp#dlim@d=+6k|2u0Vu|a4?y{56lPUae7$J2I^%d5EJZ549G7n`Y{F4g3)MuaGc+p& z8uH0fx*m5zx zx>oJecsaBg&+aiTUdw=eyG5Zhm{iZxJ5t^&r!k~CsOWPB^acjhyTZfjl{(OBqRtt> zH4I=mPb7d*ywwZ^1fHDiiL`gW9$zI_6PBsbNvW?0@dFWas^=q6fh=*f(cm_jLX&fBmF~)f0TtuhGo_UpR42?714>8_3>tmhweB<62 z79RJO)918kvpi~`e#uyWb3n%VnM?~gmse_>i$prP<{J1rz~kI1k8fjg^Z2%$tJNru zZhmoXjQ{hP-hE9w@vgTpSyC*Xjq$57emUPX;y0)EVDh?{KFh;xT4%g-wzr6PnfNs( zaaf#d*|;^vmB+2+Y|nO75SmNJNu-U+%Jth|k`|A{V#6JdRiG^5Nk-POVSkQ;dw2?le4j-;VB%O!+7)99N#Kw;W069`(XZF8pW`<&bgmv@`2o5#~Ox`^^lW+t^2 z^Rz%e+0s((!VpKgQFIIayA2n$BWYd6`M5rf>nCu12G>vG`YBwW#r4y;&fxkSuAjm6 zd0g*aFsbrwGnq@kp9OH6fIo-yGq|{b12x-JSfSZ|-XYa52&sM%zht&w!ZlE{X;M{a zwqFKto7sK^>1S|p0S9U}1cg`kw*9I@s$UaQ{W^ZhY`=kPpk~vgs?cn|3E(!f{T9;C z;Nk)f)NIq83eEQ04yk@eNc9E$lG%P2*FeptNmZfQz6jtpv;7{@&*0($4%BRoZiQz1 zeTP(kAf);de#vZqh-;u`)1<18V6T)+Y=bc^@f=DO?dJ5r(L{=p&GKMKMA3BP2yf5!E`L3Z6t!74P~zW}?jv@ zGq|{n1AXT@y$UV&Zw{&cT}bsG_$ABzC$53MbDC5Yn(e;;+-A0KBK-_5F5p1T)~&J| z@ZS!p{zpjlzxXAyeGAt>&8A6Jq1h-J#%8v&kbVY2aRJ{t$QtFbW9tw;S!K_Au|u@8 zg=pvCmu$BLzaLmw(JD0HQiqi1TBKY616J9YJI^87G9lXe_$32gfZqi$AQ!Dd177Hm z@*<0rZ!77h)N;u_wkvCd*?Mx9btLvKSYt6RIn;cyL$>8Yw$C9iS&)XBy-TSb1L*UT z%{WjimryGlLS14Js%-1Bpipji6z53g66{ikV3%108=NO3Q4=xYR6EkEhs%HJ*6AL$K8r!3O7v+9W__o_K>pwi|_PdJW&&>8c$sB5Ny~Y*x)=-n|-Rx6E`?y8xgX7O?V=0~=MX_$ac4ojZdcy&J#0aE8~gxIE30}5o&Ors0me# zC*JE2>}eLk-Z`-GM00|$GH2ZG5bx@?at*KoF($05amo7} zvW+gNY}(9cW&XI!A=_>t8=vSsfU4V;LQcVC35373)?sGyZbhs3Q0uC{hv++w%F2rSn@?2!}g@cwje2O8t zNFcdbAX)A}@;o5%1-mEfJ#hYMSZ|*QJGGf`!Wtwwj3c>|m@UoU_@Pz7*s;be9X=+F zxI*BS3sx?5;QbEZ^@WKuynHX?)R}N24C!cmY!*j!nLumhyqj70^*(^Tl9@283}LQu2opk>ay!^+P88U;Ur63ZrzgdG zDKp^L8o;k}0G|f%Z@0acnHbj_Vyt$EF;n`j(6=})@mA1=cJ}k>cx7~hA;^smL5@KX z?*=*6w?Y@Bn!TEtCDs@M+~g3T0RhUr2_!&&gOK^}<;;NJYyiK-0sK(_U+}%28O~b` zoNFC8j~7!g^<0Z>k&x6jMn{3~kHCQ6CVde+P6FAvg*aDL3xYxCthKj zz=j=~ji6cI#=ND^Tws>wXD(1@d5Z&27kCDFCIf@C6%c4x=x$sD=^k9R9&rzld>dwo zjptHlHl&6WHcyDX?vgV}x!JY>17RA$MVL;2w++)tr03k%bh3ZUsn`lH1!!0T633x( zG^fCYqdDzB^BB@|?k%2q)MRhVW&NZUCd83>R}X!ZOt34>2_x})2mg}?}#Af zKi8TI^+I6=`JsBZL#X#4J!ge0w`4c=gm>3!61hBEo8x=2f$zNzeD6cLw{t1qL7^$n zp7DObt^>ch0FMg+p1?2p`THFLd;sY$&*?SxZQI*(VJnK7E@xNYT>Hu0;)rh!{eytS zEA9_Dpnn+Yd3A4xo;t_Et$RCqd#mP^Lif_SpK=KB5u|(Pw}kV!1Q2JLPvIaqUoTWFXQbbNds{XBJ;3H$3n4UIWQ%!* zIbDO?Npp~xqy$+jx z0_nb$5E8B2zTSmTH6xP^^O^qMVj%jY1JU;({U!ODw#J6~>7x@;ues`SClJSL(ea3% z;lnV0Kd|r`>IWQ{e-P<8zh2mL+_n*Z3aL`&BPehrtWAZTqn!r6;@rybGIaVw4tzh1 z^m%NQpAGJjUF~{rHf(8)^7k0Xe#C+7Q%Lu9Wahb%KC|ch1giJrmp+ysz-6mVeiW#D zwMmJM_8F27f-`y6hj0;+596{S`7t2zjVsP;BYuYIDPZ83KH|Xi`MM$FaQ^apVAg+kt!o5uqzm0TK#P8sj6!8Vhm)j$vQ^D|h{8v~B znB!{7i33$5wmG>X;$s@D83t3Q(GHPy;_pHZF8>!vF34%tiNA+*lK=PdOY;8#uFno$ ze#bYVv4FQrdDiGOT} z{$+>gehSAxs?4w}PoSz#06yk6X_%qzwJmAlfP9E?V z_$4)b4Od|`Y#x9bB+dD$;V&T$SHoZ7-lm4HBc0Un*Z3th{0*)WYA8`3I$j6q4Vy(B zJ3lr2EyUq!_&eO&)bRI6CpCNnzodqLz~x$;`|ftNt_A%@@DTp4coyp<4y=Y~|+% z{@)JZ|095NmFJwsG|wULkNigycK269)*PuG??*HpR`z?W%GD~+q zmQT$twAl*I1NJO{vH8Seq?1o@)qXPPyD2<3$US%EarKfjS<*h{OxD>BkO02hL@_ku7a*eiTxHn!3fcQ_X>AVa#whHxfq*H~;&E<_}$@E5xKxORY zk>?7BJS&Af6&fg-%V!|f7`4AvqmlM`z7jz3pEA%@4uP%~0`XSRJPni<$ZDYZ$+OBK z&ox3G{ss3QJdx>e<{9hRZ6=RYyIY7RZ|LvR%lof~GS#&X(XO+Y%DY2EDbdQ(VvR$_n}m!v<5zyOK9aKm8HM#88cwH!dgt_9w>{IT zAqF=%wQ2p`^{~@zOgHK^1cKzNA3aul1Vl#}Q7-C}#v6ExL)2S^sN9@S4OCQ%MTdh5 zC0*-~^fneN? z!X31KZ+;r-7NG?AVp6uca)}HPL@#pn!`fA)NaPY5&k&z0oh(F%Jo=$BxJlXCXkCtu< zhVg}2YZOP5c*x93>GYDmx;}vRqX7x^!U*szl4U zgU|ZLd~}imMDlh;lI^x-jnsst@MYd%Fd-G?CP54@PI5=>W_XK14^wH39_64ySBXMe zKxR1En;CK!PvvzH8gI9oQJRpFixZ0T5}{QVMB|-W9W`>=nKwz1G*bQCL~NxbrpItD zjax#)>oR223lOc#1ubnN@=iAiEguoM-bNr8tu@2eRIL+j%1cU>Afn3z(ftqJkSedV zg9$HWy+UP$8_vqL<9DTsDL+ZilganQcp}10Gu{(>0j^f$NIs|;YSr=)fz^pv2?16S zZq5|YT7<}6AjncY=$aG>RSC&((JNVYEDe|1MckCx+}4Zotl+v_kdZTJx2B3K>&PtJ zw3L>70y0diXCxA`{-h^k?fP-F9y97smWvl=pY@EwEEg4)mHrVG@|Ldjl`AKisOYsq zT`VY3`{oj%$xT6damS2z~{qfcG7bLMlKL-`MTA~q2iT>B8V5G_?nTeFFtp)!8 z$3ahFZ?%kS+Q>;nWGyQn8Nr9LjuI`hVKkNv0gM7fbJ&wb@YYWawO z{Osxvk{3GTv+F8CWMy@t<%x$OZxb~yjRgsPr8C9I92w;pimV~x(&?BucMahvKs?o` zq>Ok=53?zcNCL@FP}X@#VjNwTQRf*siMxeJV>axhiEL1slQ@HM%1K0IO_PcqOSzkp zB$X9pq+`)D73Y=VSXw^9acMeuYY93-!N~2FPj5Oek+@JK$HTEGj7se$qcBzcJQo$a zs-F<{w>_S0G~;OzjG4$0;-vR03)5$Wie6_c8lJ-33JnLZb23+1f~j`5g{Bv1opT7i z=X1r-_htK|{j+n;M!nH(p57HsH(KG;l0CI%6rM+4{pN{q>YVXTFFc2av^ROC2Wlsy zXzF-i>@w~vW#16ox97@iqmE$|8buKL#F&D<^>l#9kxtYfsO-;Au<`IiyT>sV5uq(Q zb^KnBSP3iAAdQa%5L4_Ez9hEH9Uc;Kris{7uI`(%(`#Y-j^IQi>OtGx-c+Lfei`OBQ_>ujAroxJMEnFWi;8)rM)4Rsq|%|?YYwj+87@_rwgCB zbQe_7pg^*AYpgdJdq_QE8+_;Gb)`;dSEGaJ%68}U*`RjrXs_Arb;8B<=!i!&_kb7g z5h!WsUD%=FEkVGd?y0bZx;JTuoaa^C*(kMmDzqp@15rY*9U7hz1T2aP%lP3Y?ab}m zib1Kxq0M775GCZ=q2Vb(z@nJxP8pBUj)2as7?fH(-LZI#2BL&qJ2X5c2v`);=$288 zb|P_Z#h}#UM%SVk4MYjKc4&A?5U?ob(OMbBXb0rxRt!olezay$j0U2FTst&8B?wp) zbG%(fG1_^pxfO#_i;uT0iqSxnkZXsArvw3uV&?edcwP}VX~&1=Ep;|ZEuL#y6r+JC zA=eHKPYD9|r<)M*L82v`W~=7}QfJF*X}{o-_~#)%pb}z^n%GLvu=r4?S3*ylv{M#y z`w&Vk?({4^q=6_Q*A5L&2?7?ybW44}wL|}MD+Z+&cWobV4MYjKc4&A?5IB(bWpO%Q z3Aee&cd#CM#>rf`)~G*E7Cl$|aWoIG5(4j*jFM^c5>%XOE7SN9YU78a<@GF~w(f*b zTi2;J4y=U0LTwyl2`Y!vM$PKz`p=o%uJr{Ct@(@ZFNDWf0;2ivmJA?Sy#HRZm~@Uo-7@2 z$pDg7&SD!4K{5Sq(@+#EYq5DGKas^jiU`}-(6&2gc^7P53!vr%O!`<`q#Sw(H0+g*3x5vHAD z>fUZ*DOTKqM;oXrtmy69Fje8=mNzK_PnM>)WB|!3XL*w}1jY2bO+!(vti?9kSXp7^ zZr4W23KzH7CIe5Fj<;k0$tq{DjfS9@ez$2Tij}pDe~Upi_9hqB@MwBqt}u;5>H61) zEKBA0`XFT$whV)(u@qDMjx?TP1e})Rql1ODE-c5#1`E@0TF#9uOZmcbZb(^$otEQR ziYZ=Lj^imt;9M*o>S9^maw81+;v`C%*2Y|J3n{+KG1P4h5nd}^p=4bfj}A*>fiF*p zCW*HuiOH%@J-~@jj^xN@#_ev(QHBCH7+-L*$B$|e%W*^-q1upxgAomD7ldHgqhW~+ zt0Ng!y^IWLrTlggk{A^kn@V|avWlQDEWRztW4xt&az+QLWpssoGG(}Zo3H8u4;GEB z@oy(q1O08;7!Wzkd zG9F7$l|dNd+{{~2uc!(nU?*$J;2oB05AWC9tfkUX>JTjy4$<#O`%=VJJt{+*%)l>^ z&Z4@A+a}3P#JlAym3}3ZA4~Q;TuZ(Zwr6se4a>VOvu6co-D%*@$}2T%4=WOza&1d# zR#gz0J^<7I#1p^GBIg;b;<2Bq$$|P(8bBv=_|<3jPxbrukC?P zGV~^XDx;k?xy_Ri&m`-Uj4Za!gODZ(Q37U#N`)LDQGU{roaUigTT{4`urEc)EJQkz zVS#Salq=(fv_&<^7t;3Z&JRNuF6$=2cQMB}$UyDpQgqSecScf{BvklfBB5_^C#P6ojFI zW+;^%4QYo16;Vx0r+++>qBfyXE20-hEqS%9)GpFeRb8W{7E;KAIAM4!YCb5Pw!BIN zrM^-Wz4A)Y=o^Qyo$zzbra`YaBq+}Tr|!G?R#V@<;msMY0(c)o+RxHT&e==yGt+yXm`5D*^7HbvDxFS1oeX8->s-Vh(>&Z&@K# z3|W1o5U@n8pjDY#9kk>$gI!3RIkQ`Nzx{3Yh$c?0QB=w)TToFS)KXeDiP&E}kJ$wg zkJ_R+C9uO))tIM4@%^)L6cvZs)F(NUibrkvpeQ1CwdF%{zsH$8P~;|cRQV`Uq6qA;;I2c7X YB)ppqs*)2$k5su<>cv*_TtV&s0Cn_qQ~&?~ literal 0 HcmV?d00001 diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.csproj.AssemblyReference.cache b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..699e530fd1b236aee54d30e94ef90f5c38817293 GIT binary patch literal 90769 zcmeHQ378bc_1{5|&7#~!Jb*<((hbzCGAi zz5VL<-m6#ds5;v7R8dipXKvMqK&>J-C_=pS+-OWp2Ewu`iE1Drgcc{@c$#`63*cbjxWK0|CRNgV)Rb;jGn)= z%WEYgJatx92bIncm1I(@-?tU*`7>FY+`n0B}Y$nG#~>2+3&3n+Dy0a=@wQ z>rkEu{8`C8$7EjA_{mHb1zwMsM|RijN}5^V3eiyN~Q)=JK=6`l*wTA2oXsoG3uZzW?5R z!;93m$5q_+!E9bEkU)xQzWDthQ!@%58meDArBz6zD?-q?H0vgtRU^m*Us z`yc=GTirhR?HK=vp6%Xx{FQ-~&!s)x=P&H`pBDzdGu1QI%xE6ag+jxEK7S+<3J(c~ z!{t8RzcBf^3u!}FCC6f7NJS2L5;?h2D5WT(M5yAiwGZh?_S6})A3+n?!rHUX9HSxWRVH z3?ul3*-n{(Z$>yTVyVn^2{9BEV$lo4FaVwWbyT<7y=>%~7{V{oLhFn(f_gqnsBQGP zYc`ksLOMO0Sw=8Q^kIxAWC?jzljX1&^Nx`uSrsx~mw_tmWBVA4I*sBNj8DXw4 z#(b=x3bwef`Lg-VOk$v)J@1y09u(;}eH=yz^8WAEecWbg!-`(bBi6pVs`A;Md)jOh zA1>{=VD?Y0+j+IvYvqkkj_!WkXZMf3tBY?-hgbc({UCB zivDuDtrcthtDBJeqilj09+Pa52(N78s|)qT+5vydNPczS0e=hsfIrocWt_48+r_0J zkyL6g`Y?!J)I+&gX9ReHG2rzr2@!=25J>r6UM#$64 zCff60xOA}LKF*esUvy{L^2-QMfxae7k!V9oNxSHvx{w_1Zm>rX(saxUD+W5#j$HuL zwIAjt^hrHCfoyP6whwmV?1WCjuR7xFgw7~HN7aRzMPCn5t(9R-i|4BP%Gtq?M@4k2 zb)AVl6W&3kw;vB)5SVeo(Dzn(YKW)847nHXVZ(&-PNNZa~s+Zy1oZ2bwJgMEgCxIl~4-dn%(DqMjHW8x#yUzznH`;GJ-GgFaz3M4_MI&E+tQbr+z*Hu7An&GdN2cu> zlRRiG3wl}o1SukeazpdOsm45NvAVQpW<+|1_zyPM4{y}kq+7Es4ZNK6uoHQ4eK zoyqxyd9E|ljNqle4=`+a(p#sZ=A(M#j}ev}5(dUTz;*<`ARGGkp zo@SX5u+%H{NG~m|-B#BeihgjVp2HA+LB^GO4vaH`nyF`|K^>KdUG}4WTJ&AEooA+# z^9!+^XQngF2;K$9qK+;W&l6rC) zBUCRCyIClA#mQ-cj9(maa++Y45scI~G2>!#Q0p+tR6|t>F;NN&WV6j_Z$!GD5f7Z-Ba4sZ)@?rJ(*IAQx| z@|jc@<#p71I4m!(WlVM5H?#%zinxcvagf{HWA4etJrj<93MSb7{>{Y%Q%`tV7&t$g z(B>G#7Bbj4;blL9p4{RDll|X;d3C>uaxt&eI}$8!Z%8Y|n{h{inUdZ-;tl}w^BK(_ z_3{ez)`YT;32BLTR6MOJatwqM4oAV|6|D?&JF`E$&=EF?tuUVt>@LDd)VDfj7RD;* z7&&uA4d@Tv>NpJH7jC@OabTPg)YP{+=GV6i>qFTb-s(7w;TLSY)p6pS5!x)gW5S-# z6x2{7Sz-}uaM4gsQ{V2?}C}eZ9>Heo-dk3^sf-!a2Y| zlQVB`thV4vbpkm~)9{PsGz+JU&||R&nl8l!2`#SSj6tqb6;X&ohy&0h_CU5{_(hl4 z1KD!U2<;gRbk)#ONZJ0#kX?QeoMiCG2&*t{tR_XJ#op>AIGsayN05L$Ugye6%P)@S zJ8;YhRq7kmG*Yz!y5%N@PJuL(5srky8&ne^zj)#es)=1jU{X)9q+fb!N>o~$&eFyy z7BeNkaN?AYnO{bDQa>vq{nmy~LcSayHlzKXU+nPN6&ja}5IdjtBAIbn!H$AcbF98l zWGHB&R#?@cwI)9Ez|BovDD`EqMpV7yRW;!~FG(I-1SP(B88i{{iy~eIP3$rPlX?We zcxl6Q!tql$0)S~~LReV!pEv@5In4t-HwB;6_Zj$ov%8LA=a2UpR$7{97M5AX`wT0` zd7$dXz%tRv$wHLaVt{QWbyB0@7e!JhHBK3!M?LeUNnMQ)7pI9R|CQ2i2>=%d>fvza zE1Q}oqJ?E;apo(V=RB}=V{fVFMbd9Bs?D;pNGmMTI-MNw#d#6?5&U9|^CI?qGs2mP z1+F!_lLpx?lev!nX9W%d-@MNNmQ&Z$s zX!hEu(eR5Qsf`+^jL@Ur5Uk1EG;wiCOp+&)f-d5QV3Lks6mdf^$?Xpb$vP2TG8$Eh z3!Fh0NhC4de+QD7TSiDSi5t|3N>el>*2+=x##q>Cl5qo)mL{Tw8#f?1&I469aRcfN z`g`6lAmX*u*%ISseA@vu zu`Mix#qCD6Z07;88+Bz8B|?IUK{oQAGhTW|?>8c&L_o;Ptvaz~P72!#x?81i0KE9pR!^oBkFw6&Drl+L{?+2sMZiC9>cV8Cy^bEx#&g zq^>O-1FG&1u5f`W{ZK7_Z$lFy&}Sr0bQ-tnnEN~xBQ&Z%8D`794!AhxgZhSjN^l_( z{>-KF#)LtR7;o4KGJYi=Z`cWD0Y<7qPrVOkniz>89JNgF*l04Lb*Ec40Z>zg`*57b z@Cz{R!*SxA5!%!*Z6e;kIv!QM6DEz*E_`sT1i+UzwKk4l)bXWFt#Qu?dFrPMS$UWg zZD>@RMeQ?qp3vZfPZerq7{9pVQ-xY#o)PTS52?1YV64;tH9n-;Ldq|^_>gJ~!;B!M z9^fHgyVd(zae&8m0Kf3!0FN!(j6kM-r3dlylSNesYj-Uhx(i-5zS6^noL_+Pl^!-s zGlG|;4%-!bL0N*04#NO`A-2(BV4D%h)K73FmdA=({j4Q*ri1XssF{DO^7lyzjC z5#aM^M{x-T3|kEsV|LNwoIu4dr1e?6GQyC0Xjkie(5^5}qPjmV?G39g#6fUq*GkJT zo;b8?<(Ltw3`{Ygn)z;W`sf(~-n9ps_0$=dVuwNe;tZzPfptcJGgRZu{idMCu;gZ| zafX&(c(c_w!!aXNlhhYj{i-ePwgGf-pQ0B!CcV?8q!1xaX#`t+8eWN7AIdN0QFjx- zNCea)CIT~}$&?VQ0!4?TZBEZM1^QTigTDR2W1u1MgoE1DYBV=tRgp-HF< zDbWOxgMw1={uZO~RykmrJtj8Jbp zz>AkvCcuT&gkbgL zfag50b<>JKy-FR6<|Nr1Nd*rbSE-vRX<}Mf%?G$j-OO(uc)IC2pdVDzz0aCf3T2I; znuV5MOpTzLg=0pjGK;7nuRIEOEoUx^M((<;J+?+voW}Btx;3KWGy{yJKw{;VoB1%G zk_m2jAB*dmJ&IrC!#R0pg!vKDd?>U4PYkLBTi1LT%P;<|Yd*{XBPpPt8`ak>vkuRS z6Gu3L!)D}0od)rXyOA4pVx1A-^o!4I88CKT(DY;!pVc7CzdRv{344JOBRM1K}y|&h1XVE5~|#w2#LlP@0eJFjLvy$Br%3n z4STS;#_|g~_F!|(03#`&?!nsgQ6)9lZD6nm>o|yC+_4Ai$odZ)@MHo2hulF9z>|sp zTELSDMu01{y=!}kt(HP^*mTl09KX>|_eEPD$uIPcuJ~t!|KcNq|CEF%)g_5I1;F38 zRrd9P{G#9BhJ8lhA0a0X0&QUQ;cDmBoje%JuL!j6l65uh{Pey10%Vh9?i60;Ega`b}Oyz0De)&(N$Zv8G%eaJ88T; zvRhIpnh;{%nNcY$H`_*WaCXvp6u)re?4&dAj4-EO8D_(QjaK8zuxx66F~*f)**r7C zmYvZ~vmn-KwSPpk1~%_F1!b^G4&WEzETc`b%?M=b=P4SP8EOm7@c2AMOyf42_`^Hi z6rb;iIR*6GCp2B0hDp8H50wLGS8QYsctj`a!Y=FLPM5zqXm7E{K!BJFgadt-SHc(cO>x?EcYrb@6TK@Tz~; z-xl;~7`&m!r@q^_Ja+8H_Gk8c^Wtst?oQv&UbE+q@uuMMb_RDrao2s44g0 zVm~X#d7$d|1tb2-@(LmBuNW%&%h8`fAD)sXO)mUpe&6sS5A~8<{k_oEfNv-DBx9fb}*D<1F-CN)4JB{HNYoNi4Cckpj0nOD9A5Hr=b(R@zl4M*||{JLui6q zSWdFZh010;52)RE%k=GVqk;}~(?U&Eje;bJF#=^!TEh-!QPTvtK<#iA&v{_$#tt`9 zx5LJpPiYdBn2<<_VOV7$8+a17Q#SN8@hvO`p4ST3c_8dYd+Be048-b%= zkn)Qy?#Hk&%m`BINh9L5)8-qNX6PNqNh2#Qzo6ozk(Facs4{e|GaS^)GGUTmXdBbD zHQTiYdVbN(cCCSHMhLSs#Zh#%C8#ZUST?3uBjp!Y8&j+?%m`BYaY@5}Hr7>eo{YF8 zCgK-HBQA+qWdtDoV3i`EQ?1iiGbX*0P`2zCF54=I3d3V|+zzH7ZY0 zVQB%rV+D9MW9avm4Jxfl#nhA{j*`TbiuTfjN^4WWSTrZv6KMN_pHVu0l7KQ;**TpGrAf zQBySS<1iGlu;MZJ0(-v8l8k+*zjpJI-`uBqh3|59n3W; zDlG=93F?NcsxggQ@N&BhxQZD+IiJ~b;Vw`QNNMkzxyZ|U4-hz8I3Q)ErMcJ?mc_yW zDJ#c-s_WIpP2^al?LKSojp}uY<4O%58p^49=xa|FF+HuA;jlnwSxMc!ReQ-71TyMNFn}yA|bT1%;fw6 zi|-7!nIlHk9`Y9K#&bjGcqH!Tw~4`ehYv#3pp9zQroND?9Gdmfsr_sDi2e(!d2 zHfr&)9KqWi%*xXc4FH@&dasUa3mhGZocC7N)S746m|mc{s&Zn4T8JDG?dna9Kg zUF-_!iLxZBNflkYC@4hfG&q?Zh~Im({0I)=YT}B&_x#ZFDm4U`fY=bP54B}e%Bajh zqC7o`?p6t0AcPu)fLBU2h-x4qgcfPty8)p&nG7%TA}JLEe(x}^udLELB!DC~fZk2} zUsT=h_xb{3X4ch>o#?GX{{yR4gLG7<<>~hP4#e+0TK)^?zz!3yz4K=uxc(KT>6vAf zsasDQan>{EZM|^QrayIA`p33&OvDF5XK zugc2u(2&ZCvSE?om10HNP;G9IG@IJ+UE(DMlR8{wUSGN28L;Ye>Hx2k{KYz6B|0bQ z*ZjgY8JJ{*mbOr|rd<(~L6%e@i4;)PI=uoF-b!y7MympSdv2Oyj6nfl?S5$cwEO<3 zoqf^SO5`~j$&Gec1pYV-i#WL7f2Ia5-#T*RT47J*rGsylEInh}2^T)G;=1B#-9EnM zY3D~1Itgv=zF)$GC? zz{R5>MNY~Q6FelA2N`DpKczt|CwyiXD;}zQ&ZunjLcl&kR zfOpI#gZDoEmIm(`ZU=ihVZ8OPhXH$GWeH+#rvSvkSFRadH}c>nZ_wge9?&TmBDy?M zYugOTQY6}tQUp!61L=q@R&DeHArnMHNfkK;q+vq0gQspyEBh%h6;8uwZsxxl(ZB7K zO>dmN``$hy)_-)-^81u$YdWm%c;bg^8aDmo>vwOOzjV~JyH5RZ^{yVCFW$bk*|NYR z=4Kuwz;%dR2nUA`8}6?hGCUj>(86nH5Y~GRTLQd7Fo`N(GG%mmiNhG;0U#SsE&W25 zjWcskkC%J~zk;G1;!H4-nhg}BCK8Q_U{vywn{&}42xDP{O!ju^-Zx`ad@kn8{1kp= zM?K`ZU?e@uC`ivjbkaj!GGjhRqPXffT~bbWF*~%6mnf`7Xrap)U?de+QILw1w&NE= z3JS91B^=tG2Av|PjfZt8_}k-k8S%Q9A>tAInv%tbHW7>@CO_XrTXzzQ+!PIKH}B@* zyJ+hLI^9oy0O@yt%;fT2oS(t3(AfJf&NIPCYJQfNoiR%dx&kYSPQ#D6G%{u$YxTh( zE%ldl)-B9HTg9>;&#$CNhcF9_q$EEdMU#?bOHvi%4KX z&B!#$Ni~mECLT{o+O=LNkz=#m{6YB5x0&T;Fieq2#;RnyC-5sOMBu~4Jg^d!OOL#u z*t#RXDZ53NkN<9W1gE7<6)itK;vk{SeNtQDs-=dgM3gJd*}7hb=`<%bHV@@je~JC0 zS%1wFz)Epf9BG-bb9i7=34-xIxAC=-5w>c4k?SqLwhSlm22T4SuQl0b8TMX!wXVOV z4*F{h;#YISxmahVvsWAeopp9QH3v(UKxM%t8vqlMYdF7BK}3pkO#&m4Psv8dxIc)twZ^2bA#=qoOD<@$VS?Qd1T1#ud zNn*2#DiyUl)^wrBa8xnr!!?Sy|3a%@tpP%FVMz11sefAks#d1j$wK4#k?tqpFNaZ$ zdQkY&=@-R1Ot?6>ZpeL|UwG*ZsqUh7Uw6+-m7iXG&l~-J|K$Vz9orr+zQ^ae{>kDKu6=S{|3@39u2*aByeV1z z(5=d>eaHWy>x+*)^1EMOHvZxlKmFHD%kEg;X-MbMkN51~<(xUY)U(?>ldeK6+dSnj zzq@tIe$O-ur+}U|f39jy{bfRUXhf_C4iPE@Q4DA1$XtW09az>Xcv`21H=+n}u~}9Y zB?IMNA5ndb;TxjCml}si&oxLv-^Q+)@sob(NO@-~k*6Jcs}4GPCFtv609aTpV$-dx z0)m-2L~Sm)4=i)jDYiD3Q!w&YXP^l=G<^vQ zKC0#t9HiA=qpgROhHP4Zeb~yCJ4;^IVDFkumTsfdu)`mRq3->>ZGZ93rz^hdbi?cW z*F4(em)qxDc~xW6+yiT`c(2dc#c!`#KBf1>8_zp!)#NtUh|5ud$vB^x$oyq`)};^$hhA7XYWqi>z}vV`p57I@_LM HHu(NOX&e-c literal 0 HcmV?d00001 diff --git a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.dgspec.json b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.dgspec.json new file mode 100644 index 000000000000..2868d507dce1 --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.dgspec.json @@ -0,0 +1,91 @@ +{ + "format": 1, + "restore": { + "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj": {} + }, + "projects": { + "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", + "projectName": "ElasticBlockStore", + "projectPath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", + "packagesPath": "C:\\Users\\zacha\\.nuget\\packages\\", + "outputPath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\zacha\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net7.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "AWSSDK.EBS": { + "target": "Package", + "version": "[3.7.100.153, )" + }, + "FluentAssertions": { + "target": "Package", + "version": "[6.8.0, )" + }, + "Microsoft.Extensions.Configuration.UserSecrets": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.1.0, )" + }, + "xunit": { + "target": "Package", + "version": "[2.4.1, )" + }, + "xunit.runner.visualstudio": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[2.4.3, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.400-preview.23225.8\\RuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.props b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.props new file mode 100644 index 000000000000..32db65dc5c7d --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.props @@ -0,0 +1,29 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\zacha\.nuget\packages\ + PackageReference + 6.7.0 + + + + + + + + + + + + + + C:\Users\zacha\.nuget\packages\xunit.analyzers\0.10.0 + C:\Users\zacha\.nuget\packages\newtonsoft.json\9.0.1 + C:\Users\zacha\.nuget\packages\awssdk.core\3.7.108.2 + C:\Users\zacha\.nuget\packages\awssdk.ebs\3.7.100.153 + + \ No newline at end of file diff --git a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.targets b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.targets new file mode 100644 index 000000000000..9c6720d4b52a --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.targets @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/other_langs/tests_dotnet/ebs/obj/project.assets.json b/other_langs/tests_dotnet/ebs/obj/project.assets.json new file mode 100644 index 000000000000..3eb32ec844d1 --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/project.assets.json @@ -0,0 +1,6936 @@ +{ + "version": 3, + "targets": { + "net7.0": { + "AWSSDK.Core/3.7.108.2": { + "type": "package", + "compile": { + "lib/netcoreapp3.1/AWSSDK.Core.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/netcoreapp3.1/AWSSDK.Core.dll": { + "related": ".pdb;.xml" + } + } + }, + "AWSSDK.EBS/3.7.100.153": { + "type": "package", + "dependencies": { + "AWSSDK.Core": "[3.7.108.2, 4.0.0)" + }, + "compile": { + "lib/netcoreapp3.1/AWSSDK.EBS.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/netcoreapp3.1/AWSSDK.EBS.dll": { + "related": ".pdb;.xml" + } + } + }, + "FluentAssertions/6.8.0": { + "type": "package", + "dependencies": { + "System.Configuration.ConfigurationManager": "4.4.0" + }, + "compile": { + "lib/net6.0/FluentAssertions.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/net6.0/FluentAssertions.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.CodeCoverage/17.1.0": { + "type": "package", + "compile": { + "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} + }, + "runtime": { + "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} + }, + "build": { + "build/netstandard1.0/Microsoft.CodeCoverage.props": {}, + "build/netstandard1.0/Microsoft.CodeCoverage.targets": {} + } + }, + "Microsoft.CSharp/4.0.1": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Dynamic.Runtime": "4.0.11", + "System.Globalization": "4.0.11", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Extensions": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.0/Microsoft.CSharp.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/Microsoft.CSharp.dll": {} + } + }, + "Microsoft.Extensions.Configuration/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "Microsoft.Extensions.FileProviders.Physical": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.Json/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration": "7.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "System.Text.Json": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Configuration.UserSecrets/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", + "Microsoft.Extensions.Configuration.Json": "7.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "Microsoft.Extensions.FileProviders.Physical": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.props": {}, + "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.targets": {} + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.FileProviders.Physical/7.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "7.0.0", + "Microsoft.Extensions.Primitives": "7.0.0" + }, + "compile": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Primitives/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/Microsoft.Extensions.Primitives.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.NET.Test.Sdk/17.1.0": { + "type": "package", + "dependencies": { + "Microsoft.CodeCoverage": "17.1.0", + "Microsoft.TestPlatform.TestHost": "17.1.0" + }, + "compile": { + "lib/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + }, + "build": { + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.props": {}, + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.targets": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/Microsoft.NET.Test.Sdk.props": {} + } + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.TestPlatform.ObjectModel/17.1.0": { + "type": "package", + "dependencies": { + "NuGet.Frameworks": "5.11.0", + "System.Reflection.Metadata": "1.6.0" + }, + "compile": { + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} + }, + "resource": { + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { + "locale": "zh-Hant" + } + } + }, + "Microsoft.TestPlatform.TestHost/17.1.0": { + "type": "package", + "dependencies": { + "Microsoft.TestPlatform.ObjectModel": "17.1.0", + "Newtonsoft.Json": "9.0.1" + }, + "compile": { + "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, + "lib/netcoreapp2.1/testhost.dll": { + "related": ".deps.json" + } + }, + "runtime": { + "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, + "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, + "lib/netcoreapp2.1/testhost.dll": { + "related": ".deps.json" + } + }, + "resource": { + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "cs" + }, + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "de" + }, + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "es" + }, + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "fr" + }, + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "it" + }, + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ja" + }, + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ko" + }, + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pl" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "pt-BR" + }, + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "ru" + }, + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "tr" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hans" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { + "locale": "zh-Hant" + }, + "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { + "locale": "zh-Hant" + } + }, + "build": { + "build/netcoreapp2.1/Microsoft.TestPlatform.TestHost.props": {} + } + }, + "Microsoft.Win32.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/Microsoft.Win32.Primitives.dll": { + "related": ".xml" + } + } + }, + "NETStandard.Library/1.6.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" + } + }, + "Newtonsoft.Json/9.0.1": { + "type": "package", + "dependencies": { + "Microsoft.CSharp": "4.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Dynamic.Runtime": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Extensions": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Text.Encoding": "4.0.11", + "System.Text.Encoding.Extensions": "4.0.11", + "System.Text.RegularExpressions": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11", + "System.Xml.ReaderWriter": "4.0.11", + "System.Xml.XDocument": "4.0.11" + }, + "compile": { + "lib/netstandard1.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.0/Newtonsoft.Json.dll": { + "related": ".xml" + } + } + }, + "NuGet.Frameworks/5.11.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/NuGet.Frameworks.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/NuGet.Frameworks.dll": { + "related": ".xml" + } + } + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/debian.8-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "debian.8-x64" + } + } + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/fedora.23-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "fedora.23-x64" + } + } + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/fedora.24-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "fedora.24-x64" + } + } + }, + "runtime.native.System/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.IO.Compression/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.Net.Http/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/opensuse.13.2-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "opensuse.13.2-x64" + } + } + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/opensuse.42.1-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "opensuse.42.1-x64" + } + } + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.Apple.dylib": { + "assetType": "native", + "rid": "osx.10.10-x64" + } + } + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib": { + "assetType": "native", + "rid": "osx.10.10-x64" + } + } + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/rhel.7-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "rhel.7-x64" + } + } + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/ubuntu.14.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "ubuntu.14.04-x64" + } + } + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/ubuntu.16.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "ubuntu.16.04-x64" + } + } + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "runtimeTargets": { + "runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { + "assetType": "native", + "rid": "ubuntu.16.10-x64" + } + } + }, + "System.AppContext/4.3.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/System.AppContext.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.6/System.AppContext.dll": {} + } + }, + "System.Buffers/4.3.0": { + "type": "package", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "compile": { + "lib/netstandard1.1/_._": {} + }, + "runtime": { + "lib/netstandard1.1/System.Buffers.dll": {} + } + }, + "System.Collections/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Collections.dll": { + "related": ".xml" + } + } + }, + "System.Collections.Concurrent/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Collections.Concurrent.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Collections.Concurrent.dll": {} + } + }, + "System.Configuration.ConfigurationManager/4.4.0": { + "type": "package", + "dependencies": { + "System.Security.Cryptography.ProtectedData": "4.4.0" + }, + "compile": { + "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": {} + } + }, + "System.Console/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Console.dll": { + "related": ".xml" + } + } + }, + "System.Diagnostics.Debug/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Diagnostics.Debug.dll": { + "related": ".xml" + } + } + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "compile": { + "lib/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": { + "related": ".xml" + } + } + }, + "System.Diagnostics.Tools/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.Diagnostics.Tools.dll": { + "related": ".xml" + } + } + }, + "System.Diagnostics.Tracing/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Diagnostics.Tracing.dll": { + "related": ".xml" + } + } + }, + "System.Dynamic.Runtime/4.0.11": { + "type": "package", + "dependencies": { + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.Linq": "4.1.0", + "System.Linq.Expressions": "4.1.0", + "System.ObjectModel": "4.0.12", + "System.Reflection": "4.1.0", + "System.Reflection.Emit": "4.0.1", + "System.Reflection.Emit.ILGeneration": "4.0.1", + "System.Reflection.Primitives": "4.0.1", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Dynamic.Runtime.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Dynamic.Runtime.dll": {} + } + }, + "System.Globalization/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Globalization.dll": { + "related": ".xml" + } + } + }, + "System.Globalization.Calendars/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Globalization.Calendars.dll": { + "related": ".xml" + } + } + }, + "System.Globalization.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.IO/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.IO.dll": { + "related": ".xml" + } + } + }, + "System.IO.Compression/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.IO.Compression.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.IO.Compression.ZipFile/4.3.0": { + "type": "package", + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.IO.Compression.ZipFile.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.IO.Compression.ZipFile.dll": {} + } + }, + "System.IO.FileSystem/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.IO.FileSystem.dll": { + "related": ".xml" + } + } + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {} + } + }, + "System.Linq/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/System.Linq.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.6/System.Linq.dll": {} + } + }, + "System.Linq.Expressions/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/System.Linq.Expressions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.6/System.Linq.Expressions.dll": {} + } + }, + "System.Net.Http/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Net.Http.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Net.Http.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Net.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Net.Primitives.dll": { + "related": ".xml" + } + } + }, + "System.Net.Sockets/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Net.Sockets.dll": { + "related": ".xml" + } + } + }, + "System.ObjectModel/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.ObjectModel.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.ObjectModel.dll": {} + } + }, + "System.Reflection/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Reflection.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Emit/4.3.0": { + "type": "package", + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.1/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.dll": {} + } + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "type": "package", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {} + } + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "type": "package", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {} + } + }, + "System.Reflection.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Metadata/1.6.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Reflection.Metadata.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.Reflection.Primitives.dll": { + "related": ".xml" + } + } + }, + "System.Reflection.TypeExtensions/4.3.0": { + "type": "package", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {} + } + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/System.Resources.ResourceManager.dll": { + "related": ".xml" + } + } + }, + "System.Runtime/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Runtime.Handles.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + }, + "compile": { + "ref/netcoreapp1.1/System.Runtime.InteropServices.dll": {} + } + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "type": "package", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + }, + "compile": { + "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {} + }, + "runtime": { + "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Runtime.Numerics/4.3.0": { + "type": "package", + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + }, + "compile": { + "ref/netstandard1.1/System.Runtime.Numerics.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Runtime.Numerics.dll": {} + } + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "type": "package", + "dependencies": { + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0" + }, + "compile": { + "ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": {} + } + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {} + }, + "runtimeTargets": { + "runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "assetType": "runtime", + "rid": "osx" + }, + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Cng/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Csp/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.6/_._": {} + }, + "runtime": { + "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": { + "assetType": "runtime", + "rid": "unix" + } + } + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} + }, + "runtime": { + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} + } + }, + "System.Security.Cryptography.ProtectedData/4.4.0": { + "type": "package", + "compile": { + "ref/netstandard2.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": {} + }, + "runtimeTargets": { + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + }, + "compile": { + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": { + "related": ".xml" + } + } + }, + "System.Text.Encoding.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.Text.Encodings.Web/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Text.Encodings.Web.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + }, + "runtimeTargets": { + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll": { + "assetType": "runtime", + "rid": "browser" + } + } + }, + "System.Text.Json/7.0.0": { + "type": "package", + "dependencies": { + "System.Text.Encodings.Web": "7.0.0" + }, + "compile": { + "lib/net7.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Text.Json.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/System.Text.Json.targets": {} + } + }, + "System.Text.RegularExpressions/4.3.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netcoreapp1.1/System.Text.RegularExpressions.dll": {} + }, + "runtime": { + "lib/netstandard1.6/System.Text.RegularExpressions.dll": {} + } + }, + "System.Threading/4.3.0": { + "type": "package", + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": {} + } + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Threading.Tasks.dll": { + "related": ".xml" + } + } + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "lib/netstandard1.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": { + "related": ".xml" + } + } + }, + "System.Threading.Timer/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.2/System.Threading.Timer.dll": { + "related": ".xml" + } + } + }, + "System.Xml.ReaderWriter/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Xml.ReaderWriter.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Xml.ReaderWriter.dll": {} + } + }, + "System.Xml.XDocument/4.3.0": { + "type": "package", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Xml.XDocument.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Xml.XDocument.dll": {} + } + }, + "xunit/2.4.1": { + "type": "package", + "dependencies": { + "xunit.analyzers": "0.10.0", + "xunit.assert": "[2.4.1]", + "xunit.core": "[2.4.1]" + } + }, + "xunit.abstractions/2.0.3": { + "type": "package", + "compile": { + "lib/netstandard2.0/xunit.abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/xunit.abstractions.dll": { + "related": ".xml" + } + } + }, + "xunit.analyzers/0.10.0": { + "type": "package" + }, + "xunit.assert/2.4.1": { + "type": "package", + "dependencies": { + "NETStandard.Library": "1.6.1" + }, + "compile": { + "lib/netstandard1.1/xunit.assert.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.1/xunit.assert.dll": { + "related": ".xml" + } + } + }, + "xunit.core/2.4.1": { + "type": "package", + "dependencies": { + "xunit.extensibility.core": "[2.4.1]", + "xunit.extensibility.execution": "[2.4.1]" + }, + "build": { + "build/xunit.core.props": {}, + "build/xunit.core.targets": {} + }, + "buildMultiTargeting": { + "buildMultiTargeting/xunit.core.props": {}, + "buildMultiTargeting/xunit.core.targets": {} + } + }, + "xunit.extensibility.core/2.4.1": { + "type": "package", + "dependencies": { + "NETStandard.Library": "1.6.1", + "xunit.abstractions": "2.0.3" + }, + "compile": { + "lib/netstandard1.1/xunit.core.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.1/xunit.core.dll": { + "related": ".xml" + } + } + }, + "xunit.extensibility.execution/2.4.1": { + "type": "package", + "dependencies": { + "NETStandard.Library": "1.6.1", + "xunit.extensibility.core": "[2.4.1]" + }, + "compile": { + "lib/netstandard1.1/xunit.execution.dotnet.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.1/xunit.execution.dotnet.dll": { + "related": ".xml" + } + } + }, + "xunit.runner.visualstudio/2.4.3": { + "type": "package", + "build": { + "build/netcoreapp2.1/xunit.runner.visualstudio.props": {} + } + } + } + }, + "libraries": { + "AWSSDK.Core/3.7.108.2": { + "sha512": "agsi5uUw93uzMpq7jdc0xx0C28KIZh4KpRG2rg+iCjb8AVdG4sFUid/bPDv7LwahX2oRN+nlTViDOQM7K2EZ8g==", + "type": "package", + "path": "awssdk.core/3.7.108.2", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "awssdk.core.3.7.108.2.nupkg.sha512", + "awssdk.core.nuspec", + "images/AWSLogo.png", + "lib/net35/AWSSDK.Core.dll", + "lib/net35/AWSSDK.Core.pdb", + "lib/net35/AWSSDK.Core.xml", + "lib/net45/AWSSDK.Core.dll", + "lib/net45/AWSSDK.Core.pdb", + "lib/net45/AWSSDK.Core.xml", + "lib/netcoreapp3.1/AWSSDK.Core.dll", + "lib/netcoreapp3.1/AWSSDK.Core.pdb", + "lib/netcoreapp3.1/AWSSDK.Core.xml", + "lib/netstandard2.0/AWSSDK.Core.dll", + "lib/netstandard2.0/AWSSDK.Core.pdb", + "lib/netstandard2.0/AWSSDK.Core.xml", + "tools/account-management.ps1" + ] + }, + "AWSSDK.EBS/3.7.100.153": { + "sha512": "lTyw0ZKeaCUPV/HMxX4VDk8JuRbKIqLudJPDgeiqx9GF6TrCwtLv9hVtPKeGzH/BRKfpbLyarj1syHKyAx1kuw==", + "type": "package", + "path": "awssdk.ebs/3.7.100.153", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "analyzers/dotnet/cs/AWSSDK.EBS.CodeAnalysis.dll", + "awssdk.ebs.3.7.100.153.nupkg.sha512", + "awssdk.ebs.nuspec", + "images/AWSLogo.png", + "lib/net35/AWSSDK.EBS.dll", + "lib/net35/AWSSDK.EBS.pdb", + "lib/net35/AWSSDK.EBS.xml", + "lib/net45/AWSSDK.EBS.dll", + "lib/net45/AWSSDK.EBS.pdb", + "lib/net45/AWSSDK.EBS.xml", + "lib/netcoreapp3.1/AWSSDK.EBS.dll", + "lib/netcoreapp3.1/AWSSDK.EBS.pdb", + "lib/netcoreapp3.1/AWSSDK.EBS.xml", + "lib/netstandard2.0/AWSSDK.EBS.dll", + "lib/netstandard2.0/AWSSDK.EBS.pdb", + "lib/netstandard2.0/AWSSDK.EBS.xml", + "tools/install.ps1", + "tools/uninstall.ps1" + ] + }, + "FluentAssertions/6.8.0": { + "sha512": "NfSlAG97wMxS48Ov+wQEhJITdn4bKrgtKrG4sCPrFBVKozpC57lQ2vzsPdxUOsPbfEgEQTMtvCDECxIlDBfgNA==", + "type": "package", + "path": "fluentassertions/6.8.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "FluentAssertions.png", + "fluentassertions.6.8.0.nupkg.sha512", + "fluentassertions.nuspec", + "lib/net47/FluentAssertions.dll", + "lib/net47/FluentAssertions.pdb", + "lib/net47/FluentAssertions.xml", + "lib/net6.0/FluentAssertions.dll", + "lib/net6.0/FluentAssertions.pdb", + "lib/net6.0/FluentAssertions.xml", + "lib/netcoreapp2.1/FluentAssertions.dll", + "lib/netcoreapp2.1/FluentAssertions.pdb", + "lib/netcoreapp2.1/FluentAssertions.xml", + "lib/netcoreapp3.0/FluentAssertions.dll", + "lib/netcoreapp3.0/FluentAssertions.pdb", + "lib/netcoreapp3.0/FluentAssertions.xml", + "lib/netstandard2.0/FluentAssertions.dll", + "lib/netstandard2.0/FluentAssertions.pdb", + "lib/netstandard2.0/FluentAssertions.xml", + "lib/netstandard2.1/FluentAssertions.dll", + "lib/netstandard2.1/FluentAssertions.pdb", + "lib/netstandard2.1/FluentAssertions.xml" + ] + }, + "Microsoft.CodeCoverage/17.1.0": { + "sha512": "0N/ZJ71ncCxQWhgtkEYKOgu2oMHa8h1tsOUbhmIKXF8UwtSUCe4vHAsJ3DVcNWRwNfQzSTy263ZE+QF6MdIhhQ==", + "type": "package", + "path": "microsoft.codecoverage/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "ThirdPartyNotices.txt", + "build/netstandard1.0/CodeCoverage/CodeCoverage.config", + "build/netstandard1.0/CodeCoverage/CodeCoverage.exe", + "build/netstandard1.0/CodeCoverage/VanguardInstrumentationProfiler_x86.config", + "build/netstandard1.0/CodeCoverage/amd64/CodeCoverage.exe", + "build/netstandard1.0/CodeCoverage/amd64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard1.0/CodeCoverage/amd64/covrun64.dll", + "build/netstandard1.0/CodeCoverage/amd64/msdia140.dll", + "build/netstandard1.0/CodeCoverage/amd64/msvcdis140.dll", + "build/netstandard1.0/CodeCoverage/amd64/msvcp140.dll", + "build/netstandard1.0/CodeCoverage/amd64/msvcp140_atomic_wait.dll", + "build/netstandard1.0/CodeCoverage/amd64/vcruntime140.dll", + "build/netstandard1.0/CodeCoverage/amd64/vcruntime140_1.dll", + "build/netstandard1.0/CodeCoverage/codecoveragemessages.dll", + "build/netstandard1.0/CodeCoverage/coreclr/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "build/netstandard1.0/CodeCoverage/covrun32.dll", + "build/netstandard1.0/CodeCoverage/msdia140.dll", + "build/netstandard1.0/CodeCoverage/msvcdis140.dll", + "build/netstandard1.0/CodeCoverage/msvcp140.dll", + "build/netstandard1.0/CodeCoverage/msvcp140_atomic_wait.dll", + "build/netstandard1.0/CodeCoverage/vcruntime140.dll", + "build/netstandard1.0/InstrumentationEngine/alpine/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard1.0/InstrumentationEngine/alpine/x64/libCoverageInstrumentationMethod.so", + "build/netstandard1.0/InstrumentationEngine/alpine/x64/libInstrumentationEngine.so", + "build/netstandard1.0/InstrumentationEngine/macos/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard1.0/InstrumentationEngine/macos/x64/libCoverageInstrumentationMethod.dylib", + "build/netstandard1.0/InstrumentationEngine/macos/x64/libInstrumentationEngine.dylib", + "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/VanguardInstrumentationProfiler_x64.config", + "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/libCoverageInstrumentationMethod.so", + "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/libInstrumentationEngine.so", + "build/netstandard1.0/InstrumentationEngine/x64/MicrosoftInstrumentationEngine_x64.dll", + "build/netstandard1.0/InstrumentationEngine/x86/MicrosoftInstrumentationEngine_x86.dll", + "build/netstandard1.0/Microsoft.CodeCoverage.props", + "build/netstandard1.0/Microsoft.CodeCoverage.targets", + "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Core.dll", + "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Instrumentation.dll", + "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Interprocess.dll", + "build/netstandard1.0/Microsoft.VisualStudio.TraceDataCollector.dll", + "build/netstandard1.0/Mono.Cecil.Pdb.dll", + "build/netstandard1.0/Mono.Cecil.dll", + "build/netstandard1.0/ThirdPartyNotices.txt", + "build/netstandard1.0/cs/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/de/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/es/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/fr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/it/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/ja/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/ko/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/pl/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/pt-BR/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/ru/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/tr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/zh-Hans/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "build/netstandard1.0/zh-Hant/Microsoft.VisualStudio.TraceDataCollector.resources.dll", + "lib/net45/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll", + "microsoft.codecoverage.17.1.0.nupkg.sha512", + "microsoft.codecoverage.nuspec" + ] + }, + "Microsoft.CSharp/4.0.1": { + "sha512": "17h8b5mXa87XYKrrVqdgZ38JefSUqLChUQpXgSnpzsM0nDOhE40FTeNWOJ/YmySGV6tG6T8+hjz6vxbknHJr6A==", + "type": "package", + "path": "microsoft.csharp/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/Microsoft.CSharp.dll", + "lib/netstandard1.3/Microsoft.CSharp.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "microsoft.csharp.4.0.1.nupkg.sha512", + "microsoft.csharp.nuspec", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/Microsoft.CSharp.dll", + "ref/netcore50/Microsoft.CSharp.xml", + "ref/netcore50/de/Microsoft.CSharp.xml", + "ref/netcore50/es/Microsoft.CSharp.xml", + "ref/netcore50/fr/Microsoft.CSharp.xml", + "ref/netcore50/it/Microsoft.CSharp.xml", + "ref/netcore50/ja/Microsoft.CSharp.xml", + "ref/netcore50/ko/Microsoft.CSharp.xml", + "ref/netcore50/ru/Microsoft.CSharp.xml", + "ref/netcore50/zh-hans/Microsoft.CSharp.xml", + "ref/netcore50/zh-hant/Microsoft.CSharp.xml", + "ref/netstandard1.0/Microsoft.CSharp.dll", + "ref/netstandard1.0/Microsoft.CSharp.xml", + "ref/netstandard1.0/de/Microsoft.CSharp.xml", + "ref/netstandard1.0/es/Microsoft.CSharp.xml", + "ref/netstandard1.0/fr/Microsoft.CSharp.xml", + "ref/netstandard1.0/it/Microsoft.CSharp.xml", + "ref/netstandard1.0/ja/Microsoft.CSharp.xml", + "ref/netstandard1.0/ko/Microsoft.CSharp.xml", + "ref/netstandard1.0/ru/Microsoft.CSharp.xml", + "ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml", + "ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "Microsoft.Extensions.Configuration/7.0.0": { + "sha512": "tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==", + "type": "package", + "path": "microsoft.extensions.configuration/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.targets", + "lib/net462/Microsoft.Extensions.Configuration.dll", + "lib/net462/Microsoft.Extensions.Configuration.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.xml", + "microsoft.extensions.configuration.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { + "sha512": "f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==", + "type": "package", + "path": "microsoft.extensions.configuration.abstractions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", + "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { + "sha512": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==", + "type": "package", + "path": "microsoft.extensions.configuration.fileextensions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.FileExtensions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.FileExtensions.targets", + "lib/net462/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net462/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.xml", + "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.fileextensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.Json/7.0.0": { + "sha512": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==", + "type": "package", + "path": "microsoft.extensions.configuration.json/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.Json.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Json.targets", + "lib/net462/Microsoft.Extensions.Configuration.Json.dll", + "lib/net462/Microsoft.Extensions.Configuration.Json.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.xml", + "lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll", + "lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.xml", + "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Configuration.UserSecrets/7.0.0": { + "sha512": "33HPW1PmB2RS0ietBQyvOxjp4O3wlt+4tIs8KPyMn1kqp04goiZGa7+3mc69NRLv6bphkLDy0YR7Uw3aZyf8Zw==", + "type": "package", + "path": "microsoft.extensions.configuration.usersecrets/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Configuration.UserSecrets.targets", + "buildTransitive/net462/Microsoft.Extensions.Configuration.UserSecrets.props", + "buildTransitive/net462/Microsoft.Extensions.Configuration.UserSecrets.targets", + "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.props", + "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.targets", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.UserSecrets.targets", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.props", + "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.targets", + "lib/net462/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/net462/Microsoft.Extensions.Configuration.UserSecrets.xml", + "lib/net6.0/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/net6.0/Microsoft.Extensions.Configuration.UserSecrets.xml", + "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.xml", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.dll", + "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.xml", + "microsoft.extensions.configuration.usersecrets.7.0.0.nupkg.sha512", + "microsoft.extensions.configuration.usersecrets.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { + "sha512": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==", + "type": "package", + "path": "microsoft.extensions.fileproviders.abstractions/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileProviders.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Abstractions.targets", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512", + "microsoft.extensions.fileproviders.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileProviders.Physical/7.0.0": { + "sha512": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==", + "type": "package", + "path": "microsoft.extensions.fileproviders.physical/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileProviders.Physical.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Physical.targets", + "lib/net462/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net462/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/net6.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net6.0/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.xml", + "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512", + "microsoft.extensions.fileproviders.physical.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { + "sha512": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==", + "type": "package", + "path": "microsoft.extensions.filesystemglobbing/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileSystemGlobbing.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileSystemGlobbing.targets", + "lib/net462/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net462/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.xml", + "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512", + "microsoft.extensions.filesystemglobbing.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Primitives/7.0.0": { + "sha512": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==", + "type": "package", + "path": "microsoft.extensions.primitives/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", + "lib/net462/Microsoft.Extensions.Primitives.dll", + "lib/net462/Microsoft.Extensions.Primitives.xml", + "lib/net6.0/Microsoft.Extensions.Primitives.dll", + "lib/net6.0/Microsoft.Extensions.Primitives.xml", + "lib/net7.0/Microsoft.Extensions.Primitives.dll", + "lib/net7.0/Microsoft.Extensions.Primitives.xml", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", + "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", + "microsoft.extensions.primitives.7.0.0.nupkg.sha512", + "microsoft.extensions.primitives.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.NET.Test.Sdk/17.1.0": { + "sha512": "MVKvOsHIfrZrvg+8aqOF5dknO/qWrR1sWZjMPQ1N42MKMlL/zQL30FQFZxPeWfmVKWUWAOmAHYsqB5OerTKziw==", + "type": "package", + "path": "microsoft.net.test.sdk/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "build/net40/Microsoft.NET.Test.Sdk.props", + "build/net40/Microsoft.NET.Test.Sdk.targets", + "build/net45/Microsoft.NET.Test.Sdk.props", + "build/net45/Microsoft.NET.Test.Sdk.targets", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.cs", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.fs", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.vb", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.props", + "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.targets", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.cs", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.fs", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.vb", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.props", + "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.targets", + "build/uap10.0/Microsoft.NET.Test.Sdk.props", + "buildMultiTargeting/Microsoft.NET.Test.Sdk.props", + "lib/net40/_._", + "lib/net45/_._", + "lib/netcoreapp1.0/_._", + "lib/netcoreapp2.1/_._", + "lib/uap10.0/_._", + "microsoft.net.test.sdk.17.1.0.nupkg.sha512", + "microsoft.net.test.sdk.nuspec" + ] + }, + "Microsoft.NETCore.Platforms/1.1.0": { + "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", + "type": "package", + "path": "microsoft.netcore.platforms/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json" + ] + }, + "Microsoft.NETCore.Targets/1.1.0": { + "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.0.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Microsoft.TestPlatform.ObjectModel/17.1.0": { + "sha512": "OMo/FYnKGy3lZEK0gfitskRM3ga/YBt6MyCyFPq0xNLeybGOQ6HnYNAAvzyePo5WPuMiw3LX+HiuRWNjnas1fA==", + "type": "package", + "path": "microsoft.testplatform.objectmodel/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "lib/net45/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/net45/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/net45/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/net45/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net45/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/net451/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/net451/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/net451/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net451/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/net451/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netstandard1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netstandard1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netstandard1.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netstandard1.3/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netstandard1.3/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netstandard1.3/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard1.3/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard1.3/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netstandard2.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netstandard2.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netstandard2.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/uap10.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/uap10.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/uap10.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "lib/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "microsoft.testplatform.objectmodel.17.1.0.nupkg.sha512", + "microsoft.testplatform.objectmodel.nuspec" + ] + }, + "Microsoft.TestPlatform.TestHost/17.1.0": { + "sha512": "JS0JDLniDhIzkSPLHz7N/x1CG8ywJOtwInFDYA3KQvbz+ojGoT5MT2YDVReL1b86zmNRV8339vsTSm/zh0RcMg==", + "type": "package", + "path": "microsoft.testplatform.testhost/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE_NET.txt", + "ThirdPartyNotices.txt", + "build/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp1.0/Microsoft.TestPlatform.TestHost.props", + "build/netcoreapp1.0/x64/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp1.0/x64/testhost.dll", + "build/netcoreapp1.0/x64/testhost.exe", + "build/netcoreapp1.0/x86/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp1.0/x86/testhost.x86.dll", + "build/netcoreapp1.0/x86/testhost.x86.exe", + "build/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp2.1/Microsoft.TestPlatform.TestHost.props", + "build/netcoreapp2.1/x64/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp2.1/x64/testhost.dll", + "build/netcoreapp2.1/x64/testhost.exe", + "build/netcoreapp2.1/x86/Microsoft.TestPlatform.PlatformAbstractions.dll", + "build/netcoreapp2.1/x86/testhost.x86.dll", + "build/netcoreapp2.1/x86/testhost.x86.exe", + "build/uap10.0/Microsoft.TestPlatform.TestHost.props", + "build/uap10.0/Microsoft.TestPlatform.TestHost.targets", + "build/uap10.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/cs/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/de/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/es/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/fr/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/it/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/ja/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/ko/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/pl/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/pt-BR/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/ru/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/tr/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/x64/msdia140.dll", + "build/uap10.0/x86/msdia140.dll", + "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.TestPlatform.Utilities.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "build/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", + "lib/net45/_._", + "lib/netcoreapp1.0/Microsoft.TestPlatform.CommunicationUtilities.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.CrossPlatEngine.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp1.0/Microsoft.TestPlatform.Utilities.dll", + "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.Common.dll", + "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/testhost.deps.json", + "lib/netcoreapp1.0/testhost.dll", + "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/x64/msdia140.dll", + "lib/netcoreapp1.0/x86/msdia140.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll", + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll", + "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/testhost.deps.json", + "lib/netcoreapp2.1/testhost.dll", + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/x64/msdia140.dll", + "lib/netcoreapp2.1/x86/msdia140.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", + "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", + "lib/uap10.0/Microsoft.TestPlatform.CommunicationUtilities.dll", + "lib/uap10.0/Microsoft.TestPlatform.CoreUtilities.dll", + "lib/uap10.0/Microsoft.TestPlatform.CrossPlatEngine.dll", + "lib/uap10.0/Microsoft.TestPlatform.PlatformAbstractions.dll", + "lib/uap10.0/Microsoft.TestPlatform.Utilities.dll", + "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.Common.dll", + "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", + "lib/uap10.0/testhost.dll", + "microsoft.testplatform.testhost.17.1.0.nupkg.sha512", + "microsoft.testplatform.testhost.nuspec" + ] + }, + "Microsoft.Win32.Primitives/4.3.0": { + "sha512": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "type": "package", + "path": "microsoft.win32.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/Microsoft.Win32.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "microsoft.win32.primitives.4.3.0.nupkg.sha512", + "microsoft.win32.primitives.nuspec", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/Microsoft.Win32.Primitives.dll", + "ref/netstandard1.3/Microsoft.Win32.Primitives.dll", + "ref/netstandard1.3/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/de/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/es/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/fr/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/it/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ja/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ko/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/ru/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/zh-hans/Microsoft.Win32.Primitives.xml", + "ref/netstandard1.3/zh-hant/Microsoft.Win32.Primitives.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._" + ] + }, + "NETStandard.Library/1.6.1": { + "sha512": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", + "type": "package", + "path": "netstandard.library/1.6.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "netstandard.library.1.6.1.nupkg.sha512", + "netstandard.library.nuspec" + ] + }, + "Newtonsoft.Json/9.0.1": { + "sha512": "U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", + "type": "package", + "path": "newtonsoft.json/9.0.1", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net20/Newtonsoft.Json.dll", + "lib/net20/Newtonsoft.Json.xml", + "lib/net35/Newtonsoft.Json.dll", + "lib/net35/Newtonsoft.Json.xml", + "lib/net40/Newtonsoft.Json.dll", + "lib/net40/Newtonsoft.Json.xml", + "lib/net45/Newtonsoft.Json.dll", + "lib/net45/Newtonsoft.Json.xml", + "lib/netstandard1.0/Newtonsoft.Json.dll", + "lib/netstandard1.0/Newtonsoft.Json.xml", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll", + "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml", + "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll", + "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.xml", + "newtonsoft.json.9.0.1.nupkg.sha512", + "newtonsoft.json.nuspec", + "tools/install.ps1" + ] + }, + "NuGet.Frameworks/5.11.0": { + "sha512": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==", + "type": "package", + "path": "nuget.frameworks/5.11.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "icon.png", + "lib/net40/NuGet.Frameworks.dll", + "lib/net40/NuGet.Frameworks.xml", + "lib/net472/NuGet.Frameworks.dll", + "lib/net472/NuGet.Frameworks.xml", + "lib/netstandard2.0/NuGet.Frameworks.dll", + "lib/netstandard2.0/NuGet.Frameworks.xml", + "nuget.frameworks.5.11.0.nupkg.sha512", + "nuget.frameworks.nuspec" + ] + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==", + "type": "package", + "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/debian.8-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==", + "type": "package", + "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/fedora.23-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==", + "type": "package", + "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/fedora.24-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.native.System/4.3.0": { + "sha512": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "type": "package", + "path": "runtime.native.system/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.4.3.0.nupkg.sha512", + "runtime.native.system.nuspec" + ] + }, + "runtime.native.System.IO.Compression/4.3.0": { + "sha512": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "type": "package", + "path": "runtime.native.system.io.compression/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.io.compression.4.3.0.nupkg.sha512", + "runtime.native.system.io.compression.nuspec" + ] + }, + "runtime.native.System.Net.Http/4.3.0": { + "sha512": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "type": "package", + "path": "runtime.native.system.net.http/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.net.http.4.3.0.nupkg.sha512", + "runtime.native.system.net.http.nuspec" + ] + }, + "runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "sha512": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "type": "package", + "path": "runtime.native.system.security.cryptography.apple/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "runtime.native.system.security.cryptography.apple.nuspec" + ] + }, + "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", + "type": "package", + "path": "runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.native.system.security.cryptography.openssl.nuspec" + ] + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==", + "type": "package", + "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/opensuse.13.2-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==", + "type": "package", + "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/opensuse.42.1-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { + "sha512": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==", + "type": "package", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.nuspec", + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.Apple.dylib" + ] + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==", + "type": "package", + "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib" + ] + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==", + "type": "package", + "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/rhel.7-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==", + "type": "package", + "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/ubuntu.14.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==", + "type": "package", + "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/ubuntu.16.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==", + "type": "package", + "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.nuspec", + "runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so" + ] + }, + "System.AppContext/4.3.0": { + "sha512": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", + "type": "package", + "path": "system.appcontext/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.AppContext.dll", + "lib/net463/System.AppContext.dll", + "lib/netcore50/System.AppContext.dll", + "lib/netstandard1.6/System.AppContext.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.AppContext.dll", + "ref/net463/System.AppContext.dll", + "ref/netstandard/_._", + "ref/netstandard1.3/System.AppContext.dll", + "ref/netstandard1.3/System.AppContext.xml", + "ref/netstandard1.3/de/System.AppContext.xml", + "ref/netstandard1.3/es/System.AppContext.xml", + "ref/netstandard1.3/fr/System.AppContext.xml", + "ref/netstandard1.3/it/System.AppContext.xml", + "ref/netstandard1.3/ja/System.AppContext.xml", + "ref/netstandard1.3/ko/System.AppContext.xml", + "ref/netstandard1.3/ru/System.AppContext.xml", + "ref/netstandard1.3/zh-hans/System.AppContext.xml", + "ref/netstandard1.3/zh-hant/System.AppContext.xml", + "ref/netstandard1.6/System.AppContext.dll", + "ref/netstandard1.6/System.AppContext.xml", + "ref/netstandard1.6/de/System.AppContext.xml", + "ref/netstandard1.6/es/System.AppContext.xml", + "ref/netstandard1.6/fr/System.AppContext.xml", + "ref/netstandard1.6/it/System.AppContext.xml", + "ref/netstandard1.6/ja/System.AppContext.xml", + "ref/netstandard1.6/ko/System.AppContext.xml", + "ref/netstandard1.6/ru/System.AppContext.xml", + "ref/netstandard1.6/zh-hans/System.AppContext.xml", + "ref/netstandard1.6/zh-hant/System.AppContext.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.AppContext.dll", + "system.appcontext.4.3.0.nupkg.sha512", + "system.appcontext.nuspec" + ] + }, + "System.Buffers/4.3.0": { + "sha512": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", + "type": "package", + "path": "system.buffers/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.1/.xml", + "lib/netstandard1.1/System.Buffers.dll", + "system.buffers.4.3.0.nupkg.sha512", + "system.buffers.nuspec" + ] + }, + "System.Collections/4.3.0": { + "sha512": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "type": "package", + "path": "system.collections/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.dll", + "ref/netcore50/System.Collections.xml", + "ref/netcore50/de/System.Collections.xml", + "ref/netcore50/es/System.Collections.xml", + "ref/netcore50/fr/System.Collections.xml", + "ref/netcore50/it/System.Collections.xml", + "ref/netcore50/ja/System.Collections.xml", + "ref/netcore50/ko/System.Collections.xml", + "ref/netcore50/ru/System.Collections.xml", + "ref/netcore50/zh-hans/System.Collections.xml", + "ref/netcore50/zh-hant/System.Collections.xml", + "ref/netstandard1.0/System.Collections.dll", + "ref/netstandard1.0/System.Collections.xml", + "ref/netstandard1.0/de/System.Collections.xml", + "ref/netstandard1.0/es/System.Collections.xml", + "ref/netstandard1.0/fr/System.Collections.xml", + "ref/netstandard1.0/it/System.Collections.xml", + "ref/netstandard1.0/ja/System.Collections.xml", + "ref/netstandard1.0/ko/System.Collections.xml", + "ref/netstandard1.0/ru/System.Collections.xml", + "ref/netstandard1.0/zh-hans/System.Collections.xml", + "ref/netstandard1.0/zh-hant/System.Collections.xml", + "ref/netstandard1.3/System.Collections.dll", + "ref/netstandard1.3/System.Collections.xml", + "ref/netstandard1.3/de/System.Collections.xml", + "ref/netstandard1.3/es/System.Collections.xml", + "ref/netstandard1.3/fr/System.Collections.xml", + "ref/netstandard1.3/it/System.Collections.xml", + "ref/netstandard1.3/ja/System.Collections.xml", + "ref/netstandard1.3/ko/System.Collections.xml", + "ref/netstandard1.3/ru/System.Collections.xml", + "ref/netstandard1.3/zh-hans/System.Collections.xml", + "ref/netstandard1.3/zh-hant/System.Collections.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.4.3.0.nupkg.sha512", + "system.collections.nuspec" + ] + }, + "System.Collections.Concurrent/4.3.0": { + "sha512": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "type": "package", + "path": "system.collections.concurrent/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Collections.Concurrent.dll", + "lib/netstandard1.3/System.Collections.Concurrent.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.Concurrent.dll", + "ref/netcore50/System.Collections.Concurrent.xml", + "ref/netcore50/de/System.Collections.Concurrent.xml", + "ref/netcore50/es/System.Collections.Concurrent.xml", + "ref/netcore50/fr/System.Collections.Concurrent.xml", + "ref/netcore50/it/System.Collections.Concurrent.xml", + "ref/netcore50/ja/System.Collections.Concurrent.xml", + "ref/netcore50/ko/System.Collections.Concurrent.xml", + "ref/netcore50/ru/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hans/System.Collections.Concurrent.xml", + "ref/netcore50/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.1/System.Collections.Concurrent.dll", + "ref/netstandard1.1/System.Collections.Concurrent.xml", + "ref/netstandard1.1/de/System.Collections.Concurrent.xml", + "ref/netstandard1.1/es/System.Collections.Concurrent.xml", + "ref/netstandard1.1/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.1/it/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.1/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml", + "ref/netstandard1.3/System.Collections.Concurrent.dll", + "ref/netstandard1.3/System.Collections.Concurrent.xml", + "ref/netstandard1.3/de/System.Collections.Concurrent.xml", + "ref/netstandard1.3/es/System.Collections.Concurrent.xml", + "ref/netstandard1.3/fr/System.Collections.Concurrent.xml", + "ref/netstandard1.3/it/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ja/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ko/System.Collections.Concurrent.xml", + "ref/netstandard1.3/ru/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml", + "ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.concurrent.4.3.0.nupkg.sha512", + "system.collections.concurrent.nuspec" + ] + }, + "System.Configuration.ConfigurationManager/4.4.0": { + "sha512": "gWwQv/Ug1qWJmHCmN17nAbxJYmQBM/E94QxKLksvUiiKB1Ld3Sc/eK1lgmbSjDFxkQhVuayI/cGFZhpBSodLrg==", + "type": "package", + "path": "system.configuration.configurationmanager/4.4.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Configuration.ConfigurationManager.dll", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "ref/net461/System.Configuration.ConfigurationManager.dll", + "ref/net461/System.Configuration.ConfigurationManager.xml", + "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "ref/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "system.configuration.configurationmanager.4.4.0.nupkg.sha512", + "system.configuration.configurationmanager.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Console/4.3.0": { + "sha512": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", + "type": "package", + "path": "system.console/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Console.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Console.dll", + "ref/netstandard1.3/System.Console.dll", + "ref/netstandard1.3/System.Console.xml", + "ref/netstandard1.3/de/System.Console.xml", + "ref/netstandard1.3/es/System.Console.xml", + "ref/netstandard1.3/fr/System.Console.xml", + "ref/netstandard1.3/it/System.Console.xml", + "ref/netstandard1.3/ja/System.Console.xml", + "ref/netstandard1.3/ko/System.Console.xml", + "ref/netstandard1.3/ru/System.Console.xml", + "ref/netstandard1.3/zh-hans/System.Console.xml", + "ref/netstandard1.3/zh-hant/System.Console.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.console.4.3.0.nupkg.sha512", + "system.console.nuspec" + ] + }, + "System.Diagnostics.Debug/4.3.0": { + "sha512": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "type": "package", + "path": "system.diagnostics.debug/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Debug.dll", + "ref/netcore50/System.Diagnostics.Debug.xml", + "ref/netcore50/de/System.Diagnostics.Debug.xml", + "ref/netcore50/es/System.Diagnostics.Debug.xml", + "ref/netcore50/fr/System.Diagnostics.Debug.xml", + "ref/netcore50/it/System.Diagnostics.Debug.xml", + "ref/netcore50/ja/System.Diagnostics.Debug.xml", + "ref/netcore50/ko/System.Diagnostics.Debug.xml", + "ref/netcore50/ru/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/System.Diagnostics.Debug.dll", + "ref/netstandard1.0/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/System.Diagnostics.Debug.dll", + "ref/netstandard1.3/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/de/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/es/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/it/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.debug.4.3.0.nupkg.sha512", + "system.diagnostics.debug.nuspec" + ] + }, + "System.Diagnostics.DiagnosticSource/4.3.0": { + "sha512": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==", + "type": "package", + "path": "system.diagnostics.diagnosticsource/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net46/System.Diagnostics.DiagnosticSource.dll", + "lib/net46/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml", + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll", + "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml", + "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll", + "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml", + "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512", + "system.diagnostics.diagnosticsource.nuspec" + ] + }, + "System.Diagnostics.Tools/4.3.0": { + "sha512": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "type": "package", + "path": "system.diagnostics.tools/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Diagnostics.Tools.dll", + "ref/netcore50/System.Diagnostics.Tools.xml", + "ref/netcore50/de/System.Diagnostics.Tools.xml", + "ref/netcore50/es/System.Diagnostics.Tools.xml", + "ref/netcore50/fr/System.Diagnostics.Tools.xml", + "ref/netcore50/it/System.Diagnostics.Tools.xml", + "ref/netcore50/ja/System.Diagnostics.Tools.xml", + "ref/netcore50/ko/System.Diagnostics.Tools.xml", + "ref/netcore50/ru/System.Diagnostics.Tools.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Tools.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/System.Diagnostics.Tools.dll", + "ref/netstandard1.0/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/de/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/es/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/fr/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/it/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ja/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ko/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/ru/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/zh-hans/System.Diagnostics.Tools.xml", + "ref/netstandard1.0/zh-hant/System.Diagnostics.Tools.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.tools.4.3.0.nupkg.sha512", + "system.diagnostics.tools.nuspec" + ] + }, + "System.Diagnostics.Tracing/4.3.0": { + "sha512": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "type": "package", + "path": "system.diagnostics.tracing/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Diagnostics.Tracing.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.dll", + "ref/netcore50/System.Diagnostics.Tracing.xml", + "ref/netcore50/de/System.Diagnostics.Tracing.xml", + "ref/netcore50/es/System.Diagnostics.Tracing.xml", + "ref/netcore50/fr/System.Diagnostics.Tracing.xml", + "ref/netcore50/it/System.Diagnostics.Tracing.xml", + "ref/netcore50/ja/System.Diagnostics.Tracing.xml", + "ref/netcore50/ko/System.Diagnostics.Tracing.xml", + "ref/netcore50/ru/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/System.Diagnostics.Tracing.dll", + "ref/netstandard1.1/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/System.Diagnostics.Tracing.dll", + "ref/netstandard1.2/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/System.Diagnostics.Tracing.dll", + "ref/netstandard1.3/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/System.Diagnostics.Tracing.dll", + "ref/netstandard1.5/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/de/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/es/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/it/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml", + "ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.diagnostics.tracing.4.3.0.nupkg.sha512", + "system.diagnostics.tracing.nuspec" + ] + }, + "System.Dynamic.Runtime/4.0.11": { + "sha512": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", + "type": "package", + "path": "system.dynamic.runtime/4.0.11", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Dynamic.Runtime.dll", + "lib/netstandard1.3/System.Dynamic.Runtime.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Dynamic.Runtime.dll", + "ref/netcore50/System.Dynamic.Runtime.xml", + "ref/netcore50/de/System.Dynamic.Runtime.xml", + "ref/netcore50/es/System.Dynamic.Runtime.xml", + "ref/netcore50/fr/System.Dynamic.Runtime.xml", + "ref/netcore50/it/System.Dynamic.Runtime.xml", + "ref/netcore50/ja/System.Dynamic.Runtime.xml", + "ref/netcore50/ko/System.Dynamic.Runtime.xml", + "ref/netcore50/ru/System.Dynamic.Runtime.xml", + "ref/netcore50/zh-hans/System.Dynamic.Runtime.xml", + "ref/netcore50/zh-hant/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/System.Dynamic.Runtime.dll", + "ref/netstandard1.0/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/de/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/es/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/fr/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/it/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/ja/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/ko/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/ru/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Dynamic.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/System.Dynamic.Runtime.dll", + "ref/netstandard1.3/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/de/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/es/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/fr/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/it/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/ja/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/ko/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/ru/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Dynamic.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Dynamic.Runtime.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Dynamic.Runtime.dll", + "system.dynamic.runtime.4.0.11.nupkg.sha512", + "system.dynamic.runtime.nuspec" + ] + }, + "System.Globalization/4.3.0": { + "sha512": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "type": "package", + "path": "system.globalization/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Globalization.dll", + "ref/netcore50/System.Globalization.xml", + "ref/netcore50/de/System.Globalization.xml", + "ref/netcore50/es/System.Globalization.xml", + "ref/netcore50/fr/System.Globalization.xml", + "ref/netcore50/it/System.Globalization.xml", + "ref/netcore50/ja/System.Globalization.xml", + "ref/netcore50/ko/System.Globalization.xml", + "ref/netcore50/ru/System.Globalization.xml", + "ref/netcore50/zh-hans/System.Globalization.xml", + "ref/netcore50/zh-hant/System.Globalization.xml", + "ref/netstandard1.0/System.Globalization.dll", + "ref/netstandard1.0/System.Globalization.xml", + "ref/netstandard1.0/de/System.Globalization.xml", + "ref/netstandard1.0/es/System.Globalization.xml", + "ref/netstandard1.0/fr/System.Globalization.xml", + "ref/netstandard1.0/it/System.Globalization.xml", + "ref/netstandard1.0/ja/System.Globalization.xml", + "ref/netstandard1.0/ko/System.Globalization.xml", + "ref/netstandard1.0/ru/System.Globalization.xml", + "ref/netstandard1.0/zh-hans/System.Globalization.xml", + "ref/netstandard1.0/zh-hant/System.Globalization.xml", + "ref/netstandard1.3/System.Globalization.dll", + "ref/netstandard1.3/System.Globalization.xml", + "ref/netstandard1.3/de/System.Globalization.xml", + "ref/netstandard1.3/es/System.Globalization.xml", + "ref/netstandard1.3/fr/System.Globalization.xml", + "ref/netstandard1.3/it/System.Globalization.xml", + "ref/netstandard1.3/ja/System.Globalization.xml", + "ref/netstandard1.3/ko/System.Globalization.xml", + "ref/netstandard1.3/ru/System.Globalization.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.4.3.0.nupkg.sha512", + "system.globalization.nuspec" + ] + }, + "System.Globalization.Calendars/4.3.0": { + "sha512": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "type": "package", + "path": "system.globalization.calendars/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Globalization.Calendars.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Globalization.Calendars.dll", + "ref/netstandard1.3/System.Globalization.Calendars.dll", + "ref/netstandard1.3/System.Globalization.Calendars.xml", + "ref/netstandard1.3/de/System.Globalization.Calendars.xml", + "ref/netstandard1.3/es/System.Globalization.Calendars.xml", + "ref/netstandard1.3/fr/System.Globalization.Calendars.xml", + "ref/netstandard1.3/it/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ja/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ko/System.Globalization.Calendars.xml", + "ref/netstandard1.3/ru/System.Globalization.Calendars.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.Calendars.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.Calendars.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.calendars.4.3.0.nupkg.sha512", + "system.globalization.calendars.nuspec" + ] + }, + "System.Globalization.Extensions/4.3.0": { + "sha512": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", + "type": "package", + "path": "system.globalization.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Globalization.Extensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Globalization.Extensions.dll", + "ref/netstandard1.3/System.Globalization.Extensions.dll", + "ref/netstandard1.3/System.Globalization.Extensions.xml", + "ref/netstandard1.3/de/System.Globalization.Extensions.xml", + "ref/netstandard1.3/es/System.Globalization.Extensions.xml", + "ref/netstandard1.3/fr/System.Globalization.Extensions.xml", + "ref/netstandard1.3/it/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ja/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ko/System.Globalization.Extensions.xml", + "ref/netstandard1.3/ru/System.Globalization.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.Extensions.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll", + "runtimes/win/lib/net46/System.Globalization.Extensions.dll", + "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll", + "system.globalization.extensions.4.3.0.nupkg.sha512", + "system.globalization.extensions.nuspec" + ] + }, + "System.IO/4.3.0": { + "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "type": "package", + "path": "system.io/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.3.0.nupkg.sha512", + "system.io.nuspec" + ] + }, + "System.IO.Compression/4.3.0": { + "sha512": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", + "type": "package", + "path": "system.io.compression/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net46/System.IO.Compression.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net46/System.IO.Compression.dll", + "ref/netcore50/System.IO.Compression.dll", + "ref/netcore50/System.IO.Compression.xml", + "ref/netcore50/de/System.IO.Compression.xml", + "ref/netcore50/es/System.IO.Compression.xml", + "ref/netcore50/fr/System.IO.Compression.xml", + "ref/netcore50/it/System.IO.Compression.xml", + "ref/netcore50/ja/System.IO.Compression.xml", + "ref/netcore50/ko/System.IO.Compression.xml", + "ref/netcore50/ru/System.IO.Compression.xml", + "ref/netcore50/zh-hans/System.IO.Compression.xml", + "ref/netcore50/zh-hant/System.IO.Compression.xml", + "ref/netstandard1.1/System.IO.Compression.dll", + "ref/netstandard1.1/System.IO.Compression.xml", + "ref/netstandard1.1/de/System.IO.Compression.xml", + "ref/netstandard1.1/es/System.IO.Compression.xml", + "ref/netstandard1.1/fr/System.IO.Compression.xml", + "ref/netstandard1.1/it/System.IO.Compression.xml", + "ref/netstandard1.1/ja/System.IO.Compression.xml", + "ref/netstandard1.1/ko/System.IO.Compression.xml", + "ref/netstandard1.1/ru/System.IO.Compression.xml", + "ref/netstandard1.1/zh-hans/System.IO.Compression.xml", + "ref/netstandard1.1/zh-hant/System.IO.Compression.xml", + "ref/netstandard1.3/System.IO.Compression.dll", + "ref/netstandard1.3/System.IO.Compression.xml", + "ref/netstandard1.3/de/System.IO.Compression.xml", + "ref/netstandard1.3/es/System.IO.Compression.xml", + "ref/netstandard1.3/fr/System.IO.Compression.xml", + "ref/netstandard1.3/it/System.IO.Compression.xml", + "ref/netstandard1.3/ja/System.IO.Compression.xml", + "ref/netstandard1.3/ko/System.IO.Compression.xml", + "ref/netstandard1.3/ru/System.IO.Compression.xml", + "ref/netstandard1.3/zh-hans/System.IO.Compression.xml", + "ref/netstandard1.3/zh-hant/System.IO.Compression.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll", + "runtimes/win/lib/net46/System.IO.Compression.dll", + "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll", + "system.io.compression.4.3.0.nupkg.sha512", + "system.io.compression.nuspec" + ] + }, + "System.IO.Compression.ZipFile/4.3.0": { + "sha512": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", + "type": "package", + "path": "system.io.compression.zipfile/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.Compression.ZipFile.dll", + "lib/netstandard1.3/System.IO.Compression.ZipFile.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.Compression.ZipFile.dll", + "ref/netstandard1.3/System.IO.Compression.ZipFile.dll", + "ref/netstandard1.3/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/de/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/es/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/fr/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/it/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/ja/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/ko/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/ru/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/zh-hans/System.IO.Compression.ZipFile.xml", + "ref/netstandard1.3/zh-hant/System.IO.Compression.ZipFile.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.compression.zipfile.4.3.0.nupkg.sha512", + "system.io.compression.zipfile.nuspec" + ] + }, + "System.IO.FileSystem/4.3.0": { + "sha512": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "type": "package", + "path": "system.io.filesystem/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.dll", + "ref/netstandard1.3/System.IO.FileSystem.dll", + "ref/netstandard1.3/System.IO.FileSystem.xml", + "ref/netstandard1.3/de/System.IO.FileSystem.xml", + "ref/netstandard1.3/es/System.IO.FileSystem.xml", + "ref/netstandard1.3/fr/System.IO.FileSystem.xml", + "ref/netstandard1.3/it/System.IO.FileSystem.xml", + "ref/netstandard1.3/ja/System.IO.FileSystem.xml", + "ref/netstandard1.3/ko/System.IO.FileSystem.xml", + "ref/netstandard1.3/ru/System.IO.FileSystem.xml", + "ref/netstandard1.3/zh-hans/System.IO.FileSystem.xml", + "ref/netstandard1.3/zh-hant/System.IO.FileSystem.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.filesystem.4.3.0.nupkg.sha512", + "system.io.filesystem.nuspec" + ] + }, + "System.IO.FileSystem.Primitives/4.3.0": { + "sha512": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "type": "package", + "path": "system.io.filesystem.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.IO.FileSystem.Primitives.dll", + "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.IO.FileSystem.Primitives.dll", + "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll", + "ref/netstandard1.3/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/de/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/es/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/fr/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/it/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ja/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ko/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/ru/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.IO.FileSystem.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.IO.FileSystem.Primitives.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.filesystem.primitives.4.3.0.nupkg.sha512", + "system.io.filesystem.primitives.nuspec" + ] + }, + "System.Linq/4.3.0": { + "sha512": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "type": "package", + "path": "system.linq/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Linq.dll", + "lib/netcore50/System.Linq.dll", + "lib/netstandard1.6/System.Linq.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Linq.dll", + "ref/netcore50/System.Linq.dll", + "ref/netcore50/System.Linq.xml", + "ref/netcore50/de/System.Linq.xml", + "ref/netcore50/es/System.Linq.xml", + "ref/netcore50/fr/System.Linq.xml", + "ref/netcore50/it/System.Linq.xml", + "ref/netcore50/ja/System.Linq.xml", + "ref/netcore50/ko/System.Linq.xml", + "ref/netcore50/ru/System.Linq.xml", + "ref/netcore50/zh-hans/System.Linq.xml", + "ref/netcore50/zh-hant/System.Linq.xml", + "ref/netstandard1.0/System.Linq.dll", + "ref/netstandard1.0/System.Linq.xml", + "ref/netstandard1.0/de/System.Linq.xml", + "ref/netstandard1.0/es/System.Linq.xml", + "ref/netstandard1.0/fr/System.Linq.xml", + "ref/netstandard1.0/it/System.Linq.xml", + "ref/netstandard1.0/ja/System.Linq.xml", + "ref/netstandard1.0/ko/System.Linq.xml", + "ref/netstandard1.0/ru/System.Linq.xml", + "ref/netstandard1.0/zh-hans/System.Linq.xml", + "ref/netstandard1.0/zh-hant/System.Linq.xml", + "ref/netstandard1.6/System.Linq.dll", + "ref/netstandard1.6/System.Linq.xml", + "ref/netstandard1.6/de/System.Linq.xml", + "ref/netstandard1.6/es/System.Linq.xml", + "ref/netstandard1.6/fr/System.Linq.xml", + "ref/netstandard1.6/it/System.Linq.xml", + "ref/netstandard1.6/ja/System.Linq.xml", + "ref/netstandard1.6/ko/System.Linq.xml", + "ref/netstandard1.6/ru/System.Linq.xml", + "ref/netstandard1.6/zh-hans/System.Linq.xml", + "ref/netstandard1.6/zh-hant/System.Linq.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.linq.4.3.0.nupkg.sha512", + "system.linq.nuspec" + ] + }, + "System.Linq.Expressions/4.3.0": { + "sha512": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "type": "package", + "path": "system.linq.expressions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Linq.Expressions.dll", + "lib/netcore50/System.Linq.Expressions.dll", + "lib/netstandard1.6/System.Linq.Expressions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Linq.Expressions.dll", + "ref/netcore50/System.Linq.Expressions.dll", + "ref/netcore50/System.Linq.Expressions.xml", + "ref/netcore50/de/System.Linq.Expressions.xml", + "ref/netcore50/es/System.Linq.Expressions.xml", + "ref/netcore50/fr/System.Linq.Expressions.xml", + "ref/netcore50/it/System.Linq.Expressions.xml", + "ref/netcore50/ja/System.Linq.Expressions.xml", + "ref/netcore50/ko/System.Linq.Expressions.xml", + "ref/netcore50/ru/System.Linq.Expressions.xml", + "ref/netcore50/zh-hans/System.Linq.Expressions.xml", + "ref/netcore50/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.0/System.Linq.Expressions.dll", + "ref/netstandard1.0/System.Linq.Expressions.xml", + "ref/netstandard1.0/de/System.Linq.Expressions.xml", + "ref/netstandard1.0/es/System.Linq.Expressions.xml", + "ref/netstandard1.0/fr/System.Linq.Expressions.xml", + "ref/netstandard1.0/it/System.Linq.Expressions.xml", + "ref/netstandard1.0/ja/System.Linq.Expressions.xml", + "ref/netstandard1.0/ko/System.Linq.Expressions.xml", + "ref/netstandard1.0/ru/System.Linq.Expressions.xml", + "ref/netstandard1.0/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.0/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.3/System.Linq.Expressions.dll", + "ref/netstandard1.3/System.Linq.Expressions.xml", + "ref/netstandard1.3/de/System.Linq.Expressions.xml", + "ref/netstandard1.3/es/System.Linq.Expressions.xml", + "ref/netstandard1.3/fr/System.Linq.Expressions.xml", + "ref/netstandard1.3/it/System.Linq.Expressions.xml", + "ref/netstandard1.3/ja/System.Linq.Expressions.xml", + "ref/netstandard1.3/ko/System.Linq.Expressions.xml", + "ref/netstandard1.3/ru/System.Linq.Expressions.xml", + "ref/netstandard1.3/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.3/zh-hant/System.Linq.Expressions.xml", + "ref/netstandard1.6/System.Linq.Expressions.dll", + "ref/netstandard1.6/System.Linq.Expressions.xml", + "ref/netstandard1.6/de/System.Linq.Expressions.xml", + "ref/netstandard1.6/es/System.Linq.Expressions.xml", + "ref/netstandard1.6/fr/System.Linq.Expressions.xml", + "ref/netstandard1.6/it/System.Linq.Expressions.xml", + "ref/netstandard1.6/ja/System.Linq.Expressions.xml", + "ref/netstandard1.6/ko/System.Linq.Expressions.xml", + "ref/netstandard1.6/ru/System.Linq.Expressions.xml", + "ref/netstandard1.6/zh-hans/System.Linq.Expressions.xml", + "ref/netstandard1.6/zh-hant/System.Linq.Expressions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Linq.Expressions.dll", + "system.linq.expressions.4.3.0.nupkg.sha512", + "system.linq.expressions.nuspec" + ] + }, + "System.Net.Http/4.3.0": { + "sha512": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", + "type": "package", + "path": "system.net.http/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/Xamarinmac20/_._", + "lib/monoandroid10/_._", + "lib/monotouch10/_._", + "lib/net45/_._", + "lib/net46/System.Net.Http.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/Xamarinmac20/_._", + "ref/monoandroid10/_._", + "ref/monotouch10/_._", + "ref/net45/_._", + "ref/net46/System.Net.Http.dll", + "ref/net46/System.Net.Http.xml", + "ref/net46/de/System.Net.Http.xml", + "ref/net46/es/System.Net.Http.xml", + "ref/net46/fr/System.Net.Http.xml", + "ref/net46/it/System.Net.Http.xml", + "ref/net46/ja/System.Net.Http.xml", + "ref/net46/ko/System.Net.Http.xml", + "ref/net46/ru/System.Net.Http.xml", + "ref/net46/zh-hans/System.Net.Http.xml", + "ref/net46/zh-hant/System.Net.Http.xml", + "ref/netcore50/System.Net.Http.dll", + "ref/netcore50/System.Net.Http.xml", + "ref/netcore50/de/System.Net.Http.xml", + "ref/netcore50/es/System.Net.Http.xml", + "ref/netcore50/fr/System.Net.Http.xml", + "ref/netcore50/it/System.Net.Http.xml", + "ref/netcore50/ja/System.Net.Http.xml", + "ref/netcore50/ko/System.Net.Http.xml", + "ref/netcore50/ru/System.Net.Http.xml", + "ref/netcore50/zh-hans/System.Net.Http.xml", + "ref/netcore50/zh-hant/System.Net.Http.xml", + "ref/netstandard1.1/System.Net.Http.dll", + "ref/netstandard1.1/System.Net.Http.xml", + "ref/netstandard1.1/de/System.Net.Http.xml", + "ref/netstandard1.1/es/System.Net.Http.xml", + "ref/netstandard1.1/fr/System.Net.Http.xml", + "ref/netstandard1.1/it/System.Net.Http.xml", + "ref/netstandard1.1/ja/System.Net.Http.xml", + "ref/netstandard1.1/ko/System.Net.Http.xml", + "ref/netstandard1.1/ru/System.Net.Http.xml", + "ref/netstandard1.1/zh-hans/System.Net.Http.xml", + "ref/netstandard1.1/zh-hant/System.Net.Http.xml", + "ref/netstandard1.3/System.Net.Http.dll", + "ref/netstandard1.3/System.Net.Http.xml", + "ref/netstandard1.3/de/System.Net.Http.xml", + "ref/netstandard1.3/es/System.Net.Http.xml", + "ref/netstandard1.3/fr/System.Net.Http.xml", + "ref/netstandard1.3/it/System.Net.Http.xml", + "ref/netstandard1.3/ja/System.Net.Http.xml", + "ref/netstandard1.3/ko/System.Net.Http.xml", + "ref/netstandard1.3/ru/System.Net.Http.xml", + "ref/netstandard1.3/zh-hans/System.Net.Http.xml", + "ref/netstandard1.3/zh-hant/System.Net.Http.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll", + "runtimes/win/lib/net46/System.Net.Http.dll", + "runtimes/win/lib/netcore50/System.Net.Http.dll", + "runtimes/win/lib/netstandard1.3/System.Net.Http.dll", + "system.net.http.4.3.0.nupkg.sha512", + "system.net.http.nuspec" + ] + }, + "System.Net.Primitives/4.3.0": { + "sha512": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "type": "package", + "path": "system.net.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Net.Primitives.dll", + "ref/netcore50/System.Net.Primitives.xml", + "ref/netcore50/de/System.Net.Primitives.xml", + "ref/netcore50/es/System.Net.Primitives.xml", + "ref/netcore50/fr/System.Net.Primitives.xml", + "ref/netcore50/it/System.Net.Primitives.xml", + "ref/netcore50/ja/System.Net.Primitives.xml", + "ref/netcore50/ko/System.Net.Primitives.xml", + "ref/netcore50/ru/System.Net.Primitives.xml", + "ref/netcore50/zh-hans/System.Net.Primitives.xml", + "ref/netcore50/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.0/System.Net.Primitives.dll", + "ref/netstandard1.0/System.Net.Primitives.xml", + "ref/netstandard1.0/de/System.Net.Primitives.xml", + "ref/netstandard1.0/es/System.Net.Primitives.xml", + "ref/netstandard1.0/fr/System.Net.Primitives.xml", + "ref/netstandard1.0/it/System.Net.Primitives.xml", + "ref/netstandard1.0/ja/System.Net.Primitives.xml", + "ref/netstandard1.0/ko/System.Net.Primitives.xml", + "ref/netstandard1.0/ru/System.Net.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.1/System.Net.Primitives.dll", + "ref/netstandard1.1/System.Net.Primitives.xml", + "ref/netstandard1.1/de/System.Net.Primitives.xml", + "ref/netstandard1.1/es/System.Net.Primitives.xml", + "ref/netstandard1.1/fr/System.Net.Primitives.xml", + "ref/netstandard1.1/it/System.Net.Primitives.xml", + "ref/netstandard1.1/ja/System.Net.Primitives.xml", + "ref/netstandard1.1/ko/System.Net.Primitives.xml", + "ref/netstandard1.1/ru/System.Net.Primitives.xml", + "ref/netstandard1.1/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.1/zh-hant/System.Net.Primitives.xml", + "ref/netstandard1.3/System.Net.Primitives.dll", + "ref/netstandard1.3/System.Net.Primitives.xml", + "ref/netstandard1.3/de/System.Net.Primitives.xml", + "ref/netstandard1.3/es/System.Net.Primitives.xml", + "ref/netstandard1.3/fr/System.Net.Primitives.xml", + "ref/netstandard1.3/it/System.Net.Primitives.xml", + "ref/netstandard1.3/ja/System.Net.Primitives.xml", + "ref/netstandard1.3/ko/System.Net.Primitives.xml", + "ref/netstandard1.3/ru/System.Net.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.Net.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.Net.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.net.primitives.4.3.0.nupkg.sha512", + "system.net.primitives.nuspec" + ] + }, + "System.Net.Sockets/4.3.0": { + "sha512": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "type": "package", + "path": "system.net.sockets/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Net.Sockets.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Net.Sockets.dll", + "ref/netstandard1.3/System.Net.Sockets.dll", + "ref/netstandard1.3/System.Net.Sockets.xml", + "ref/netstandard1.3/de/System.Net.Sockets.xml", + "ref/netstandard1.3/es/System.Net.Sockets.xml", + "ref/netstandard1.3/fr/System.Net.Sockets.xml", + "ref/netstandard1.3/it/System.Net.Sockets.xml", + "ref/netstandard1.3/ja/System.Net.Sockets.xml", + "ref/netstandard1.3/ko/System.Net.Sockets.xml", + "ref/netstandard1.3/ru/System.Net.Sockets.xml", + "ref/netstandard1.3/zh-hans/System.Net.Sockets.xml", + "ref/netstandard1.3/zh-hant/System.Net.Sockets.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.net.sockets.4.3.0.nupkg.sha512", + "system.net.sockets.nuspec" + ] + }, + "System.ObjectModel/4.3.0": { + "sha512": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "type": "package", + "path": "system.objectmodel/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.ObjectModel.dll", + "lib/netstandard1.3/System.ObjectModel.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.ObjectModel.dll", + "ref/netcore50/System.ObjectModel.xml", + "ref/netcore50/de/System.ObjectModel.xml", + "ref/netcore50/es/System.ObjectModel.xml", + "ref/netcore50/fr/System.ObjectModel.xml", + "ref/netcore50/it/System.ObjectModel.xml", + "ref/netcore50/ja/System.ObjectModel.xml", + "ref/netcore50/ko/System.ObjectModel.xml", + "ref/netcore50/ru/System.ObjectModel.xml", + "ref/netcore50/zh-hans/System.ObjectModel.xml", + "ref/netcore50/zh-hant/System.ObjectModel.xml", + "ref/netstandard1.0/System.ObjectModel.dll", + "ref/netstandard1.0/System.ObjectModel.xml", + "ref/netstandard1.0/de/System.ObjectModel.xml", + "ref/netstandard1.0/es/System.ObjectModel.xml", + "ref/netstandard1.0/fr/System.ObjectModel.xml", + "ref/netstandard1.0/it/System.ObjectModel.xml", + "ref/netstandard1.0/ja/System.ObjectModel.xml", + "ref/netstandard1.0/ko/System.ObjectModel.xml", + "ref/netstandard1.0/ru/System.ObjectModel.xml", + "ref/netstandard1.0/zh-hans/System.ObjectModel.xml", + "ref/netstandard1.0/zh-hant/System.ObjectModel.xml", + "ref/netstandard1.3/System.ObjectModel.dll", + "ref/netstandard1.3/System.ObjectModel.xml", + "ref/netstandard1.3/de/System.ObjectModel.xml", + "ref/netstandard1.3/es/System.ObjectModel.xml", + "ref/netstandard1.3/fr/System.ObjectModel.xml", + "ref/netstandard1.3/it/System.ObjectModel.xml", + "ref/netstandard1.3/ja/System.ObjectModel.xml", + "ref/netstandard1.3/ko/System.ObjectModel.xml", + "ref/netstandard1.3/ru/System.ObjectModel.xml", + "ref/netstandard1.3/zh-hans/System.ObjectModel.xml", + "ref/netstandard1.3/zh-hant/System.ObjectModel.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.objectmodel.4.3.0.nupkg.sha512", + "system.objectmodel.nuspec" + ] + }, + "System.Reflection/4.3.0": { + "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "type": "package", + "path": "system.reflection/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.3.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Emit/4.3.0": { + "sha512": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "type": "package", + "path": "system.reflection.emit/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/monotouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.dll", + "lib/netstandard1.3/System.Reflection.Emit.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/net45/_._", + "ref/netstandard1.1/System.Reflection.Emit.dll", + "ref/netstandard1.1/System.Reflection.Emit.xml", + "ref/netstandard1.1/de/System.Reflection.Emit.xml", + "ref/netstandard1.1/es/System.Reflection.Emit.xml", + "ref/netstandard1.1/fr/System.Reflection.Emit.xml", + "ref/netstandard1.1/it/System.Reflection.Emit.xml", + "ref/netstandard1.1/ja/System.Reflection.Emit.xml", + "ref/netstandard1.1/ko/System.Reflection.Emit.xml", + "ref/netstandard1.1/ru/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml", + "ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml", + "ref/xamarinmac20/_._", + "system.reflection.emit.4.3.0.nupkg.sha512", + "system.reflection.emit.nuspec" + ] + }, + "System.Reflection.Emit.ILGeneration/4.3.0": { + "sha512": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "type": "package", + "path": "system.reflection.emit.ilgeneration/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.ILGeneration.dll", + "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll", + "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/_._", + "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512", + "system.reflection.emit.ilgeneration.nuspec" + ] + }, + "System.Reflection.Emit.Lightweight/4.3.0": { + "sha512": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", + "type": "package", + "path": "system.reflection.emit.lightweight/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Reflection.Emit.Lightweight.dll", + "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll", + "lib/portable-net45+wp8/_._", + "lib/wp80/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll", + "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml", + "ref/portable-net45+wp8/_._", + "ref/wp80/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/_._", + "system.reflection.emit.lightweight.4.3.0.nupkg.sha512", + "system.reflection.emit.lightweight.nuspec" + ] + }, + "System.Reflection.Extensions/4.3.0": { + "sha512": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "type": "package", + "path": "system.reflection.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Extensions.dll", + "ref/netcore50/System.Reflection.Extensions.xml", + "ref/netcore50/de/System.Reflection.Extensions.xml", + "ref/netcore50/es/System.Reflection.Extensions.xml", + "ref/netcore50/fr/System.Reflection.Extensions.xml", + "ref/netcore50/it/System.Reflection.Extensions.xml", + "ref/netcore50/ja/System.Reflection.Extensions.xml", + "ref/netcore50/ko/System.Reflection.Extensions.xml", + "ref/netcore50/ru/System.Reflection.Extensions.xml", + "ref/netcore50/zh-hans/System.Reflection.Extensions.xml", + "ref/netcore50/zh-hant/System.Reflection.Extensions.xml", + "ref/netstandard1.0/System.Reflection.Extensions.dll", + "ref/netstandard1.0/System.Reflection.Extensions.xml", + "ref/netstandard1.0/de/System.Reflection.Extensions.xml", + "ref/netstandard1.0/es/System.Reflection.Extensions.xml", + "ref/netstandard1.0/fr/System.Reflection.Extensions.xml", + "ref/netstandard1.0/it/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ja/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ko/System.Reflection.Extensions.xml", + "ref/netstandard1.0/ru/System.Reflection.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.extensions.4.3.0.nupkg.sha512", + "system.reflection.extensions.nuspec" + ] + }, + "System.Reflection.Metadata/1.6.0": { + "sha512": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==", + "type": "package", + "path": "system.reflection.metadata/1.6.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netstandard1.1/System.Reflection.Metadata.dll", + "lib/netstandard1.1/System.Reflection.Metadata.xml", + "lib/netstandard2.0/System.Reflection.Metadata.dll", + "lib/netstandard2.0/System.Reflection.Metadata.xml", + "lib/portable-net45+win8/System.Reflection.Metadata.dll", + "lib/portable-net45+win8/System.Reflection.Metadata.xml", + "system.reflection.metadata.1.6.0.nupkg.sha512", + "system.reflection.metadata.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Reflection.Primitives/4.3.0": { + "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "type": "package", + "path": "system.reflection.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.3.0.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Reflection.TypeExtensions/4.3.0": { + "sha512": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "type": "package", + "path": "system.reflection.typeextensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Reflection.TypeExtensions.dll", + "lib/net462/System.Reflection.TypeExtensions.dll", + "lib/netcore50/System.Reflection.TypeExtensions.dll", + "lib/netstandard1.5/System.Reflection.TypeExtensions.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Reflection.TypeExtensions.dll", + "ref/net462/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.3/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.3/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/System.Reflection.TypeExtensions.dll", + "ref/netstandard1.5/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll", + "system.reflection.typeextensions.4.3.0.nupkg.sha512", + "system.reflection.typeextensions.nuspec" + ] + }, + "System.Resources.ResourceManager/4.3.0": { + "sha512": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "type": "package", + "path": "system.resources.resourcemanager/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Resources.ResourceManager.dll", + "ref/netcore50/System.Resources.ResourceManager.xml", + "ref/netcore50/de/System.Resources.ResourceManager.xml", + "ref/netcore50/es/System.Resources.ResourceManager.xml", + "ref/netcore50/fr/System.Resources.ResourceManager.xml", + "ref/netcore50/it/System.Resources.ResourceManager.xml", + "ref/netcore50/ja/System.Resources.ResourceManager.xml", + "ref/netcore50/ko/System.Resources.ResourceManager.xml", + "ref/netcore50/ru/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/System.Resources.ResourceManager.dll", + "ref/netstandard1.0/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/de/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/es/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/it/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.resources.resourcemanager.4.3.0.nupkg.sha512", + "system.resources.resourcemanager.nuspec" + ] + }, + "System.Runtime/4.3.0": { + "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "type": "package", + "path": "system.runtime/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.3.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.Extensions/4.3.0": { + "sha512": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "type": "package", + "path": "system.runtime.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.xml", + "ref/netcore50/de/System.Runtime.Extensions.xml", + "ref/netcore50/es/System.Runtime.Extensions.xml", + "ref/netcore50/fr/System.Runtime.Extensions.xml", + "ref/netcore50/it/System.Runtime.Extensions.xml", + "ref/netcore50/ja/System.Runtime.Extensions.xml", + "ref/netcore50/ko/System.Runtime.Extensions.xml", + "ref/netcore50/ru/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.0/System.Runtime.Extensions.dll", + "ref/netstandard1.0/System.Runtime.Extensions.xml", + "ref/netstandard1.0/de/System.Runtime.Extensions.xml", + "ref/netstandard1.0/es/System.Runtime.Extensions.xml", + "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.0/it/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.3/System.Runtime.Extensions.dll", + "ref/netstandard1.3/System.Runtime.Extensions.xml", + "ref/netstandard1.3/de/System.Runtime.Extensions.xml", + "ref/netstandard1.3/es/System.Runtime.Extensions.xml", + "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.3/it/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.5/System.Runtime.Extensions.dll", + "ref/netstandard1.5/System.Runtime.Extensions.xml", + "ref/netstandard1.5/de/System.Runtime.Extensions.xml", + "ref/netstandard1.5/es/System.Runtime.Extensions.xml", + "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.5/it/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.extensions.4.3.0.nupkg.sha512", + "system.runtime.extensions.nuspec" + ] + }, + "System.Runtime.Handles/4.3.0": { + "sha512": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "type": "package", + "path": "system.runtime.handles/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/netstandard1.3/System.Runtime.Handles.dll", + "ref/netstandard1.3/System.Runtime.Handles.xml", + "ref/netstandard1.3/de/System.Runtime.Handles.xml", + "ref/netstandard1.3/es/System.Runtime.Handles.xml", + "ref/netstandard1.3/fr/System.Runtime.Handles.xml", + "ref/netstandard1.3/it/System.Runtime.Handles.xml", + "ref/netstandard1.3/ja/System.Runtime.Handles.xml", + "ref/netstandard1.3/ko/System.Runtime.Handles.xml", + "ref/netstandard1.3/ru/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.handles.4.3.0.nupkg.sha512", + "system.runtime.handles.nuspec" + ] + }, + "System.Runtime.InteropServices/4.3.0": { + "sha512": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "type": "package", + "path": "system.runtime.interopservices/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.InteropServices.dll", + "lib/net463/System.Runtime.InteropServices.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.InteropServices.dll", + "ref/net463/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.xml", + "ref/netcore50/de/System.Runtime.InteropServices.xml", + "ref/netcore50/es/System.Runtime.InteropServices.xml", + "ref/netcore50/fr/System.Runtime.InteropServices.xml", + "ref/netcore50/it/System.Runtime.InteropServices.xml", + "ref/netcore50/ja/System.Runtime.InteropServices.xml", + "ref/netcore50/ko/System.Runtime.InteropServices.xml", + "ref/netcore50/ru/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml", + "ref/netcoreapp1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/System.Runtime.InteropServices.dll", + "ref/netstandard1.2/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/System.Runtime.InteropServices.dll", + "ref/netstandard1.3/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/System.Runtime.InteropServices.dll", + "ref/netstandard1.5/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.interopservices.4.3.0.nupkg.sha512", + "system.runtime.interopservices.nuspec" + ] + }, + "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { + "sha512": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", + "type": "package", + "path": "system.runtime.interopservices.runtimeinformation/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll", + "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", + "lib/win8/System.Runtime.InteropServices.RuntimeInformation.dll", + "lib/wpa81/System.Runtime.InteropServices.RuntimeInformation.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll", + "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", + "runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll", + "runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll", + "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", + "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512", + "system.runtime.interopservices.runtimeinformation.nuspec" + ] + }, + "System.Runtime.Numerics/4.3.0": { + "sha512": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "type": "package", + "path": "system.runtime.numerics/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Runtime.Numerics.dll", + "lib/netstandard1.3/System.Runtime.Numerics.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Runtime.Numerics.dll", + "ref/netcore50/System.Runtime.Numerics.xml", + "ref/netcore50/de/System.Runtime.Numerics.xml", + "ref/netcore50/es/System.Runtime.Numerics.xml", + "ref/netcore50/fr/System.Runtime.Numerics.xml", + "ref/netcore50/it/System.Runtime.Numerics.xml", + "ref/netcore50/ja/System.Runtime.Numerics.xml", + "ref/netcore50/ko/System.Runtime.Numerics.xml", + "ref/netcore50/ru/System.Runtime.Numerics.xml", + "ref/netcore50/zh-hans/System.Runtime.Numerics.xml", + "ref/netcore50/zh-hant/System.Runtime.Numerics.xml", + "ref/netstandard1.1/System.Runtime.Numerics.dll", + "ref/netstandard1.1/System.Runtime.Numerics.xml", + "ref/netstandard1.1/de/System.Runtime.Numerics.xml", + "ref/netstandard1.1/es/System.Runtime.Numerics.xml", + "ref/netstandard1.1/fr/System.Runtime.Numerics.xml", + "ref/netstandard1.1/it/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ja/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ko/System.Runtime.Numerics.xml", + "ref/netstandard1.1/ru/System.Runtime.Numerics.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.Numerics.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.Numerics.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.numerics.4.3.0.nupkg.sha512", + "system.runtime.numerics.nuspec" + ] + }, + "System.Runtime.Serialization.Primitives/4.1.1": { + "sha512": "HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==", + "type": "package", + "path": "system.runtime.serialization.primitives/4.1.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net46/System.Runtime.Serialization.Primitives.dll", + "lib/netcore50/System.Runtime.Serialization.Primitives.dll", + "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net46/System.Runtime.Serialization.Primitives.dll", + "ref/netcore50/System.Runtime.Serialization.Primitives.dll", + "ref/netcore50/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/de/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/es/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/fr/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/it/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/ja/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/ko/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/ru/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/zh-hans/System.Runtime.Serialization.Primitives.xml", + "ref/netcore50/zh-hant/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/System.Runtime.Serialization.Primitives.dll", + "ref/netstandard1.0/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/de/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/es/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/fr/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/it/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/ja/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/ko/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/ru/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll", + "ref/netstandard1.3/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/de/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/es/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/fr/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/it/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/ja/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/ko/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/ru/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Serialization.Primitives.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Serialization.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Runtime.Serialization.Primitives.dll", + "system.runtime.serialization.primitives.4.1.1.nupkg.sha512", + "system.runtime.serialization.primitives.nuspec" + ] + }, + "System.Security.Cryptography.Algorithms/4.3.0": { + "sha512": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "type": "package", + "path": "system.security.cryptography.algorithms/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Algorithms.dll", + "lib/net461/System.Security.Cryptography.Algorithms.dll", + "lib/net463/System.Security.Cryptography.Algorithms.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Algorithms.dll", + "ref/net461/System.Security.Cryptography.Algorithms.dll", + "ref/net463/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.3/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll", + "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/netcore50/System.Security.Cryptography.Algorithms.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", + "system.security.cryptography.algorithms.4.3.0.nupkg.sha512", + "system.security.cryptography.algorithms.nuspec" + ] + }, + "System.Security.Cryptography.Cng/4.3.0": { + "sha512": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", + "type": "package", + "path": "system.security.cryptography.cng/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net46/System.Security.Cryptography.Cng.dll", + "lib/net461/System.Security.Cryptography.Cng.dll", + "lib/net463/System.Security.Cryptography.Cng.dll", + "ref/net46/System.Security.Cryptography.Cng.dll", + "ref/net461/System.Security.Cryptography.Cng.dll", + "ref/net463/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.3/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.4/System.Security.Cryptography.Cng.dll", + "ref/netstandard1.6/System.Security.Cryptography.Cng.dll", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/net463/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/netstandard1.4/System.Security.Cryptography.Cng.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll", + "system.security.cryptography.cng.4.3.0.nupkg.sha512", + "system.security.cryptography.cng.nuspec" + ] + }, + "System.Security.Cryptography.Csp/4.3.0": { + "sha512": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", + "type": "package", + "path": "system.security.cryptography.csp/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Csp.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Csp.dll", + "ref/netstandard1.3/System.Security.Cryptography.Csp.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Csp.dll", + "runtimes/win/lib/netcore50/_._", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll", + "system.security.cryptography.csp.4.3.0.nupkg.sha512", + "system.security.cryptography.csp.nuspec" + ] + }, + "System.Security.Cryptography.Encoding/4.3.0": { + "sha512": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "type": "package", + "path": "system.security.cryptography.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Encoding.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Encoding.dll", + "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll", + "ref/netstandard1.3/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/de/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/es/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/fr/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/it/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ja/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ko/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/ru/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Security.Cryptography.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Security.Cryptography.Encoding.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll", + "system.security.cryptography.encoding.4.3.0.nupkg.sha512", + "system.security.cryptography.encoding.nuspec" + ] + }, + "System.Security.Cryptography.OpenSsl/4.3.0": { + "sha512": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "type": "package", + "path": "system.security.cryptography.openssl/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", + "ref/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", + "system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "system.security.cryptography.openssl.nuspec" + ] + }, + "System.Security.Cryptography.Primitives/4.3.0": { + "sha512": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "type": "package", + "path": "system.security.cryptography.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.Primitives.dll", + "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.Primitives.dll", + "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.security.cryptography.primitives.4.3.0.nupkg.sha512", + "system.security.cryptography.primitives.nuspec" + ] + }, + "System.Security.Cryptography.ProtectedData/4.4.0": { + "sha512": "cJV7ScGW7EhatRsjehfvvYVBvtiSMKgN8bOVI0bQhnF5bU7vnHVIsH49Kva7i7GWaWYvmEzkYVk1TC+gZYBEog==", + "type": "package", + "path": "system.security.cryptography.protecteddata/4.4.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.ProtectedData.dll", + "lib/net461/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.ProtectedData.dll", + "ref/net461/System.Security.Cryptography.ProtectedData.dll", + "ref/net461/System.Security.Cryptography.ProtectedData.xml", + "ref/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "ref/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "ref/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/win/lib/net46/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "system.security.cryptography.protecteddata.4.4.0.nupkg.sha512", + "system.security.cryptography.protecteddata.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Security.Cryptography.X509Certificates/4.3.0": { + "sha512": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "type": "package", + "path": "system.security.cryptography.x509certificates/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.X509Certificates.dll", + "lib/net461/System.Security.Cryptography.X509Certificates.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.X509Certificates.dll", + "ref/net461/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/de/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/es/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/fr/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/it/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ja/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ko/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/ru/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/zh-hans/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.3/zh-hant/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll", + "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/de/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/es/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/fr/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/it/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ja/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ko/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/ru/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/zh-hans/System.Security.Cryptography.X509Certificates.xml", + "ref/netstandard1.4/zh-hant/System.Security.Cryptography.X509Certificates.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/net46/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/netcore50/System.Security.Cryptography.X509Certificates.dll", + "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll", + "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512", + "system.security.cryptography.x509certificates.nuspec" + ] + }, + "System.Text.Encoding/4.3.0": { + "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "type": "package", + "path": "system.text.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.3.0.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Text.Encoding.Extensions/4.3.0": { + "sha512": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", + "type": "package", + "path": "system.text.encoding.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.Extensions.dll", + "ref/netcore50/System.Text.Encoding.Extensions.xml", + "ref/netcore50/de/System.Text.Encoding.Extensions.xml", + "ref/netcore50/es/System.Text.Encoding.Extensions.xml", + "ref/netcore50/fr/System.Text.Encoding.Extensions.xml", + "ref/netcore50/it/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ja/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ko/System.Text.Encoding.Extensions.xml", + "ref/netcore50/ru/System.Text.Encoding.Extensions.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/System.Text.Encoding.Extensions.dll", + "ref/netstandard1.0/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/de/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/es/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/it/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/System.Text.Encoding.Extensions.dll", + "ref/netstandard1.3/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/de/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/es/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/it/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.extensions.4.3.0.nupkg.sha512", + "system.text.encoding.extensions.nuspec" + ] + }, + "System.Text.Encodings.Web/7.0.0": { + "sha512": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==", + "type": "package", + "path": "system.text.encodings.web/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Text.Encodings.Web.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets", + "lib/net462/System.Text.Encodings.Web.dll", + "lib/net462/System.Text.Encodings.Web.xml", + "lib/net6.0/System.Text.Encodings.Web.dll", + "lib/net6.0/System.Text.Encodings.Web.xml", + "lib/net7.0/System.Text.Encodings.Web.dll", + "lib/net7.0/System.Text.Encodings.Web.xml", + "lib/netstandard2.0/System.Text.Encodings.Web.dll", + "lib/netstandard2.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.xml", + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll", + "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.xml", + "system.text.encodings.web.7.0.0.nupkg.sha512", + "system.text.encodings.web.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.Json/7.0.0": { + "sha512": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==", + "type": "package", + "path": "system.text.json/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "README.md", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", + "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", + "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", + "buildTransitive/net461/System.Text.Json.targets", + "buildTransitive/net462/System.Text.Json.targets", + "buildTransitive/net6.0/System.Text.Json.targets", + "buildTransitive/netcoreapp2.0/System.Text.Json.targets", + "buildTransitive/netstandard2.0/System.Text.Json.targets", + "lib/net462/System.Text.Json.dll", + "lib/net462/System.Text.Json.xml", + "lib/net6.0/System.Text.Json.dll", + "lib/net6.0/System.Text.Json.xml", + "lib/net7.0/System.Text.Json.dll", + "lib/net7.0/System.Text.Json.xml", + "lib/netstandard2.0/System.Text.Json.dll", + "lib/netstandard2.0/System.Text.Json.xml", + "system.text.json.7.0.0.nupkg.sha512", + "system.text.json.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Text.RegularExpressions/4.3.0": { + "sha512": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", + "type": "package", + "path": "system.text.regularexpressions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net463/System.Text.RegularExpressions.dll", + "lib/netcore50/System.Text.RegularExpressions.dll", + "lib/netstandard1.6/System.Text.RegularExpressions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net463/System.Text.RegularExpressions.dll", + "ref/netcore50/System.Text.RegularExpressions.dll", + "ref/netcore50/System.Text.RegularExpressions.xml", + "ref/netcore50/de/System.Text.RegularExpressions.xml", + "ref/netcore50/es/System.Text.RegularExpressions.xml", + "ref/netcore50/fr/System.Text.RegularExpressions.xml", + "ref/netcore50/it/System.Text.RegularExpressions.xml", + "ref/netcore50/ja/System.Text.RegularExpressions.xml", + "ref/netcore50/ko/System.Text.RegularExpressions.xml", + "ref/netcore50/ru/System.Text.RegularExpressions.xml", + "ref/netcore50/zh-hans/System.Text.RegularExpressions.xml", + "ref/netcore50/zh-hant/System.Text.RegularExpressions.xml", + "ref/netcoreapp1.1/System.Text.RegularExpressions.dll", + "ref/netstandard1.0/System.Text.RegularExpressions.dll", + "ref/netstandard1.0/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.0/zh-hant/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/System.Text.RegularExpressions.dll", + "ref/netstandard1.3/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.3/zh-hant/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/System.Text.RegularExpressions.dll", + "ref/netstandard1.6/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/de/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/es/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/fr/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/it/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ja/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ko/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/ru/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/zh-hans/System.Text.RegularExpressions.xml", + "ref/netstandard1.6/zh-hant/System.Text.RegularExpressions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.regularexpressions.4.3.0.nupkg.sha512", + "system.text.regularexpressions.nuspec" + ] + }, + "System.Threading/4.3.0": { + "sha512": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "type": "package", + "path": "system.threading/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Threading.dll", + "lib/netstandard1.3/System.Threading.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.dll", + "ref/netcore50/System.Threading.xml", + "ref/netcore50/de/System.Threading.xml", + "ref/netcore50/es/System.Threading.xml", + "ref/netcore50/fr/System.Threading.xml", + "ref/netcore50/it/System.Threading.xml", + "ref/netcore50/ja/System.Threading.xml", + "ref/netcore50/ko/System.Threading.xml", + "ref/netcore50/ru/System.Threading.xml", + "ref/netcore50/zh-hans/System.Threading.xml", + "ref/netcore50/zh-hant/System.Threading.xml", + "ref/netstandard1.0/System.Threading.dll", + "ref/netstandard1.0/System.Threading.xml", + "ref/netstandard1.0/de/System.Threading.xml", + "ref/netstandard1.0/es/System.Threading.xml", + "ref/netstandard1.0/fr/System.Threading.xml", + "ref/netstandard1.0/it/System.Threading.xml", + "ref/netstandard1.0/ja/System.Threading.xml", + "ref/netstandard1.0/ko/System.Threading.xml", + "ref/netstandard1.0/ru/System.Threading.xml", + "ref/netstandard1.0/zh-hans/System.Threading.xml", + "ref/netstandard1.0/zh-hant/System.Threading.xml", + "ref/netstandard1.3/System.Threading.dll", + "ref/netstandard1.3/System.Threading.xml", + "ref/netstandard1.3/de/System.Threading.xml", + "ref/netstandard1.3/es/System.Threading.xml", + "ref/netstandard1.3/fr/System.Threading.xml", + "ref/netstandard1.3/it/System.Threading.xml", + "ref/netstandard1.3/ja/System.Threading.xml", + "ref/netstandard1.3/ko/System.Threading.xml", + "ref/netstandard1.3/ru/System.Threading.xml", + "ref/netstandard1.3/zh-hans/System.Threading.xml", + "ref/netstandard1.3/zh-hant/System.Threading.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Threading.dll", + "system.threading.4.3.0.nupkg.sha512", + "system.threading.nuspec" + ] + }, + "System.Threading.Tasks/4.3.0": { + "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "type": "package", + "path": "system.threading.tasks/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.3.0.nupkg.sha512", + "system.threading.tasks.nuspec" + ] + }, + "System.Threading.Tasks.Extensions/4.3.0": { + "sha512": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", + "type": "package", + "path": "system.threading.tasks.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", + "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", + "system.threading.tasks.extensions.4.3.0.nupkg.sha512", + "system.threading.tasks.extensions.nuspec" + ] + }, + "System.Threading.Timer/4.3.0": { + "sha512": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", + "type": "package", + "path": "system.threading.timer/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net451/_._", + "lib/portable-net451+win81+wpa81/_._", + "lib/win81/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net451/_._", + "ref/netcore50/System.Threading.Timer.dll", + "ref/netcore50/System.Threading.Timer.xml", + "ref/netcore50/de/System.Threading.Timer.xml", + "ref/netcore50/es/System.Threading.Timer.xml", + "ref/netcore50/fr/System.Threading.Timer.xml", + "ref/netcore50/it/System.Threading.Timer.xml", + "ref/netcore50/ja/System.Threading.Timer.xml", + "ref/netcore50/ko/System.Threading.Timer.xml", + "ref/netcore50/ru/System.Threading.Timer.xml", + "ref/netcore50/zh-hans/System.Threading.Timer.xml", + "ref/netcore50/zh-hant/System.Threading.Timer.xml", + "ref/netstandard1.2/System.Threading.Timer.dll", + "ref/netstandard1.2/System.Threading.Timer.xml", + "ref/netstandard1.2/de/System.Threading.Timer.xml", + "ref/netstandard1.2/es/System.Threading.Timer.xml", + "ref/netstandard1.2/fr/System.Threading.Timer.xml", + "ref/netstandard1.2/it/System.Threading.Timer.xml", + "ref/netstandard1.2/ja/System.Threading.Timer.xml", + "ref/netstandard1.2/ko/System.Threading.Timer.xml", + "ref/netstandard1.2/ru/System.Threading.Timer.xml", + "ref/netstandard1.2/zh-hans/System.Threading.Timer.xml", + "ref/netstandard1.2/zh-hant/System.Threading.Timer.xml", + "ref/portable-net451+win81+wpa81/_._", + "ref/win81/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.timer.4.3.0.nupkg.sha512", + "system.threading.timer.nuspec" + ] + }, + "System.Xml.ReaderWriter/4.3.0": { + "sha512": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "type": "package", + "path": "system.xml.readerwriter/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net46/System.Xml.ReaderWriter.dll", + "lib/netcore50/System.Xml.ReaderWriter.dll", + "lib/netstandard1.3/System.Xml.ReaderWriter.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net46/System.Xml.ReaderWriter.dll", + "ref/netcore50/System.Xml.ReaderWriter.dll", + "ref/netcore50/System.Xml.ReaderWriter.xml", + "ref/netcore50/de/System.Xml.ReaderWriter.xml", + "ref/netcore50/es/System.Xml.ReaderWriter.xml", + "ref/netcore50/fr/System.Xml.ReaderWriter.xml", + "ref/netcore50/it/System.Xml.ReaderWriter.xml", + "ref/netcore50/ja/System.Xml.ReaderWriter.xml", + "ref/netcore50/ko/System.Xml.ReaderWriter.xml", + "ref/netcore50/ru/System.Xml.ReaderWriter.xml", + "ref/netcore50/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netcore50/zh-hant/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/System.Xml.ReaderWriter.dll", + "ref/netstandard1.0/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/de/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/es/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/fr/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/it/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ja/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ko/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/ru/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netstandard1.0/zh-hant/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/System.Xml.ReaderWriter.dll", + "ref/netstandard1.3/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/de/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/es/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/fr/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/it/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ja/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ko/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/ru/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/zh-hans/System.Xml.ReaderWriter.xml", + "ref/netstandard1.3/zh-hant/System.Xml.ReaderWriter.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.xml.readerwriter.4.3.0.nupkg.sha512", + "system.xml.readerwriter.nuspec" + ] + }, + "System.Xml.XDocument/4.3.0": { + "sha512": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "type": "package", + "path": "system.xml.xdocument/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Xml.XDocument.dll", + "lib/netstandard1.3/System.Xml.XDocument.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Xml.XDocument.dll", + "ref/netcore50/System.Xml.XDocument.xml", + "ref/netcore50/de/System.Xml.XDocument.xml", + "ref/netcore50/es/System.Xml.XDocument.xml", + "ref/netcore50/fr/System.Xml.XDocument.xml", + "ref/netcore50/it/System.Xml.XDocument.xml", + "ref/netcore50/ja/System.Xml.XDocument.xml", + "ref/netcore50/ko/System.Xml.XDocument.xml", + "ref/netcore50/ru/System.Xml.XDocument.xml", + "ref/netcore50/zh-hans/System.Xml.XDocument.xml", + "ref/netcore50/zh-hant/System.Xml.XDocument.xml", + "ref/netstandard1.0/System.Xml.XDocument.dll", + "ref/netstandard1.0/System.Xml.XDocument.xml", + "ref/netstandard1.0/de/System.Xml.XDocument.xml", + "ref/netstandard1.0/es/System.Xml.XDocument.xml", + "ref/netstandard1.0/fr/System.Xml.XDocument.xml", + "ref/netstandard1.0/it/System.Xml.XDocument.xml", + "ref/netstandard1.0/ja/System.Xml.XDocument.xml", + "ref/netstandard1.0/ko/System.Xml.XDocument.xml", + "ref/netstandard1.0/ru/System.Xml.XDocument.xml", + "ref/netstandard1.0/zh-hans/System.Xml.XDocument.xml", + "ref/netstandard1.0/zh-hant/System.Xml.XDocument.xml", + "ref/netstandard1.3/System.Xml.XDocument.dll", + "ref/netstandard1.3/System.Xml.XDocument.xml", + "ref/netstandard1.3/de/System.Xml.XDocument.xml", + "ref/netstandard1.3/es/System.Xml.XDocument.xml", + "ref/netstandard1.3/fr/System.Xml.XDocument.xml", + "ref/netstandard1.3/it/System.Xml.XDocument.xml", + "ref/netstandard1.3/ja/System.Xml.XDocument.xml", + "ref/netstandard1.3/ko/System.Xml.XDocument.xml", + "ref/netstandard1.3/ru/System.Xml.XDocument.xml", + "ref/netstandard1.3/zh-hans/System.Xml.XDocument.xml", + "ref/netstandard1.3/zh-hant/System.Xml.XDocument.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.xml.xdocument.4.3.0.nupkg.sha512", + "system.xml.xdocument.nuspec" + ] + }, + "xunit/2.4.1": { + "sha512": "XNR3Yz9QTtec16O0aKcO6+baVNpXmOnPUxDkCY97J+8krUYxPvXT1szYYEUdKk4sB8GOI2YbAjRIOm8ZnXRfzQ==", + "type": "package", + "path": "xunit/2.4.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "xunit.2.4.1.nupkg.sha512", + "xunit.nuspec" + ] + }, + "xunit.abstractions/2.0.3": { + "sha512": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==", + "type": "package", + "path": "xunit.abstractions/2.0.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net35/xunit.abstractions.dll", + "lib/net35/xunit.abstractions.xml", + "lib/netstandard1.0/xunit.abstractions.dll", + "lib/netstandard1.0/xunit.abstractions.xml", + "lib/netstandard2.0/xunit.abstractions.dll", + "lib/netstandard2.0/xunit.abstractions.xml", + "xunit.abstractions.2.0.3.nupkg.sha512", + "xunit.abstractions.nuspec" + ] + }, + "xunit.analyzers/0.10.0": { + "sha512": "4/IDFCJfIeg6bix9apmUtIMwvOsiwqdEexeO/R2D4GReIGPLIRODTpId/l4LRSrAJk9lEO3Zx1H0Zx6uohJDNg==", + "type": "package", + "path": "xunit.analyzers/0.10.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "analyzers/dotnet/cs/xunit.analyzers.dll", + "tools/install.ps1", + "tools/uninstall.ps1", + "xunit.analyzers.0.10.0.nupkg.sha512", + "xunit.analyzers.nuspec" + ] + }, + "xunit.assert/2.4.1": { + "sha512": "O/Oe0BS5RmSsM+LQOb041TzuPo5MdH2Rov+qXGS37X+KFG1Hxz7kopYklM5+1Y+tRGeXrOx5+Xne1RuqLFQoyQ==", + "type": "package", + "path": "xunit.assert/2.4.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/netstandard1.1/xunit.assert.dll", + "lib/netstandard1.1/xunit.assert.xml", + "xunit.assert.2.4.1.nupkg.sha512", + "xunit.assert.nuspec" + ] + }, + "xunit.core/2.4.1": { + "sha512": "Zsj5OMU6JasNGERXZy8s72+pcheG6Q15atS5XpZXqAtULuyQiQ6XNnUsp1gyfC6WgqScqMvySiEHmHcOG6Eg0Q==", + "type": "package", + "path": "xunit.core/2.4.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/xunit.core.props", + "build/xunit.core.targets", + "buildMultiTargeting/xunit.core.props", + "buildMultiTargeting/xunit.core.targets", + "xunit.core.2.4.1.nupkg.sha512", + "xunit.core.nuspec" + ] + }, + "xunit.extensibility.core/2.4.1": { + "sha512": "yKZKm/8QNZnBnGZFD9SewkllHBiK0DThybQD/G4PiAmQjKtEZyHi6ET70QPU9KtSMJGRYS6Syk7EyR2EVDU4Kg==", + "type": "package", + "path": "xunit.extensibility.core/2.4.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net452/xunit.core.dll", + "lib/net452/xunit.core.dll.tdnet", + "lib/net452/xunit.core.xml", + "lib/net452/xunit.runner.tdnet.dll", + "lib/net452/xunit.runner.utility.net452.dll", + "lib/netstandard1.1/xunit.core.dll", + "lib/netstandard1.1/xunit.core.xml", + "xunit.extensibility.core.2.4.1.nupkg.sha512", + "xunit.extensibility.core.nuspec" + ] + }, + "xunit.extensibility.execution/2.4.1": { + "sha512": "7e/1jqBpcb7frLkB6XDrHCGXAbKN4Rtdb88epYxCSRQuZDRW8UtTfdTEVpdTl8s4T56e07hOBVd4G0OdCxIY2A==", + "type": "package", + "path": "xunit.extensibility.execution/2.4.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net452/xunit.execution.desktop.dll", + "lib/net452/xunit.execution.desktop.xml", + "lib/netstandard1.1/xunit.execution.dotnet.dll", + "lib/netstandard1.1/xunit.execution.dotnet.xml", + "xunit.extensibility.execution.2.4.1.nupkg.sha512", + "xunit.extensibility.execution.nuspec" + ] + }, + "xunit.runner.visualstudio/2.4.3": { + "sha512": "kZZSmOmKA8OBlAJaquPXnJJLM9RwQ27H7BMVqfMLUcTi9xHinWGJiWksa3D4NEtz0wZ/nxd2mogObvBgJKCRhQ==", + "type": "package", + "path": "xunit.runner.visualstudio/2.4.3", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "License.txt", + "build/net452/xunit.abstractions.dll", + "build/net452/xunit.runner.reporters.net452.dll", + "build/net452/xunit.runner.utility.net452.dll", + "build/net452/xunit.runner.visualstudio.props", + "build/net452/xunit.runner.visualstudio.testadapter.dll", + "build/netcoreapp2.1/xunit.abstractions.dll", + "build/netcoreapp2.1/xunit.runner.reporters.netcoreapp10.dll", + "build/netcoreapp2.1/xunit.runner.utility.netcoreapp10.dll", + "build/netcoreapp2.1/xunit.runner.visualstudio.dotnetcore.testadapter.dll", + "build/netcoreapp2.1/xunit.runner.visualstudio.props", + "build/uap10.0.16299/xunit.runner.reporters.netstandard15.dll", + "build/uap10.0.16299/xunit.runner.utility.netstandard15.dll", + "build/uap10.0.16299/xunit.runner.utility.uwp10.dll", + "build/uap10.0.16299/xunit.runner.utility.uwp10.pri", + "build/uap10.0.16299/xunit.runner.visualstudio.props", + "build/uap10.0.16299/xunit.runner.visualstudio.targets", + "build/uap10.0.16299/xunit.runner.visualstudio.uwp.testadapter.dll", + "build/uap10.0.16299/xunit.runner.visualstudio.uwp.testadapter.pri", + "logo-512-transparent.png", + "xunit.runner.visualstudio.2.4.3.nupkg.sha512", + "xunit.runner.visualstudio.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + "net7.0": [ + "AWSSDK.EBS >= 3.7.100.153", + "FluentAssertions >= 6.8.0", + "Microsoft.Extensions.Configuration.UserSecrets >= 7.0.0", + "Microsoft.NET.Test.Sdk >= 17.1.0", + "xunit >= 2.4.1", + "xunit.runner.visualstudio >= 2.4.3" + ] + }, + "packageFolders": { + "C:\\Users\\zacha\\.nuget\\packages\\": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", + "projectName": "ElasticBlockStore", + "projectPath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", + "packagesPath": "C:\\Users\\zacha\\.nuget\\packages\\", + "outputPath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\zacha\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net7.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "AWSSDK.EBS": { + "target": "Package", + "version": "[3.7.100.153, )" + }, + "FluentAssertions": { + "target": "Package", + "version": "[6.8.0, )" + }, + "Microsoft.Extensions.Configuration.UserSecrets": { + "target": "Package", + "version": "[7.0.0, )" + }, + "Microsoft.NET.Test.Sdk": { + "target": "Package", + "version": "[17.1.0, )" + }, + "xunit": { + "target": "Package", + "version": "[2.4.1, )" + }, + "xunit.runner.visualstudio": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[2.4.3, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.400-preview.23225.8\\RuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/other_langs/tests_dotnet/ebs/obj/project.nuget.cache b/other_langs/tests_dotnet/ebs/obj/project.nuget.cache new file mode 100644 index 000000000000..30c667e8e0ba --- /dev/null +++ b/other_langs/tests_dotnet/ebs/obj/project.nuget.cache @@ -0,0 +1,116 @@ +{ + "version": 2, + "dgSpecHash": "4iijFP6fXJJSu2ul6qTa0jh8jdnsdKCBDTE25L+r57SLAKlnTJhuIMOvW/tri7OzBPB1sEyBCWMVVCQ+I58Ovg==", + "success": true, + "projectFilePath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", + "expectedPackageFiles": [ + "C:\\Users\\zacha\\.nuget\\packages\\awssdk.core\\3.7.108.2\\awssdk.core.3.7.108.2.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\awssdk.ebs\\3.7.100.153\\awssdk.ebs.3.7.100.153.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\fluentassertions\\6.8.0\\fluentassertions.6.8.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.codecoverage\\17.1.0\\microsoft.codecoverage.17.1.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.csharp\\4.0.1\\microsoft.csharp.4.0.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration\\7.0.0\\microsoft.extensions.configuration.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\7.0.0\\microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\7.0.0\\microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration.json\\7.0.0\\microsoft.extensions.configuration.json.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration.usersecrets\\7.0.0\\microsoft.extensions.configuration.usersecrets.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\7.0.0\\microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\7.0.0\\microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\7.0.0\\microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.primitives\\7.0.0\\microsoft.extensions.primitives.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.net.test.sdk\\17.1.0\\microsoft.net.test.sdk.17.1.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.testplatform.objectmodel\\17.1.0\\microsoft.testplatform.objectmodel.17.1.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.testplatform.testhost\\17.1.0\\microsoft.testplatform.testhost.17.1.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\microsoft.win32.primitives\\4.3.0\\microsoft.win32.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\netstandard.library\\1.6.1\\netstandard.library.1.6.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\newtonsoft.json\\9.0.1\\newtonsoft.json.9.0.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\nuget.frameworks\\5.11.0\\nuget.frameworks.5.11.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system\\4.3.0\\runtime.native.system.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system.io.compression\\4.3.0\\runtime.native.system.io.compression.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system.net.http\\4.3.0\\runtime.native.system.net.http.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.appcontext\\4.3.0\\system.appcontext.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.buffers\\4.3.0\\system.buffers.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.collections.concurrent\\4.3.0\\system.collections.concurrent.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.configuration.configurationmanager\\4.4.0\\system.configuration.configurationmanager.4.4.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.console\\4.3.0\\system.console.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.diagnostics.debug\\4.3.0\\system.diagnostics.debug.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.diagnostics.diagnosticsource\\4.3.0\\system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.diagnostics.tools\\4.3.0\\system.diagnostics.tools.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.dynamic.runtime\\4.0.11\\system.dynamic.runtime.4.0.11.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.globalization.calendars\\4.3.0\\system.globalization.calendars.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.globalization.extensions\\4.3.0\\system.globalization.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.io.compression\\4.3.0\\system.io.compression.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.io.compression.zipfile\\4.3.0\\system.io.compression.zipfile.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.io.filesystem\\4.3.0\\system.io.filesystem.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.io.filesystem.primitives\\4.3.0\\system.io.filesystem.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.linq\\4.3.0\\system.linq.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.linq.expressions\\4.3.0\\system.linq.expressions.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.net.http\\4.3.0\\system.net.http.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.net.primitives\\4.3.0\\system.net.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.net.sockets\\4.3.0\\system.net.sockets.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.objectmodel\\4.3.0\\system.objectmodel.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.emit\\4.3.0\\system.reflection.emit.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.emit.ilgeneration\\4.3.0\\system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.emit.lightweight\\4.3.0\\system.reflection.emit.lightweight.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.extensions\\4.3.0\\system.reflection.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.metadata\\1.6.0\\system.reflection.metadata.1.6.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.typeextensions\\4.3.0\\system.reflection.typeextensions.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.interopservices.runtimeinformation\\4.3.0\\system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.numerics\\4.3.0\\system.runtime.numerics.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.serialization.primitives\\4.1.1\\system.runtime.serialization.primitives.4.1.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.algorithms\\4.3.0\\system.security.cryptography.algorithms.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.cng\\4.3.0\\system.security.cryptography.cng.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.csp\\4.3.0\\system.security.cryptography.csp.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.encoding\\4.3.0\\system.security.cryptography.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.openssl\\4.3.0\\system.security.cryptography.openssl.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.primitives\\4.3.0\\system.security.cryptography.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.protecteddata\\4.4.0\\system.security.cryptography.protecteddata.4.4.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.x509certificates\\4.3.0\\system.security.cryptography.x509certificates.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.text.encoding.extensions\\4.3.0\\system.text.encoding.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.text.encodings.web\\7.0.0\\system.text.encodings.web.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.text.json\\7.0.0\\system.text.json.7.0.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.text.regularexpressions\\4.3.0\\system.text.regularexpressions.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.threading\\4.3.0\\system.threading.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.threading.tasks.extensions\\4.3.0\\system.threading.tasks.extensions.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.threading.timer\\4.3.0\\system.threading.timer.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.xml.readerwriter\\4.3.0\\system.xml.readerwriter.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\system.xml.xdocument\\4.3.0\\system.xml.xdocument.4.3.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\xunit\\2.4.1\\xunit.2.4.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\xunit.abstractions\\2.0.3\\xunit.abstractions.2.0.3.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\xunit.analyzers\\0.10.0\\xunit.analyzers.0.10.0.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\xunit.assert\\2.4.1\\xunit.assert.2.4.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\xunit.core\\2.4.1\\xunit.core.2.4.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\xunit.extensibility.core\\2.4.1\\xunit.extensibility.core.2.4.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\xunit.extensibility.execution\\2.4.1\\xunit.extensibility.execution.2.4.1.nupkg.sha512", + "C:\\Users\\zacha\\.nuget\\packages\\xunit.runner.visualstudio\\2.4.3\\xunit.runner.visualstudio.2.4.3.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/tests/test_networkmanager/test_networkmanager.py b/tests/test_networkmanager/test_networkmanager.py index 20bb595aefcf..8a42273a0b86 100644 --- a/tests/test_networkmanager/test_networkmanager.py +++ b/tests/test_networkmanager/test_networkmanager.py @@ -1,6 +1,5 @@ """Unit tests for networkmanager-supported APIs.""" -import pytest import boto3 from moto import mock_aws @@ -93,11 +92,18 @@ def test_tag_resource(): # Check tagging global-network gn_arn = client.describe_global_networks()["GlobalNetworks"][0]["GlobalNetworkArn"] - resp = client.tag_resource(ResourceArn=gn_arn, Tags=[{"Key": "Test", "Value": "TestValue-Global"}]) - assert resp['ResponseMetadata']['HTTPStatusCode'] == 200 - updated_gn = client.describe_global_networks(GlobalNetworkIds=[gn_id])["GlobalNetworks"][0] + resp = client.tag_resource( + ResourceArn=gn_arn, Tags=[{"Key": "Test", "Value": "TestValue-Global"}] + ) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_gn = client.describe_global_networks(GlobalNetworkIds=[gn_id])[ + "GlobalNetworks" + ][0] assert len(updated_gn["Tags"]) == 2 - assert updated_gn["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}, {"Key": "Test", "Value": "TestValue-Global"}] + assert updated_gn["Tags"] == [ + {"Key": "Name", "Value": "TestNetwork"}, + {"Key": "Test", "Value": "TestValue-Global"}, + ] @mock_aws @@ -161,16 +167,18 @@ def test_describe_global_networks(): global_ids = [] for i in range(NUM_NETWORKS): global_id = client.create_global_network( - Description=f"Test global network #{i}", - Tags=[ - {"Key": "Name", "Value": f"TestNetwork-{i}"}, - ], - )['GlobalNetwork']['GlobalNetworkId'] + Description=f"Test global network #{i}", + Tags=[ + {"Key": "Name", "Value": f"TestNetwork-{i}"}, + ], + )["GlobalNetwork"]["GlobalNetworkId"] global_ids.append(global_id) resp = client.describe_global_networks() assert len(resp["GlobalNetworks"]) == NUM_NETWORKS # Check each global network by ID for g_id in global_ids: - gn = client.describe_global_networks(GlobalNetworkIds=[g_id])["GlobalNetworks"][0] + gn = client.describe_global_networks(GlobalNetworkIds=[g_id])["GlobalNetworks"][ + 0 + ] assert gn["GlobalNetworkId"] == g_id From d9bf2dab39d4d226fa4890238580d6d58d399300 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Mon, 20 May 2024 16:51:48 -0400 Subject: [PATCH 06/15] fixed test --- moto/networkmanager/exceptions.py | 12 +++ moto/networkmanager/models.py | 90 ++++++++++++++----- moto/networkmanager/responses.py | 41 ++++++--- moto/networkmanager/urls.py | 2 + .../test_networkmanager.py | 75 ++++++++++++++-- 5 files changed, 179 insertions(+), 41 deletions(-) diff --git a/moto/networkmanager/exceptions.py b/moto/networkmanager/exceptions.py index 1780cb570937..301e39ff47ec 100644 --- a/moto/networkmanager/exceptions.py +++ b/moto/networkmanager/exceptions.py @@ -1 +1,13 @@ """Exceptions raised by the networkmanager service.""" + +from moto.core.exceptions import JsonRESTError + + +class ValidationError(JsonRESTError): + def __init__(self, message: str): + super().__init__("ValidationException", message) + + +class ResourceNotFound(JsonRESTError): + def __init__(self, message: str): + super().__init__(__class__.__name__, message) # type: ignore diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 81288ccff4c8..8593ea01e945 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -2,24 +2,28 @@ import random from datetime import datetime, timezone -from typing import Dict, List, Optional, Tuple +from typing import Any, Dict, List, Optional, Tuple from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.ec2.utils import HEX_CHARS -from moto.utilities.tagging_service import TaggingService + +from .exceptions import ResourceNotFound, ValidationError class GlobalNetwork(BaseModel): def __init__( - self, description: Optional[str], tags: Optional[List[Dict[str, str]]] + self, + account_id: str, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], ): self.description = description - self.tags = tags + self.tags = tags or [] self.global_network_id = "global-network-" + "".join( random.choice(HEX_CHARS) for _ in range(18) ) - self.global_network_arn = f"arn:aws:networkmanager:123456789012:global-network/{self.global_network_id}" + self.global_network_arn = f"arn:aws:networkmanager:{account_id}:global-network/{self.global_network_id}" self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" @@ -37,6 +41,7 @@ def to_dict(self): class CoreNetwork(BaseModel): def __init__( self, + account_id: str, global_network_id: str, description: Optional[str], tags: Optional[List[Dict[str, str]]], @@ -45,14 +50,14 @@ def __init__( ): self.global_network_id = global_network_id self.description = description - self.tags = tags + self.tags = tags or [] self.policy_document = policy_document self.client_token = client_token self.core_network_id = "core-network-" + "".join( random.choice(HEX_CHARS) for _ in range(18) ) self.core_network_arn = ( - f"arn:aws:networkmanager:123456789012:core-network/{self.core_network_id}" + f"arn:aws:networkmanager:{account_id}:core-network/{self.core_network_id}" ) self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") @@ -78,17 +83,21 @@ def __init__(self, region_name, account_id): super().__init__(region_name, account_id) self.global_networks: Dict[str, GlobalNetwork] = {} self.core_networks: Dict[str, CoreNetwork] = {} - self.tags: TaggingService = TaggingService() # add methods from here def create_global_network( - self, description: Optional[str], tags: Optional[List[Dict[str, str]]] + self, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], ) -> GlobalNetwork: - global_network = GlobalNetwork(description, tags) + global_network = GlobalNetwork( + description=description, + tags=tags, + account_id=self.account_id, + ) gnw_id = global_network.global_network_id self.global_networks[gnw_id] = global_network - self.tags.tag_resource(gnw_id, tags) return global_network def create_core_network( @@ -101,31 +110,35 @@ def create_core_network( ) -> CoreNetwork: # check if global network exists if global_network_id not in self.global_networks: - raise Exception("Resource not found") + raise ResourceNotFound core_network = CoreNetwork( - global_network_id, description, tags, policy_document, client_token + global_network_id=global_network_id, + description=description, + tags=tags, + policy_document=policy_document, + client_token=client_token, + account_id=self.account_id, ) cnw_id = core_network.core_network_id - self.tags.tag_resource(cnw_id, tags) self.core_networks[cnw_id] = core_network return core_network def delete_core_network(self, core_network_id) -> CoreNetwork: # Check if core network exists if core_network_id not in self.core_networks: - raise Exception("Resource not found") + raise ResourceNotFound core_network = self.core_networks.pop(core_network_id) core_network.state = "DELETING" return core_network - def tag_resource(self, resource_arn, tags): - # implement here - return + def tag_resource(self, resource_arn, tags) -> None: + resource = self._get_resource_from_arn(resource_arn) + resource.tags.extend(tags) - def untag_resource(self, resource_arn, tag_keys): - # implement here - return + def untag_resource(self, resource_arn, tag_keys) -> None: + resource = self._get_resource_from_arn(resource_arn) + resource.tags = [tag for tag in resource.tags if tag["Key"] not in tag_keys] def list_core_networks( self, max_results, next_token @@ -134,10 +147,43 @@ def list_core_networks( def get_core_network(self, core_network_id) -> CoreNetwork: if core_network_id not in self.core_networks: - raise Exception("Resource not found") + raise ResourceNotFound core_network = self.core_networks[core_network_id] return core_network + def _get_resource_from_arn(self, arn: str) -> Any: + resources = { + "core-network": self.core_networks, + "global-network": self.global_networks, + } + target_resource, target_name = arn.split(":")[-1].split("/") + try: + resource = resources.get(target_resource).get(target_name) # type: ignore + except KeyError: + message = f"Could not find {target_resource} with name {target_name}" + raise ValidationError(message=message) + return resource + + def describe_global_networks( + self, + global_network_ids: List[str], + max_results: int, + next_token: str, + ) -> Tuple[List[GlobalNetwork], str]: + queried_global_networks = [] + if not global_network_ids: + queried_global_networks = list(self.global_networks.values()) + elif isinstance(global_network_ids, str): + if global_network_ids not in self.global_networks: + raise ResourceNotFound + queried_global_networks.append(self.global_networks[global_network_ids]) + else: + for id in global_network_ids: + if id in self.global_networks: + global_network = self.global_networks[id] + queried_global_networks.append(global_network) + return queried_global_networks, next_token + networkmanager_backends = BackendDict( NetworkManagerBackend, diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index e93500364f00..103a5bc81d98 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -58,38 +58,38 @@ def delete_core_network(self): def tag_resource(self): params = json.loads(self.body) - resource_arn = params.get("ResourceArn") tags = params.get("Tags") + resource_arn = self.uri_match.groups()[0] + resource_arn = resource_arn.replace("%3A", ":").replace("%2F", "/") + self.networkmanager_backend.tag_resource( resource_arn=resource_arn, tags=tags, ) - # TODO: adjust response - return json.dumps(dict()) + return 200, {}, json.dumps({}) # add templates from here def untag_resource(self): - params = json.loads(self.body) - resource_arn = params.get("ResourceArn") - tag_keys = params.get("TagKeys") + params = self._get_params() + tag_keys = params.get("tagKeys") + resource_arn = self.uri_match.groups()[0] + resource_arn = resource_arn.replace("%3A", ":").replace("%2F", "/") self.networkmanager_backend.untag_resource( resource_arn=resource_arn, tag_keys=tag_keys, ) - # TODO: adjust response - return json.dumps(dict()) + return 200, {}, json.dumps({}) def list_core_networks(self): params = self._get_params() - max_results = params.get("MaxResults") - next_token = params.get("NextToken") + max_results = params.get("maxResults") + next_token = params.get("nextToken") core_networks, next_token = self.networkmanager_backend.list_core_networks( max_results=max_results, next_token=next_token, ) list_core_networks = [core_network.to_dict() for core_network in core_networks] - # TODO: adjust response return json.dumps(dict(CoreNetworks=list_core_networks, nextToken=next_token)) def get_core_network(self): @@ -98,3 +98,22 @@ def get_core_network(self): core_network_id=core_network_id, ) return json.dumps(dict(CoreNetwork=core_network.to_dict())) + + def describe_global_networks(self): + params = self._get_params() + global_network_ids = params.get("globalNetworkIds") + max_results = params.get("maxResults") + next_token = params.get("nextToken") + global_networks, next_token = ( + self.networkmanager_backend.describe_global_networks( + global_network_ids=global_network_ids, + max_results=max_results, + next_token=next_token, + ) + ) + list_global_networks = [ + global_network.to_dict() for global_network in global_networks + ] + return json.dumps( + dict(GlobalNetworks=list_global_networks, nextToken=next_token) + ) diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index 7f960f6c55c9..b0a8ef09b2bd 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -11,4 +11,6 @@ "{0}/global-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks/(?P[^/]+)$": NetworkManagerResponse.dispatch, + "{0}/global-networks/(?P[^/]+)$": NetworkManagerResponse.dispatch, + "{0}/tags/(?P[^/]+)$": NetworkManagerResponse.dispatch, } diff --git a/tests/test_networkmanager/test_networkmanager.py b/tests/test_networkmanager/test_networkmanager.py index 9197fc566700..8a42273a0b86 100644 --- a/tests/test_networkmanager/test_networkmanager.py +++ b/tests/test_networkmanager/test_networkmanager.py @@ -1,7 +1,6 @@ """Unit tests for networkmanager-supported APIs.""" import boto3 -import pytest from moto import mock_aws @@ -75,21 +74,58 @@ def test_delete_core_network(): @mock_aws -@pytest.mark.skip(reason="NotYetImplemented") def test_tag_resource(): client = boto3.client("networkmanager") - resp = client.tag_resource() + gn_id = create_global_network(client) + cn = client.create_core_network(GlobalNetworkId=gn_id)["CoreNetwork"] - raise Exception("NotYetImplemented") + # Check tagging core-network + resp = client.tag_resource( + ResourceArn=cn["CoreNetworkArn"], + Tags=[{"Key": "Test", "Value": "TestValue-Core"}], + ) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_cn = client.get_core_network(CoreNetworkId=cn["CoreNetworkId"])[ + "CoreNetwork" + ] + assert updated_cn["Tags"] == [{"Key": "Test", "Value": "TestValue-Core"}] + + # Check tagging global-network + gn_arn = client.describe_global_networks()["GlobalNetworks"][0]["GlobalNetworkArn"] + resp = client.tag_resource( + ResourceArn=gn_arn, Tags=[{"Key": "Test", "Value": "TestValue-Global"}] + ) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_gn = client.describe_global_networks(GlobalNetworkIds=[gn_id])[ + "GlobalNetworks" + ][0] + assert len(updated_gn["Tags"]) == 2 + assert updated_gn["Tags"] == [ + {"Key": "Name", "Value": "TestNetwork"}, + {"Key": "Test", "Value": "TestValue-Global"}, + ] @mock_aws -@pytest.mark.skip(reason="NotYetImplemented") def test_untag_resource(): client = boto3.client("networkmanager") - resp = client.untag_resource() + gn_id = create_global_network(client) + cn = client.create_core_network( + GlobalNetworkId=gn_id, + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + {"Key": "DeleteMe", "Value": "DeleteThisTag!"}, + ], + )["CoreNetwork"] - raise Exception("NotYetImplemented") + # Check untagging core-network + resp = client.untag_resource(ResourceArn=cn["CoreNetworkArn"], TagKeys=["DeleteMe"]) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_cn = client.get_core_network(CoreNetworkId=cn["CoreNetworkId"])[ + "CoreNetwork" + ] + assert len(updated_cn["Tags"]) == 1 + assert updated_cn["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}] @mock_aws @@ -101,7 +137,6 @@ def test_list_core_networks(): client.create_core_network(GlobalNetworkId=gn_id) resp = client.list_core_networks() - pytest.set_trace() assert len(resp["CoreNetworks"]) == NUM_CORE_NETWORKS @@ -123,3 +158,27 @@ def test_get_core_network(): assert resp["CoreNetwork"]["CoreNetworkId"] == cn_id assert resp["CoreNetwork"]["Description"] == "Test core network" assert len(resp["CoreNetwork"]["Tags"]) == 1 + + +@mock_aws +def test_describe_global_networks(): + NUM_NETWORKS = 3 + client = boto3.client("networkmanager") + global_ids = [] + for i in range(NUM_NETWORKS): + global_id = client.create_global_network( + Description=f"Test global network #{i}", + Tags=[ + {"Key": "Name", "Value": f"TestNetwork-{i}"}, + ], + )["GlobalNetwork"]["GlobalNetworkId"] + global_ids.append(global_id) + resp = client.describe_global_networks() + assert len(resp["GlobalNetworks"]) == NUM_NETWORKS + + # Check each global network by ID + for g_id in global_ids: + gn = client.describe_global_networks(GlobalNetworkIds=[g_id])["GlobalNetworks"][ + 0 + ] + assert gn["GlobalNetworkId"] == g_id From 1a9963e51d1f91ef8576b898a7f3fa9820546caa Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Mon, 20 May 2024 20:30:38 -0400 Subject: [PATCH 07/15] Revert "Merge branch 'add-network-manager-feature' of https://github.com/zkarpinski/moto into add-network-manager-feature" This reverts commit bd56574f0ab28b52991f5449c06804f29ebcc829, reversing changes made to d9bf2dab39d4d226fa4890238580d6d58d399300. --- ...CoreApp,Version=v7.0.AssemblyAttributes.cs | 4 - .../net7.0/ElasticBlockStore.AssemblyInfo.cs | 23 - ...ElasticBlockStore.AssemblyInfoInputs.cache | 1 - ....GeneratedMSBuildEditorConfig.editorconfig | 11 - .../ElasticBlockStore.GlobalUsings.g.cs | 8 - .../net7.0/ElasticBlockStore.assets.cache | Bin 82831 -> 0 bytes ...cBlockStore.csproj.AssemblyReference.cache | Bin 90769 -> 0 bytes ...ElasticBlockStore.csproj.nuget.dgspec.json | 91 - .../ElasticBlockStore.csproj.nuget.g.props | 29 - .../ElasticBlockStore.csproj.nuget.g.targets | 10 - .../tests_dotnet/ebs/obj/project.assets.json | 6936 ----------------- .../tests_dotnet/ebs/obj/project.nuget.cache | 116 - 12 files changed, 7229 deletions(-) delete mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs delete mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfo.cs delete mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfoInputs.cache delete mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GeneratedMSBuildEditorConfig.editorconfig delete mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GlobalUsings.g.cs delete mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.assets.cache delete mode 100644 other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.csproj.AssemblyReference.cache delete mode 100644 other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.dgspec.json delete mode 100644 other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.props delete mode 100644 other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.targets delete mode 100644 other_langs/tests_dotnet/ebs/obj/project.assets.json delete mode 100644 other_langs/tests_dotnet/ebs/obj/project.nuget.cache diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs deleted file mode 100644 index 4257f4bc63d7..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")] diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfo.cs b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfo.cs deleted file mode 100644 index 45475875dbcb..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: Microsoft.Extensions.Configuration.UserSecrets.UserSecretsIdAttribute("45a910a7-aba2-43ee-ad3c-ccad57f044d9")] -[assembly: System.Reflection.AssemblyCompanyAttribute("ElasticBlockStore")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] -[assembly: System.Reflection.AssemblyProductAttribute("ElasticBlockStore")] -[assembly: System.Reflection.AssemblyTitleAttribute("ElasticBlockStore")] -[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] - -// Generated by the MSBuild WriteCodeFragment class. - diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfoInputs.cache b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfoInputs.cache deleted file mode 100644 index 0c11439f95fa..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -12d1ea2343a09a8827b7acbf48544090a64af1ba diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GeneratedMSBuildEditorConfig.editorconfig b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index 76eb72663712..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,11 +0,0 @@ -is_global = true -build_property.TargetFramework = net7.0 -build_property.TargetPlatformMinVersion = -build_property.UsingMicrosoftNETSdkWeb = -build_property.ProjectTypeGuids = -build_property.InvariantGlobalization = -build_property.PlatformNeutralAssembly = -build_property.EnforceExtendedAnalyzerRules = -build_property._SupportedPlatformList = Linux,macOS,Windows -build_property.RootNamespace = ElasticBlockStore -build_property.ProjectDir = c:\Coding\moto\other_langs\tests_dotnet\ebs\ diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GlobalUsings.g.cs b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GlobalUsings.g.cs deleted file mode 100644 index 8578f3d03de5..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.GlobalUsings.g.cs +++ /dev/null @@ -1,8 +0,0 @@ -// -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Threading; -global using global::System.Threading.Tasks; diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.assets.cache b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.assets.cache deleted file mode 100644 index 7e06fb23ba9bd655c0d4a2f612bcb185ad952c2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82831 zcmd5_2b>*8d6#8Nw%jB)*_MlJxyVg>I-Qy=BP5@yEy+T6whSDQcklL2&wBUX@%B9x z(`*RE5PI*;Ktdp$B!q;BklqU+2}uZ~kdQ`tBMJF``(|dpnVs3$-P?CTKd;~I?9BK5 zzp}H_zL~=h?A>|cqD71LeEFFdZvVpDpZ5HxjjlTMjW>Stqp!H_bx(c#>$|^r=Z>eo ze&)S<>t9~9=xpQ*NAH<dl1RiMd++cx@((CTb_6XzF+nPDT?W z!Iofn{rX^d)5t`vRcoGpjEYUQyDb!`M-w}bj*ablAlQB1STNe23U^YLs1XHI&E{fo zqJL-MqQ8mrX%FY7Rf!rFr6X8gG)&aqSF;2bXk2NLpPT*PrX zt`~SX&Nk|Bo%VD$sKZ<9?Gx~jnQ&qlPM$Cp`lXbED*wZcs8?%_b$e5dcI@h-qHr*F ztTD@RtpEJ?q z=gV;s=PPje-nfJ_UZ1cPksY9%)^ua0*MED&J1DGz7m{gZcT#4Qm*J>Z0tKO>H;zzU ziR;a0YT?q8P@Vi~t9G6##O;SL6Qe6#$-YG{Z!iQfl1;5=`gp z{aa;#z6SR%s{k~sg^Ou7u8A4IYYl+c;r@*k0PN9+EUb6%nv_y0eF(?;<+&4FZ@^uR z`*L1OW}oY{Pc)_gw2ar1(GM#EF0Z}80DL3vUsFoII^elu_@LKo&78{B!5$Wcxn|cG zKySi*IZq{^{T9PavpqT4Xw4J=*>5%M6$LrKn+<@s;65r-U(IzIvyE=!1e#R&>Zil1 z0LOEyfoE+og>}QIJJ+mrr`w&`pgs9$Sntl_|Ux5pHx7>z%;* zWJ#=~;A8EmTf*YAvuFd?<5slQ^miGiUx)k07apd=F->&jm@i#$bZBu#JmCh#G?n{g4} zEx4ZR<4dDA!E~oK8=h=;jz<%lf??L3m7F&~ABTE-k#&#C$_=m;tcdm9xQO*VxSr=> zEyimw8i6h&joP5&YSsH@IZCs0ZVo-gcz}m>4z__8SNFZRujS)iZ#SE0(!}Ej4(210 z`Dl`tOa3&2`*z%)EXz(;o zjAqS*9RS1#gZX-phxD7p7~$X~w7Y|S5*+MK0ro!plIx7(dS+e);*DvBIW!jM<6L(M zuJRq-jr-YrT&EhfnHE|^jXD~#;bd>d%YPRuv5QJ@Bzp`bd&?o|w%g6fg+!T#BN?X> z9LYWd$$s4XYEj`eTqiWJLft9H3$;nQiH4MLk$wRVXB)UCa6gvM zW15ZD^IZy2Es+Dr#4Yh0gWq#;e>^|GAUq{~&iQicymu!BIF9ETIKBh-zNV+J2j&Wb zW8E%IA6Q#q>K!?RjQfz0^Q{?tCvl(i4JE#L+TOzY#NBT5x`AN|_c_~vgdu9zkJC7C z9`VQedASBcgZp%T?tEO$$KBBbn=!Z_!+p;7H@Z2Z4eSzK)yhXyRxWwN;Qc7>d-;4n z;f*&y&LFv9s74HfVV}=9ZXjynK4(LQA({=lwW(USHZdH~bfVE0W9?mr=b$LV^)oBb zwD3zUh&Ha``tiRaHvQP&lsSP&wkV#D`xoW4SQJl?M*%*m@n1==z*=oERI=m|QPR>G z=orW%+~@2JB#k{Qj>L)6ZM?3*wTJt5PJIY!e)mlQu>0-_1ItO=H;Q37h8bT>Zn)kf zRgufq?!JD0?z5*16sK{2su+p}I_jPF9A?N)H0mZAHBCM&djk^8{(iABQH+Cn%mDQQ z+`m6(w^n#ZV4#v+ghq>II5HdRUZg^T{Rt@!{)Gnk7vVl<3qfLU^=88kdYvxArVt(y z1vriu8#rEqd+(s4Xd*};uxTUds%SOSux;f*%Hv>NM!;T4JuZMgfnTaNUy3U)P|WG} zI*sn>px!w>*KN;qYM6-(YR#E8Qjg6#HK^KHnAGhP807?ZDgs=iFB3pzZTg+K_YTAh zjoN{REvzuf=t3)f+F|Y%#W~2A8z5gXZ*6L3w^q3xn0B+j(g6A@+WWVm*pG(f)^_c=Ra@n~jlgU9RCZ1#PPf#ADv zpR*&TA;{4VQ)bn{*gt2lHE_KS_c=QT8m=ff8BV5W!iB{&BvEiQoaEMdy}+;pzf_aF z0he!ineeC>gMAqbXKjwepJQ-*Bkps4K4XrZaHiL+b)3Dz^yf3yz>$72N8j*G0+g($ z-i&+S+A^tzV^}qqt411^Ik^GeVsL&d?sK+jx{4mw`eAy)*FQ@5k5hh*;%x?sx0gbJ z@kAN{w^n!?WDUYlP=1c$9R`Yb;y!0P;M8mrt?n9@0-eNX%nd`mppT%yk+{IoxB$oT zE(6EAai6owA{?it+I6%pa!gkch(~sb+#JDs39C6QnJdUk%Y=$>v@n2V$-ab>cGi`M1K#maGh_9$LLOo?lfMAit<=KUz!kUv|% zS6@+?;T&aXFgW2$rPk&sMW1ZS8|28#mU&VUyC4L^zS5G)+-YT_myrt|DZgEWWZYY> zJ*2#=t+bQoHRWM8J+yl~7{{uvU~Gy!WYINAaXcbN3FNXK8h%-Hb^7^ut%GF)@l$4e zA}UJ;Y@m{eFpOF@y4i=xRLZj|VPr0^pvRX1-I!R-9vo;)c4{3OmRPjhSQ0^LE6l|T zl(rQRnC`SN-7JC0D!ay|Z?0tX-=fc)lM8k=T_Df>Z;Z(a*3pR{Y zN^RqOs9hnkX)+P&o2^d*ecFpMUT@DR$NnkHusw@ib6C33j4Pm#BBhwV56W_F*dW5f z?O=E$*f1Y0r73R20@nFZ+^aA~rzqTKczt1NN>9qa+NEhR?d_4sI>)e7bW34ajMM>1 zsyB(T&t5Q$+4XsOYlU>JNR3x#rLX>=6 zI++&9h?P5(<93z9w{(VbOU|G{>t878DnWoRs)(1G(8HT-57nBKe#D!LNW4mf9x(pEUogX?V%0=3+LvaGgd(LeXgM4tV$Qex2+>W)w4(-Ub1 zy|xR)#5(1WNVO?udLUtF57;~;<+(sGrnzCdzmnYttWQqQmWyY+K9#`r8BWSA-HM)w zsYjk{d}^h)Ceu=sS=uK_4R#~IfF4QrFdhZ_48Wddv>pZXH1FgokDX-L?J@06X z=9_()BARAgbc;Y}rzD3mDd)|ZIazfqg|?H_edUf!qG+#ovHmlh+J$*u!mutgyEz0* zC1jPM4MEZaS!HMsP!GsyZptH_P0JIHU((YR0!;i=_E)5v#fj+wKdqb`JEKJDxol{P z2FU2qjgpVdAN0r0bgUKvG`2+qq=%a0P4rCaM;ivB2TS7d1^Vk!F=E0-btrkcNS2Y~ zly;#=i-%w+;rxCAjR(-}RsGwruVpr1LJzOAJyZh~l;i4tj!v(I@bBP69JU+9VY~En zDXx`C|9ObTw=cn?@5V)){_nv>o&JyG`d(b0!1YO7--qk_aji7_+(U8bvLr#hc_Kl* zc^iozK>Eg{r<54USa-`htwV7HnPhOiU_kda20w`O>kSY9~HEI%t7nNkxo`w?HTPtmPNE~I_IcR zp#dlim@d=+6k|2u0Vu|a4?y{56lPUae7$J2I^%d5EJZ549G7n`Y{F4g3)MuaGc+p& z8uH0fx*m5zx zx>oJecsaBg&+aiTUdw=eyG5Zhm{iZxJ5t^&r!k~CsOWPB^acjhyTZfjl{(OBqRtt> zH4I=mPb7d*ywwZ^1fHDiiL`gW9$zI_6PBsbNvW?0@dFWas^=q6fh=*f(cm_jLX&fBmF~)f0TtuhGo_UpR42?714>8_3>tmhweB<62 z79RJO)918kvpi~`e#uyWb3n%VnM?~gmse_>i$prP<{J1rz~kI1k8fjg^Z2%$tJNru zZhmoXjQ{hP-hE9w@vgTpSyC*Xjq$57emUPX;y0)EVDh?{KFh;xT4%g-wzr6PnfNs( zaaf#d*|;^vmB+2+Y|nO75SmNJNu-U+%Jth|k`|A{V#6JdRiG^5Nk-POVSkQ;dw2?le4j-;VB%O!+7)99N#Kw;W069`(XZF8pW`<&bgmv@`2o5#~Ox`^^lW+t^2 z^Rz%e+0s((!VpKgQFIIayA2n$BWYd6`M5rf>nCu12G>vG`YBwW#r4y;&fxkSuAjm6 zd0g*aFsbrwGnq@kp9OH6fIo-yGq|{b12x-JSfSZ|-XYa52&sM%zht&w!ZlE{X;M{a zwqFKto7sK^>1S|p0S9U}1cg`kw*9I@s$UaQ{W^ZhY`=kPpk~vgs?cn|3E(!f{T9;C z;Nk)f)NIq83eEQ04yk@eNc9E$lG%P2*FeptNmZfQz6jtpv;7{@&*0($4%BRoZiQz1 zeTP(kAf);de#vZqh-;u`)1<18V6T)+Y=bc^@f=DO?dJ5r(L{=p&GKMKMA3BP2yf5!E`L3Z6t!74P~zW}?jv@ zGq|{n1AXT@y$UV&Zw{&cT}bsG_$ABzC$53MbDC5Yn(e;;+-A0KBK-_5F5p1T)~&J| z@ZS!p{zpjlzxXAyeGAt>&8A6Jq1h-J#%8v&kbVY2aRJ{t$QtFbW9tw;S!K_Au|u@8 zg=pvCmu$BLzaLmw(JD0HQiqi1TBKY616J9YJI^87G9lXe_$32gfZqi$AQ!Dd177Hm z@*<0rZ!77h)N;u_wkvCd*?Mx9btLvKSYt6RIn;cyL$>8Yw$C9iS&)XBy-TSb1L*UT z%{WjimryGlLS14Js%-1Bpipji6z53g66{ikV3%108=NO3Q4=xYR6EkEhs%HJ*6AL$K8r!3O7v+9W__o_K>pwi|_PdJW&&>8c$sB5Ny~Y*x)=-n|-Rx6E`?y8xgX7O?V=0~=MX_$ac4ojZdcy&J#0aE8~gxIE30}5o&Ors0me# zC*JE2>}eLk-Z`-GM00|$GH2ZG5bx@?at*KoF($05amo7} zvW+gNY}(9cW&XI!A=_>t8=vSsfU4V;LQcVC35373)?sGyZbhs3Q0uC{hv++w%F2rSn@?2!}g@cwje2O8t zNFcdbAX)A}@;o5%1-mEfJ#hYMSZ|*QJGGf`!Wtwwj3c>|m@UoU_@Pz7*s;be9X=+F zxI*BS3sx?5;QbEZ^@WKuynHX?)R}N24C!cmY!*j!nLumhyqj70^*(^Tl9@283}LQu2opk>ay!^+P88U;Ur63ZrzgdG zDKp^L8o;k}0G|f%Z@0acnHbj_Vyt$EF;n`j(6=})@mA1=cJ}k>cx7~hA;^smL5@KX z?*=*6w?Y@Bn!TEtCDs@M+~g3T0RhUr2_!&&gOK^}<;;NJYyiK-0sK(_U+}%28O~b` zoNFC8j~7!g^<0Z>k&x6jMn{3~kHCQ6CVde+P6FAvg*aDL3xYxCthKj zz=j=~ji6cI#=ND^Tws>wXD(1@d5Z&27kCDFCIf@C6%c4x=x$sD=^k9R9&rzld>dwo zjptHlHl&6WHcyDX?vgV}x!JY>17RA$MVL;2w++)tr03k%bh3ZUsn`lH1!!0T633x( zG^fCYqdDzB^BB@|?k%2q)MRhVW&NZUCd83>R}X!ZOt34>2_x})2mg}?}#Af zKi8TI^+I6=`JsBZL#X#4J!ge0w`4c=gm>3!61hBEo8x=2f$zNzeD6cLw{t1qL7^$n zp7DObt^>ch0FMg+p1?2p`THFLd;sY$&*?SxZQI*(VJnK7E@xNYT>Hu0;)rh!{eytS zEA9_Dpnn+Yd3A4xo;t_Et$RCqd#mP^Lif_SpK=KB5u|(Pw}kV!1Q2JLPvIaqUoTWFXQbbNds{XBJ;3H$3n4UIWQ%!* zIbDO?Npp~xqy$+jx z0_nb$5E8B2zTSmTH6xP^^O^qMVj%jY1JU;({U!ODw#J6~>7x@;ues`SClJSL(ea3% z;lnV0Kd|r`>IWQ{e-P<8zh2mL+_n*Z3aL`&BPehrtWAZTqn!r6;@rybGIaVw4tzh1 z^m%NQpAGJjUF~{rHf(8)^7k0Xe#C+7Q%Lu9Wahb%KC|ch1giJrmp+ysz-6mVeiW#D zwMmJM_8F27f-`y6hj0;+596{S`7t2zjVsP;BYuYIDPZ83KH|Xi`MM$FaQ^apVAg+kt!o5uqzm0TK#P8sj6!8Vhm)j$vQ^D|h{8v~B znB!{7i33$5wmG>X;$s@D83t3Q(GHPy;_pHZF8>!vF34%tiNA+*lK=PdOY;8#uFno$ ze#bYVv4FQrdDiGOT} z{$+>gehSAxs?4w}PoSz#06yk6X_%qzwJmAlfP9E?V z_$4)b4Od|`Y#x9bB+dD$;V&T$SHoZ7-lm4HBc0Un*Z3th{0*)WYA8`3I$j6q4Vy(B zJ3lr2EyUq!_&eO&)bRI6CpCNnzodqLz~x$;`|ftNt_A%@@DTp4coyp<4y=Y~|+% z{@)JZ|095NmFJwsG|wULkNigycK269)*PuG??*HpR`z?W%GD~+q zmQT$twAl*I1NJO{vH8Seq?1o@)qXPPyD2<3$US%EarKfjS<*h{OxD>BkO02hL@_ku7a*eiTxHn!3fcQ_X>AVa#whHxfq*H~;&E<_}$@E5xKxORY zk>?7BJS&Af6&fg-%V!|f7`4AvqmlM`z7jz3pEA%@4uP%~0`XSRJPni<$ZDYZ$+OBK z&ox3G{ss3QJdx>e<{9hRZ6=RYyIY7RZ|LvR%lof~GS#&X(XO+Y%DY2EDbdQ(VvR$_n}m!v<5zyOK9aKm8HM#88cwH!dgt_9w>{IT zAqF=%wQ2p`^{~@zOgHK^1cKzNA3aul1Vl#}Q7-C}#v6ExL)2S^sN9@S4OCQ%MTdh5 zC0*-~^fneN? z!X31KZ+;r-7NG?AVp6uca)}HPL@#pn!`fA)NaPY5&k&z0oh(F%Jo=$BxJlXCXkCtu< zhVg}2YZOP5c*x93>GYDmx;}vRqX7x^!U*szl4U zgU|ZLd~}imMDlh;lI^x-jnsst@MYd%Fd-G?CP54@PI5=>W_XK14^wH39_64ySBXMe zKxR1En;CK!PvvzH8gI9oQJRpFixZ0T5}{QVMB|-W9W`>=nKwz1G*bQCL~NxbrpItD zjax#)>oR223lOc#1ubnN@=iAiEguoM-bNr8tu@2eRIL+j%1cU>Afn3z(ftqJkSedV zg9$HWy+UP$8_vqL<9DTsDL+ZilganQcp}10Gu{(>0j^f$NIs|;YSr=)fz^pv2?16S zZq5|YT7<}6AjncY=$aG>RSC&((JNVYEDe|1MckCx+}4Zotl+v_kdZTJx2B3K>&PtJ zw3L>70y0diXCxA`{-h^k?fP-F9y97smWvl=pY@EwEEg4)mHrVG@|Ldjl`AKisOYsq zT`VY3`{oj%$xT6damS2z~{qfcG7bLMlKL-`MTA~q2iT>B8V5G_?nTeFFtp)!8 z$3ahFZ?%kS+Q>;nWGyQn8Nr9LjuI`hVKkNv0gM7fbJ&wb@YYWawO z{Osxvk{3GTv+F8CWMy@t<%x$OZxb~yjRgsPr8C9I92w;pimV~x(&?BucMahvKs?o` zq>Ok=53?zcNCL@FP}X@#VjNwTQRf*siMxeJV>axhiEL1slQ@HM%1K0IO_PcqOSzkp zB$X9pq+`)D73Y=VSXw^9acMeuYY93-!N~2FPj5Oek+@JK$HTEGj7se$qcBzcJQo$a zs-F<{w>_S0G~;OzjG4$0;-vR03)5$Wie6_c8lJ-33JnLZb23+1f~j`5g{Bv1opT7i z=X1r-_htK|{j+n;M!nH(p57HsH(KG;l0CI%6rM+4{pN{q>YVXTFFc2av^ROC2Wlsy zXzF-i>@w~vW#16ox97@iqmE$|8buKL#F&D<^>l#9kxtYfsO-;Au<`IiyT>sV5uq(Q zb^KnBSP3iAAdQa%5L4_Ez9hEH9Uc;Kris{7uI`(%(`#Y-j^IQi>OtGx-c+Lfei`OBQ_>ujAroxJMEnFWi;8)rM)4Rsq|%|?YYwj+87@_rwgCB zbQe_7pg^*AYpgdJdq_QE8+_;Gb)`;dSEGaJ%68}U*`RjrXs_Arb;8B<=!i!&_kb7g z5h!WsUD%=FEkVGd?y0bZx;JTuoaa^C*(kMmDzqp@15rY*9U7hz1T2aP%lP3Y?ab}m zib1Kxq0M775GCZ=q2Vb(z@nJxP8pBUj)2as7?fH(-LZI#2BL&qJ2X5c2v`);=$288 zb|P_Z#h}#UM%SVk4MYjKc4&A?5U?ob(OMbBXb0rxRt!olezay$j0U2FTst&8B?wp) zbG%(fG1_^pxfO#_i;uT0iqSxnkZXsArvw3uV&?edcwP}VX~&1=Ep;|ZEuL#y6r+JC zA=eHKPYD9|r<)M*L82v`W~=7}QfJF*X}{o-_~#)%pb}z^n%GLvu=r4?S3*ylv{M#y z`w&Vk?({4^q=6_Q*A5L&2?7?ybW44}wL|}MD+Z+&cWobV4MYjKc4&A?5IB(bWpO%Q z3Aee&cd#CM#>rf`)~G*E7Cl$|aWoIG5(4j*jFM^c5>%XOE7SN9YU78a<@GF~w(f*b zTi2;J4y=U0LTwyl2`Y!vM$PKz`p=o%uJr{Ct@(@ZFNDWf0;2ivmJA?Sy#HRZm~@Uo-7@2 z$pDg7&SD!4K{5Sq(@+#EYq5DGKas^jiU`}-(6&2gc^7P53!vr%O!`<`q#Sw(H0+g*3x5vHAD z>fUZ*DOTKqM;oXrtmy69Fje8=mNzK_PnM>)WB|!3XL*w}1jY2bO+!(vti?9kSXp7^ zZr4W23KzH7CIe5Fj<;k0$tq{DjfS9@ez$2Tij}pDe~Upi_9hqB@MwBqt}u;5>H61) zEKBA0`XFT$whV)(u@qDMjx?TP1e})Rql1ODE-c5#1`E@0TF#9uOZmcbZb(^$otEQR ziYZ=Lj^imt;9M*o>S9^maw81+;v`C%*2Y|J3n{+KG1P4h5nd}^p=4bfj}A*>fiF*p zCW*HuiOH%@J-~@jj^xN@#_ev(QHBCH7+-L*$B$|e%W*^-q1upxgAomD7ldHgqhW~+ zt0Ng!y^IWLrTlggk{A^kn@V|avWlQDEWRztW4xt&az+QLWpssoGG(}Zo3H8u4;GEB z@oy(q1O08;7!Wzkd zG9F7$l|dNd+{{~2uc!(nU?*$J;2oB05AWC9tfkUX>JTjy4$<#O`%=VJJt{+*%)l>^ z&Z4@A+a}3P#JlAym3}3ZA4~Q;TuZ(Zwr6se4a>VOvu6co-D%*@$}2T%4=WOza&1d# zR#gz0J^<7I#1p^GBIg;b;<2Bq$$|P(8bBv=_|<3jPxbrukC?P zGV~^XDx;k?xy_Ri&m`-Uj4Za!gODZ(Q37U#N`)LDQGU{roaUigTT{4`urEc)EJQkz zVS#Salq=(fv_&<^7t;3Z&JRNuF6$=2cQMB}$UyDpQgqSecScf{BvklfBB5_^C#P6ojFI zW+;^%4QYo16;Vx0r+++>qBfyXE20-hEqS%9)GpFeRb8W{7E;KAIAM4!YCb5Pw!BIN zrM^-Wz4A)Y=o^Qyo$zzbra`YaBq+}Tr|!G?R#V@<;msMY0(c)o+RxHT&e==yGt+yXm`5D*^7HbvDxFS1oeX8->s-Vh(>&Z&@K# z3|W1o5U@n8pjDY#9kk>$gI!3RIkQ`Nzx{3Yh$c?0QB=w)TToFS)KXeDiP&E}kJ$wg zkJ_R+C9uO))tIM4@%^)L6cvZs)F(NUibrkvpeQ1CwdF%{zsH$8P~;|cRQV`Uq6qA;;I2c7X YB)ppqs*)2$k5su<>cv*_TtV&s0Cn_qQ~&?~ diff --git a/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.csproj.AssemblyReference.cache b/other_langs/tests_dotnet/ebs/obj/Debug/net7.0/ElasticBlockStore.csproj.AssemblyReference.cache deleted file mode 100644 index 699e530fd1b236aee54d30e94ef90f5c38817293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90769 zcmeHQ378bc_1{5|&7#~!Jb*<((hbzCGAi zz5VL<-m6#ds5;v7R8dipXKvMqK&>J-C_=pS+-OWp2Ewu`iE1Drgcc{@c$#`63*cbjxWK0|CRNgV)Rb;jGn)= z%WEYgJatx92bIncm1I(@-?tU*`7>FY+`n0B}Y$nG#~>2+3&3n+Dy0a=@wQ z>rkEu{8`C8$7EjA_{mHb1zwMsM|RijN}5^V3eiyN~Q)=JK=6`l*wTA2oXsoG3uZzW?5R z!;93m$5q_+!E9bEkU)xQzWDthQ!@%58meDArBz6zD?-q?H0vgtRU^m*Us z`yc=GTirhR?HK=vp6%Xx{FQ-~&!s)x=P&H`pBDzdGu1QI%xE6ag+jxEK7S+<3J(c~ z!{t8RzcBf^3u!}FCC6f7NJS2L5;?h2D5WT(M5yAiwGZh?_S6})A3+n?!rHUX9HSxWRVH z3?ul3*-n{(Z$>yTVyVn^2{9BEV$lo4FaVwWbyT<7y=>%~7{V{oLhFn(f_gqnsBQGP zYc`ksLOMO0Sw=8Q^kIxAWC?jzljX1&^Nx`uSrsx~mw_tmWBVA4I*sBNj8DXw4 z#(b=x3bwef`Lg-VOk$v)J@1y09u(;}eH=yz^8WAEecWbg!-`(bBi6pVs`A;Md)jOh zA1>{=VD?Y0+j+IvYvqkkj_!WkXZMf3tBY?-hgbc({UCB zivDuDtrcthtDBJeqilj09+Pa52(N78s|)qT+5vydNPczS0e=hsfIrocWt_48+r_0J zkyL6g`Y?!J)I+&gX9ReHG2rzr2@!=25J>r6UM#$64 zCff60xOA}LKF*esUvy{L^2-QMfxae7k!V9oNxSHvx{w_1Zm>rX(saxUD+W5#j$HuL zwIAjt^hrHCfoyP6whwmV?1WCjuR7xFgw7~HN7aRzMPCn5t(9R-i|4BP%Gtq?M@4k2 zb)AVl6W&3kw;vB)5SVeo(Dzn(YKW)847nHXVZ(&-PNNZa~s+Zy1oZ2bwJgMEgCxIl~4-dn%(DqMjHW8x#yUzznH`;GJ-GgFaz3M4_MI&E+tQbr+z*Hu7An&GdN2cu> zlRRiG3wl}o1SukeazpdOsm45NvAVQpW<+|1_zyPM4{y}kq+7Es4ZNK6uoHQ4eK zoyqxyd9E|ljNqle4=`+a(p#sZ=A(M#j}ev}5(dUTz;*<`ARGGkp zo@SX5u+%H{NG~m|-B#BeihgjVp2HA+LB^GO4vaH`nyF`|K^>KdUG}4WTJ&AEooA+# z^9!+^XQngF2;K$9qK+;W&l6rC) zBUCRCyIClA#mQ-cj9(maa++Y45scI~G2>!#Q0p+tR6|t>F;NN&WV6j_Z$!GD5f7Z-Ba4sZ)@?rJ(*IAQx| z@|jc@<#p71I4m!(WlVM5H?#%zinxcvagf{HWA4etJrj<93MSb7{>{Y%Q%`tV7&t$g z(B>G#7Bbj4;blL9p4{RDll|X;d3C>uaxt&eI}$8!Z%8Y|n{h{inUdZ-;tl}w^BK(_ z_3{ez)`YT;32BLTR6MOJatwqM4oAV|6|D?&JF`E$&=EF?tuUVt>@LDd)VDfj7RD;* z7&&uA4d@Tv>NpJH7jC@OabTPg)YP{+=GV6i>qFTb-s(7w;TLSY)p6pS5!x)gW5S-# z6x2{7Sz-}uaM4gsQ{V2?}C}eZ9>Heo-dk3^sf-!a2Y| zlQVB`thV4vbpkm~)9{PsGz+JU&||R&nl8l!2`#SSj6tqb6;X&ohy&0h_CU5{_(hl4 z1KD!U2<;gRbk)#ONZJ0#kX?QeoMiCG2&*t{tR_XJ#op>AIGsayN05L$Ugye6%P)@S zJ8;YhRq7kmG*Yz!y5%N@PJuL(5srky8&ne^zj)#es)=1jU{X)9q+fb!N>o~$&eFyy z7BeNkaN?AYnO{bDQa>vq{nmy~LcSayHlzKXU+nPN6&ja}5IdjtBAIbn!H$AcbF98l zWGHB&R#?@cwI)9Ez|BovDD`EqMpV7yRW;!~FG(I-1SP(B88i{{iy~eIP3$rPlX?We zcxl6Q!tql$0)S~~LReV!pEv@5In4t-HwB;6_Zj$ov%8LA=a2UpR$7{97M5AX`wT0` zd7$dXz%tRv$wHLaVt{QWbyB0@7e!JhHBK3!M?LeUNnMQ)7pI9R|CQ2i2>=%d>fvza zE1Q}oqJ?E;apo(V=RB}=V{fVFMbd9Bs?D;pNGmMTI-MNw#d#6?5&U9|^CI?qGs2mP z1+F!_lLpx?lev!nX9W%d-@MNNmQ&Z$s zX!hEu(eR5Qsf`+^jL@Ur5Uk1EG;wiCOp+&)f-d5QV3Lks6mdf^$?Xpb$vP2TG8$Eh z3!Fh0NhC4de+QD7TSiDSi5t|3N>el>*2+=x##q>Cl5qo)mL{Tw8#f?1&I469aRcfN z`g`6lAmX*u*%ISseA@vu zu`Mix#qCD6Z07;88+Bz8B|?IUK{oQAGhTW|?>8c&L_o;Ptvaz~P72!#x?81i0KE9pR!^oBkFw6&Drl+L{?+2sMZiC9>cV8Cy^bEx#&g zq^>O-1FG&1u5f`W{ZK7_Z$lFy&}Sr0bQ-tnnEN~xBQ&Z%8D`794!AhxgZhSjN^l_( z{>-KF#)LtR7;o4KGJYi=Z`cWD0Y<7qPrVOkniz>89JNgF*l04Lb*Ec40Z>zg`*57b z@Cz{R!*SxA5!%!*Z6e;kIv!QM6DEz*E_`sT1i+UzwKk4l)bXWFt#Qu?dFrPMS$UWg zZD>@RMeQ?qp3vZfPZerq7{9pVQ-xY#o)PTS52?1YV64;tH9n-;Ldq|^_>gJ~!;B!M z9^fHgyVd(zae&8m0Kf3!0FN!(j6kM-r3dlylSNesYj-Uhx(i-5zS6^noL_+Pl^!-s zGlG|;4%-!bL0N*04#NO`A-2(BV4D%h)K73FmdA=({j4Q*ri1XssF{DO^7lyzjC z5#aM^M{x-T3|kEsV|LNwoIu4dr1e?6GQyC0Xjkie(5^5}qPjmV?G39g#6fUq*GkJT zo;b8?<(Ltw3`{Ygn)z;W`sf(~-n9ps_0$=dVuwNe;tZzPfptcJGgRZu{idMCu;gZ| zafX&(c(c_w!!aXNlhhYj{i-ePwgGf-pQ0B!CcV?8q!1xaX#`t+8eWN7AIdN0QFjx- zNCea)CIT~}$&?VQ0!4?TZBEZM1^QTigTDR2W1u1MgoE1DYBV=tRgp-HF< zDbWOxgMw1={uZO~RykmrJtj8Jbp zz>AkvCcuT&gkbgL zfag50b<>JKy-FR6<|Nr1Nd*rbSE-vRX<}Mf%?G$j-OO(uc)IC2pdVDzz0aCf3T2I; znuV5MOpTzLg=0pjGK;7nuRIEOEoUx^M((<;J+?+voW}Btx;3KWGy{yJKw{;VoB1%G zk_m2jAB*dmJ&IrC!#R0pg!vKDd?>U4PYkLBTi1LT%P;<|Yd*{XBPpPt8`ak>vkuRS z6Gu3L!)D}0od)rXyOA4pVx1A-^o!4I88CKT(DY;!pVc7CzdRv{344JOBRM1K}y|&h1XVE5~|#w2#LlP@0eJFjLvy$Br%3n z4STS;#_|g~_F!|(03#`&?!nsgQ6)9lZD6nm>o|yC+_4Ai$odZ)@MHo2hulF9z>|sp zTELSDMu01{y=!}kt(HP^*mTl09KX>|_eEPD$uIPcuJ~t!|KcNq|CEF%)g_5I1;F38 zRrd9P{G#9BhJ8lhA0a0X0&QUQ;cDmBoje%JuL!j6l65uh{Pey10%Vh9?i60;Ega`b}Oyz0De)&(N$Zv8G%eaJ88T; zvRhIpnh;{%nNcY$H`_*WaCXvp6u)re?4&dAj4-EO8D_(QjaK8zuxx66F~*f)**r7C zmYvZ~vmn-KwSPpk1~%_F1!b^G4&WEzETc`b%?M=b=P4SP8EOm7@c2AMOyf42_`^Hi z6rb;iIR*6GCp2B0hDp8H50wLGS8QYsctj`a!Y=FLPM5zqXm7E{K!BJFgadt-SHc(cO>x?EcYrb@6TK@Tz~; z-xl;~7`&m!r@q^_Ja+8H_Gk8c^Wtst?oQv&UbE+q@uuMMb_RDrao2s44g0 zVm~X#d7$d|1tb2-@(LmBuNW%&%h8`fAD)sXO)mUpe&6sS5A~8<{k_oEfNv-DBx9fb}*D<1F-CN)4JB{HNYoNi4Cckpj0nOD9A5Hr=b(R@zl4M*||{JLui6q zSWdFZh010;52)RE%k=GVqk;}~(?U&Eje;bJF#=^!TEh-!QPTvtK<#iA&v{_$#tt`9 zx5LJpPiYdBn2<<_VOV7$8+a17Q#SN8@hvO`p4ST3c_8dYd+Be048-b%= zkn)Qy?#Hk&%m`BINh9L5)8-qNX6PNqNh2#Qzo6ozk(Facs4{e|GaS^)GGUTmXdBbD zHQTiYdVbN(cCCSHMhLSs#Zh#%C8#ZUST?3uBjp!Y8&j+?%m`BYaY@5}Hr7>eo{YF8 zCgK-HBQA+qWdtDoV3i`EQ?1iiGbX*0P`2zCF54=I3d3V|+zzH7ZY0 zVQB%rV+D9MW9avm4Jxfl#nhA{j*`TbiuTfjN^4WWSTrZv6KMN_pHVu0l7KQ;**TpGrAf zQBySS<1iGlu;MZJ0(-v8l8k+*zjpJI-`uBqh3|59n3W; zDlG=93F?NcsxggQ@N&BhxQZD+IiJ~b;Vw`QNNMkzxyZ|U4-hz8I3Q)ErMcJ?mc_yW zDJ#c-s_WIpP2^al?LKSojp}uY<4O%58p^49=xa|FF+HuA;jlnwSxMc!ReQ-71TyMNFn}yA|bT1%;fw6 zi|-7!nIlHk9`Y9K#&bjGcqH!Tw~4`ehYv#3pp9zQroND?9Gdmfsr_sDi2e(!d2 zHfr&)9KqWi%*xXc4FH@&dasUa3mhGZocC7N)S746m|mc{s&Zn4T8JDG?dna9Kg zUF-_!iLxZBNflkYC@4hfG&q?Zh~Im({0I)=YT}B&_x#ZFDm4U`fY=bP54B}e%Bajh zqC7o`?p6t0AcPu)fLBU2h-x4qgcfPty8)p&nG7%TA}JLEe(x}^udLELB!DC~fZk2} zUsT=h_xb{3X4ch>o#?GX{{yR4gLG7<<>~hP4#e+0TK)^?zz!3yz4K=uxc(KT>6vAf zsasDQan>{EZM|^QrayIA`p33&OvDF5XK zugc2u(2&ZCvSE?om10HNP;G9IG@IJ+UE(DMlR8{wUSGN28L;Ye>Hx2k{KYz6B|0bQ z*ZjgY8JJ{*mbOr|rd<(~L6%e@i4;)PI=uoF-b!y7MympSdv2Oyj6nfl?S5$cwEO<3 zoqf^SO5`~j$&Gec1pYV-i#WL7f2Ia5-#T*RT47J*rGsylEInh}2^T)G;=1B#-9EnM zY3D~1Itgv=zF)$GC? zz{R5>MNY~Q6FelA2N`DpKczt|CwyiXD;}zQ&ZunjLcl&kR zfOpI#gZDoEmIm(`ZU=ihVZ8OPhXH$GWeH+#rvSvkSFRadH}c>nZ_wge9?&TmBDy?M zYugOTQY6}tQUp!61L=q@R&DeHArnMHNfkK;q+vq0gQspyEBh%h6;8uwZsxxl(ZB7K zO>dmN``$hy)_-)-^81u$YdWm%c;bg^8aDmo>vwOOzjV~JyH5RZ^{yVCFW$bk*|NYR z=4Kuwz;%dR2nUA`8}6?hGCUj>(86nH5Y~GRTLQd7Fo`N(GG%mmiNhG;0U#SsE&W25 zjWcskkC%J~zk;G1;!H4-nhg}BCK8Q_U{vywn{&}42xDP{O!ju^-Zx`ad@kn8{1kp= zM?K`ZU?e@uC`ivjbkaj!GGjhRqPXffT~bbWF*~%6mnf`7Xrap)U?de+QILw1w&NE= z3JS91B^=tG2Av|PjfZt8_}k-k8S%Q9A>tAInv%tbHW7>@CO_XrTXzzQ+!PIKH}B@* zyJ+hLI^9oy0O@yt%;fT2oS(t3(AfJf&NIPCYJQfNoiR%dx&kYSPQ#D6G%{u$YxTh( zE%ldl)-B9HTg9>;&#$CNhcF9_q$EEdMU#?bOHvi%4KX z&B!#$Ni~mECLT{o+O=LNkz=#m{6YB5x0&T;Fieq2#;RnyC-5sOMBu~4Jg^d!OOL#u z*t#RXDZ53NkN<9W1gE7<6)itK;vk{SeNtQDs-=dgM3gJd*}7hb=`<%bHV@@je~JC0 zS%1wFz)Epf9BG-bb9i7=34-xIxAC=-5w>c4k?SqLwhSlm22T4SuQl0b8TMX!wXVOV z4*F{h;#YISxmahVvsWAeopp9QH3v(UKxM%t8vqlMYdF7BK}3pkO#&m4Psv8dxIc)twZ^2bA#=qoOD<@$VS?Qd1T1#ud zNn*2#DiyUl)^wrBa8xnr!!?Sy|3a%@tpP%FVMz11sefAks#d1j$wK4#k?tqpFNaZ$ zdQkY&=@-R1Ot?6>ZpeL|UwG*ZsqUh7Uw6+-m7iXG&l~-J|K$Vz9orr+zQ^ae{>kDKu6=S{|3@39u2*aByeV1z z(5=d>eaHWy>x+*)^1EMOHvZxlKmFHD%kEg;X-MbMkN51~<(xUY)U(?>ldeK6+dSnj zzq@tIe$O-ur+}U|f39jy{bfRUXhf_C4iPE@Q4DA1$XtW09az>Xcv`21H=+n}u~}9Y zB?IMNA5ndb;TxjCml}si&oxLv-^Q+)@sob(NO@-~k*6Jcs}4GPCFtv609aTpV$-dx z0)m-2L~Sm)4=i)jDYiD3Q!w&YXP^l=G<^vQ zKC0#t9HiA=qpgROhHP4Zeb~yCJ4;^IVDFkumTsfdu)`mRq3->>ZGZ93rz^hdbi?cW z*F4(em)qxDc~xW6+yiT`c(2dc#c!`#KBf1>8_zp!)#NtUh|5ud$vB^x$oyq`)};^$hhA7XYWqi>z}vV`p57I@_LM HHu(NOX&e-c diff --git a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.dgspec.json b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.dgspec.json deleted file mode 100644 index 2868d507dce1..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.dgspec.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "format": 1, - "restore": { - "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj": {} - }, - "projects": { - "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", - "projectName": "ElasticBlockStore", - "projectPath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", - "packagesPath": "C:\\Users\\zacha\\.nuget\\packages\\", - "outputPath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\obj\\", - "projectStyle": "PackageReference", - "configFilePaths": [ - "C:\\Users\\zacha\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net7.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net7.0": { - "targetAlias": "net7.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - } - }, - "frameworks": { - "net7.0": { - "targetAlias": "net7.0", - "dependencies": { - "AWSSDK.EBS": { - "target": "Package", - "version": "[3.7.100.153, )" - }, - "FluentAssertions": { - "target": "Package", - "version": "[6.8.0, )" - }, - "Microsoft.Extensions.Configuration.UserSecrets": { - "target": "Package", - "version": "[7.0.0, )" - }, - "Microsoft.NET.Test.Sdk": { - "target": "Package", - "version": "[17.1.0, )" - }, - "xunit": { - "target": "Package", - "version": "[2.4.1, )" - }, - "xunit.runner.visualstudio": { - "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", - "suppressParent": "All", - "target": "Package", - "version": "[2.4.3, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.400-preview.23225.8\\RuntimeIdentifierGraph.json" - } - } - } - } -} \ No newline at end of file diff --git a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.props b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.props deleted file mode 100644 index 32db65dc5c7d..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.props +++ /dev/null @@ -1,29 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\zacha\.nuget\packages\ - PackageReference - 6.7.0 - - - - - - - - - - - - - - C:\Users\zacha\.nuget\packages\xunit.analyzers\0.10.0 - C:\Users\zacha\.nuget\packages\newtonsoft.json\9.0.1 - C:\Users\zacha\.nuget\packages\awssdk.core\3.7.108.2 - C:\Users\zacha\.nuget\packages\awssdk.ebs\3.7.100.153 - - \ No newline at end of file diff --git a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.targets b/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.targets deleted file mode 100644 index 9c6720d4b52a..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/ElasticBlockStore.csproj.nuget.g.targets +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/other_langs/tests_dotnet/ebs/obj/project.assets.json b/other_langs/tests_dotnet/ebs/obj/project.assets.json deleted file mode 100644 index 3eb32ec844d1..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/project.assets.json +++ /dev/null @@ -1,6936 +0,0 @@ -{ - "version": 3, - "targets": { - "net7.0": { - "AWSSDK.Core/3.7.108.2": { - "type": "package", - "compile": { - "lib/netcoreapp3.1/AWSSDK.Core.dll": { - "related": ".pdb;.xml" - } - }, - "runtime": { - "lib/netcoreapp3.1/AWSSDK.Core.dll": { - "related": ".pdb;.xml" - } - } - }, - "AWSSDK.EBS/3.7.100.153": { - "type": "package", - "dependencies": { - "AWSSDK.Core": "[3.7.108.2, 4.0.0)" - }, - "compile": { - "lib/netcoreapp3.1/AWSSDK.EBS.dll": { - "related": ".pdb;.xml" - } - }, - "runtime": { - "lib/netcoreapp3.1/AWSSDK.EBS.dll": { - "related": ".pdb;.xml" - } - } - }, - "FluentAssertions/6.8.0": { - "type": "package", - "dependencies": { - "System.Configuration.ConfigurationManager": "4.4.0" - }, - "compile": { - "lib/net6.0/FluentAssertions.dll": { - "related": ".pdb;.xml" - } - }, - "runtime": { - "lib/net6.0/FluentAssertions.dll": { - "related": ".pdb;.xml" - } - } - }, - "Microsoft.CodeCoverage/17.1.0": { - "type": "package", - "compile": { - "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} - }, - "runtime": { - "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {} - }, - "build": { - "build/netstandard1.0/Microsoft.CodeCoverage.props": {}, - "build/netstandard1.0/Microsoft.CodeCoverage.targets": {} - } - }, - "Microsoft.CSharp/4.0.1": { - "type": "package", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Dynamic.Runtime": "4.0.11", - "System.Globalization": "4.0.11", - "System.Linq": "4.1.0", - "System.Linq.Expressions": "4.1.0", - "System.ObjectModel": "4.0.12", - "System.Reflection": "4.1.0", - "System.Reflection.Extensions": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Runtime.InteropServices": "4.1.0", - "System.Threading": "4.0.11" - }, - "compile": { - "ref/netstandard1.0/Microsoft.CSharp.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/Microsoft.CSharp.dll": {} - } - }, - "Microsoft.Extensions.Configuration/7.0.0": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" - }, - "compile": { - "lib/net7.0/Microsoft.Extensions.Configuration.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - } - }, - "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" - }, - "compile": { - "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - } - }, - "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" - }, - "compile": { - "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - } - }, - "Microsoft.Extensions.Configuration.Json/7.0.0": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.Configuration": "7.0.0", - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "System.Text.Json": "7.0.0" - }, - "compile": { - "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - } - }, - "Microsoft.Extensions.Configuration.UserSecrets/7.0.0": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "7.0.0", - "Microsoft.Extensions.Configuration.Json": "7.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileProviders.Physical": "7.0.0" - }, - "compile": { - "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.props": {}, - "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.targets": {} - } - }, - "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.Primitives": "7.0.0" - }, - "compile": { - "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - } - }, - "Microsoft.Extensions.FileProviders.Physical/7.0.0": { - "type": "package", - "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "7.0.0", - "Microsoft.Extensions.Primitives": "7.0.0" - }, - "compile": { - "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - } - }, - "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { - "type": "package", - "compile": { - "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - } - }, - "Microsoft.Extensions.Primitives/7.0.0": { - "type": "package", - "compile": { - "lib/net7.0/Microsoft.Extensions.Primitives.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/Microsoft.Extensions.Primitives.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - } - }, - "Microsoft.NET.Test.Sdk/17.1.0": { - "type": "package", - "dependencies": { - "Microsoft.CodeCoverage": "17.1.0", - "Microsoft.TestPlatform.TestHost": "17.1.0" - }, - "compile": { - "lib/netcoreapp2.1/_._": {} - }, - "runtime": { - "lib/netcoreapp2.1/_._": {} - }, - "build": { - "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.props": {}, - "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.targets": {} - }, - "buildMultiTargeting": { - "buildMultiTargeting/Microsoft.NET.Test.Sdk.props": {} - } - }, - "Microsoft.NETCore.Platforms/1.1.0": { - "type": "package", - "compile": { - "lib/netstandard1.0/_._": {} - }, - "runtime": { - "lib/netstandard1.0/_._": {} - } - }, - "Microsoft.NETCore.Targets/1.1.0": { - "type": "package", - "compile": { - "lib/netstandard1.0/_._": {} - }, - "runtime": { - "lib/netstandard1.0/_._": {} - } - }, - "Microsoft.TestPlatform.ObjectModel/17.1.0": { - "type": "package", - "dependencies": { - "NuGet.Frameworks": "5.11.0", - "System.Reflection.Metadata": "1.6.0" - }, - "compile": { - "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} - }, - "runtime": { - "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {} - }, - "resource": { - "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "cs" - }, - "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "cs" - }, - "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "de" - }, - "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "de" - }, - "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "es" - }, - "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "es" - }, - "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "fr" - }, - "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "fr" - }, - "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "it" - }, - "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "it" - }, - "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "ja" - }, - "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "ja" - }, - "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "ko" - }, - "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "ko" - }, - "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "pl" - }, - "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "pl" - }, - "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "pt-BR" - }, - "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "pt-BR" - }, - "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "ru" - }, - "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "ru" - }, - "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "tr" - }, - "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "tr" - }, - "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll": { - "locale": "zh-Hant" - }, - "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": { - "locale": "zh-Hant" - } - } - }, - "Microsoft.TestPlatform.TestHost/17.1.0": { - "type": "package", - "dependencies": { - "Microsoft.TestPlatform.ObjectModel": "17.1.0", - "Newtonsoft.Json": "9.0.1" - }, - "compile": { - "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll": {}, - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, - "lib/netcoreapp2.1/testhost.dll": { - "related": ".deps.json" - } - }, - "runtime": { - "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {}, - "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll": {}, - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {}, - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {}, - "lib/netcoreapp2.1/testhost.dll": { - "related": ".deps.json" - } - }, - "resource": { - "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "cs" - }, - "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "cs" - }, - "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "cs" - }, - "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "de" - }, - "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "de" - }, - "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "de" - }, - "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "es" - }, - "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "es" - }, - "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "es" - }, - "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "fr" - }, - "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "fr" - }, - "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "fr" - }, - "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "it" - }, - "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "it" - }, - "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "it" - }, - "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "ja" - }, - "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "ja" - }, - "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "ja" - }, - "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "ko" - }, - "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "ko" - }, - "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "ko" - }, - "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "pl" - }, - "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "pl" - }, - "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "pl" - }, - "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "pt-BR" - }, - "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "pt-BR" - }, - "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "pt-BR" - }, - "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "ru" - }, - "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "ru" - }, - "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "ru" - }, - "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "tr" - }, - "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "tr" - }, - "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "tr" - }, - "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "zh-Hans" - }, - "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": { - "locale": "zh-Hant" - }, - "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": { - "locale": "zh-Hant" - }, - "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": { - "locale": "zh-Hant" - } - }, - "build": { - "build/netcoreapp2.1/Microsoft.TestPlatform.TestHost.props": {} - } - }, - "Microsoft.Win32.Primitives/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/Microsoft.Win32.Primitives.dll": { - "related": ".xml" - } - } - }, - "NETStandard.Library/1.6.1": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.Win32.Primitives": "4.3.0", - "System.AppContext": "4.3.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Console": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.Compression.ZipFile": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Net.Http": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Net.Sockets": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Timer": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0" - } - }, - "Newtonsoft.Json/9.0.1": { - "type": "package", - "dependencies": { - "Microsoft.CSharp": "4.0.1", - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Dynamic.Runtime": "4.0.11", - "System.Globalization": "4.0.11", - "System.IO": "4.1.0", - "System.Linq": "4.1.0", - "System.Linq.Expressions": "4.1.0", - "System.ObjectModel": "4.0.12", - "System.Reflection": "4.1.0", - "System.Reflection.Extensions": "4.0.1", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Text.Encoding": "4.0.11", - "System.Text.Encoding.Extensions": "4.0.11", - "System.Text.RegularExpressions": "4.1.0", - "System.Threading": "4.0.11", - "System.Threading.Tasks": "4.0.11", - "System.Xml.ReaderWriter": "4.0.11", - "System.Xml.XDocument": "4.0.11" - }, - "compile": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.0/Newtonsoft.Json.dll": { - "related": ".xml" - } - } - }, - "NuGet.Frameworks/5.11.0": { - "type": "package", - "compile": { - "lib/netstandard2.0/NuGet.Frameworks.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard2.0/NuGet.Frameworks.dll": { - "related": ".xml" - } - } - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/debian.8-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "debian.8-x64" - } - } - }, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/fedora.23-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "fedora.23-x64" - } - } - }, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/fedora.24-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "fedora.24-x64" - } - } - }, - "runtime.native.System/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - }, - "compile": { - "lib/netstandard1.0/_._": {} - }, - "runtime": { - "lib/netstandard1.0/_._": {} - } - }, - "runtime.native.System.IO.Compression/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - }, - "compile": { - "lib/netstandard1.0/_._": {} - }, - "runtime": { - "lib/netstandard1.0/_._": {} - } - }, - "runtime.native.System.Net.Http/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - }, - "compile": { - "lib/netstandard1.0/_._": {} - }, - "runtime": { - "lib/netstandard1.0/_._": {} - } - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "dependencies": { - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" - }, - "compile": { - "lib/netstandard1.0/_._": {} - }, - "runtime": { - "lib/netstandard1.0/_._": {} - } - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "dependencies": { - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - }, - "compile": { - "lib/netstandard1.0/_._": {} - }, - "runtime": { - "lib/netstandard1.0/_._": {} - } - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/opensuse.13.2-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "opensuse.13.2-x64" - } - } - }, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/opensuse.42.1-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "opensuse.42.1-x64" - } - } - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.Apple.dylib": { - "assetType": "native", - "rid": "osx.10.10-x64" - } - } - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib": { - "assetType": "native", - "rid": "osx.10.10-x64" - } - } - }, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/rhel.7-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "rhel.7-x64" - } - } - }, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/ubuntu.14.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "ubuntu.14.04-x64" - } - } - }, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/ubuntu.16.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "ubuntu.16.04-x64" - } - } - }, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "runtimeTargets": { - "runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so": { - "assetType": "native", - "rid": "ubuntu.16.10-x64" - } - } - }, - "System.AppContext/4.3.0": { - "type": "package", - "dependencies": { - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.6/System.AppContext.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.6/System.AppContext.dll": {} - } - }, - "System.Buffers/4.3.0": { - "type": "package", - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "compile": { - "lib/netstandard1.1/_._": {} - }, - "runtime": { - "lib/netstandard1.1/System.Buffers.dll": {} - } - }, - "System.Collections/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Collections.dll": { - "related": ".xml" - } - } - }, - "System.Collections.Concurrent/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Collections.Concurrent.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Collections.Concurrent.dll": {} - } - }, - "System.Configuration.ConfigurationManager/4.4.0": { - "type": "package", - "dependencies": { - "System.Security.Cryptography.ProtectedData": "4.4.0" - }, - "compile": { - "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": {} - } - }, - "System.Console/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Console.dll": { - "related": ".xml" - } - } - }, - "System.Diagnostics.Debug/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Diagnostics.Debug.dll": { - "related": ".xml" - } - } - }, - "System.Diagnostics.DiagnosticSource/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "compile": { - "lib/netstandard1.3/_._": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll": { - "related": ".xml" - } - } - }, - "System.Diagnostics.Tools/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.0/System.Diagnostics.Tools.dll": { - "related": ".xml" - } - } - }, - "System.Diagnostics.Tracing/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.5/System.Diagnostics.Tracing.dll": { - "related": ".xml" - } - } - }, - "System.Dynamic.Runtime/4.0.11": { - "type": "package", - "dependencies": { - "System.Collections": "4.0.11", - "System.Diagnostics.Debug": "4.0.11", - "System.Globalization": "4.0.11", - "System.Linq": "4.1.0", - "System.Linq.Expressions": "4.1.0", - "System.ObjectModel": "4.0.12", - "System.Reflection": "4.1.0", - "System.Reflection.Emit": "4.0.1", - "System.Reflection.Emit.ILGeneration": "4.0.1", - "System.Reflection.Primitives": "4.0.1", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Threading": "4.0.11" - }, - "compile": { - "ref/netstandard1.3/System.Dynamic.Runtime.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Dynamic.Runtime.dll": {} - } - }, - "System.Globalization/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Globalization.dll": { - "related": ".xml" - } - } - }, - "System.Globalization.Calendars/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Globalization.Calendars.dll": { - "related": ".xml" - } - } - }, - "System.Globalization.Extensions/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/_._": { - "related": ".xml" - } - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.IO/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - }, - "compile": { - "ref/netstandard1.5/System.IO.dll": { - "related": ".xml" - } - } - }, - "System.IO.Compression/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Buffers": "4.3.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.IO.Compression": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.IO.Compression.dll": { - "related": ".xml" - } - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.IO.Compression.ZipFile/4.3.0": { - "type": "package", - "dependencies": { - "System.Buffers": "4.3.0", - "System.IO": "4.3.0", - "System.IO.Compression": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.IO.Compression.ZipFile.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.IO.Compression.ZipFile.dll": {} - } - }, - "System.IO.FileSystem/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading.Tasks": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.IO.FileSystem.dll": { - "related": ".xml" - } - } - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "type": "package", - "dependencies": { - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll": {} - } - }, - "System.Linq/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - }, - "compile": { - "ref/netstandard1.6/System.Linq.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.6/System.Linq.dll": {} - } - }, - "System.Linq.Expressions/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Linq": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" - }, - "compile": { - "ref/netstandard1.6/System.Linq.Expressions.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.6/System.Linq.Expressions.dll": {} - } - }, - "System.Net.Http/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.DiagnosticSource": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Extensions": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Security.Cryptography.X509Certificates": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Net.Http.dll": { - "related": ".xml" - } - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.3/System.Net.Http.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.Net.Primitives/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Net.Primitives.dll": { - "related": ".xml" - } - } - }, - "System.Net.Sockets/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Net.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Net.Sockets.dll": { - "related": ".xml" - } - } - }, - "System.ObjectModel/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.ObjectModel.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.ObjectModel.dll": {} - } - }, - "System.Reflection/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.5/System.Reflection.dll": { - "related": ".xml" - } - } - }, - "System.Reflection.Emit/4.3.0": { - "type": "package", - "dependencies": { - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.1/_._": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.dll": {} - } - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "type": "package", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.0/_._": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll": {} - } - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "type": "package", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Emit.ILGeneration": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.0/_._": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll": {} - } - }, - "System.Reflection.Extensions/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.0/System.Reflection.Extensions.dll": { - "related": ".xml" - } - } - }, - "System.Reflection.Metadata/1.6.0": { - "type": "package", - "compile": { - "lib/netstandard2.0/System.Reflection.Metadata.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard2.0/System.Reflection.Metadata.dll": { - "related": ".xml" - } - } - }, - "System.Reflection.Primitives/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.0/System.Reflection.Primitives.dll": { - "related": ".xml" - } - } - }, - "System.Reflection.TypeExtensions/4.3.0": { - "type": "package", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.5/_._": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.5/System.Reflection.TypeExtensions.dll": {} - } - }, - "System.Resources.ResourceManager/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Globalization": "4.3.0", - "System.Reflection": "4.3.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.0/System.Resources.ResourceManager.dll": { - "related": ".xml" - } - } - }, - "System.Runtime/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0" - }, - "compile": { - "ref/netstandard1.5/System.Runtime.dll": { - "related": ".xml" - } - } - }, - "System.Runtime.Extensions/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.5/System.Runtime.Extensions.dll": { - "related": ".xml" - } - } - }, - "System.Runtime.Handles/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Runtime.Handles.dll": { - "related": ".xml" - } - } - }, - "System.Runtime.InteropServices/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Reflection": "4.3.0", - "System.Reflection.Primitives": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Handles": "4.3.0" - }, - "compile": { - "ref/netcoreapp1.1/System.Runtime.InteropServices.dll": {} - } - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "type": "package", - "dependencies": { - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0" - }, - "compile": { - "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {} - }, - "runtime": { - "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": {} - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.Runtime.Numerics/4.3.0": { - "type": "package", - "dependencies": { - "System.Globalization": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0" - }, - "compile": { - "ref/netstandard1.1/System.Runtime.Numerics.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Runtime.Numerics.dll": {} - } - }, - "System.Runtime.Serialization.Primitives/4.1.1": { - "type": "package", - "dependencies": { - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0" - }, - "compile": { - "ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll": {} - } - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.Apple": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - }, - "compile": { - "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll": {} - }, - "runtimeTargets": { - "runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { - "assetType": "runtime", - "rid": "osx" - }, - "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.Security.Cryptography.Cng/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0" - }, - "compile": { - "ref/netstandard1.6/_._": {} - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.Security.Cryptography.Csp/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/_._": {} - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.Linq": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll": { - "related": ".xml" - } - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - }, - "compile": { - "ref/netstandard1.6/_._": {} - }, - "runtime": { - "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": {} - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll": { - "assetType": "runtime", - "rid": "unix" - } - } - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "type": "package", - "dependencies": { - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} - }, - "runtime": { - "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll": {} - } - }, - "System.Security.Cryptography.ProtectedData/4.4.0": { - "type": "package", - "compile": { - "ref/netstandard2.0/_._": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": {} - }, - "runtimeTargets": { - "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Security.Cryptography.Cng": "4.3.0", - "System.Security.Cryptography.Csp": "4.3.0", - "System.Security.Cryptography.Encoding": "4.3.0", - "System.Security.Cryptography.OpenSsl": "4.3.0", - "System.Security.Cryptography.Primitives": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "runtime.native.System": "4.3.0", - "runtime.native.System.Net.Http": "4.3.0", - "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" - }, - "compile": { - "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll": { - "related": ".xml" - } - }, - "runtimeTargets": { - "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { - "assetType": "runtime", - "rid": "unix" - }, - "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll": { - "assetType": "runtime", - "rid": "win" - } - } - }, - "System.Text.Encoding/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Text.Encoding.dll": { - "related": ".xml" - } - } - }, - "System.Text.Encoding.Extensions/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0", - "System.Text.Encoding": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Text.Encoding.Extensions.dll": { - "related": ".xml" - } - } - }, - "System.Text.Encodings.Web/7.0.0": { - "type": "package", - "compile": { - "lib/net7.0/System.Text.Encodings.Web.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/System.Text.Encodings.Web.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/_._": {} - }, - "runtimeTargets": { - "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll": { - "assetType": "runtime", - "rid": "browser" - } - } - }, - "System.Text.Json/7.0.0": { - "type": "package", - "dependencies": { - "System.Text.Encodings.Web": "7.0.0" - }, - "compile": { - "lib/net7.0/System.Text.Json.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net7.0/System.Text.Json.dll": { - "related": ".xml" - } - }, - "build": { - "buildTransitive/net6.0/System.Text.Json.targets": {} - } - }, - "System.Text.RegularExpressions/4.3.0": { - "type": "package", - "dependencies": { - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netcoreapp1.1/System.Text.RegularExpressions.dll": {} - }, - "runtime": { - "lib/netstandard1.6/System.Text.RegularExpressions.dll": {} - } - }, - "System.Threading/4.3.0": { - "type": "package", - "dependencies": { - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Threading.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Threading.dll": {} - } - }, - "System.Threading.Tasks/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Threading.Tasks.dll": { - "related": ".xml" - } - } - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.Runtime": "4.3.0", - "System.Threading.Tasks": "4.3.0" - }, - "compile": { - "lib/netstandard1.0/_._": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll": { - "related": ".xml" - } - } - }, - "System.Threading.Timer/4.3.0": { - "type": "package", - "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Runtime": "4.3.0" - }, - "compile": { - "ref/netstandard1.2/System.Threading.Timer.dll": { - "related": ".xml" - } - } - }, - "System.Xml.ReaderWriter/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Extensions": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Xml.ReaderWriter.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Xml.ReaderWriter.dll": {} - } - }, - "System.Xml.XDocument/4.3.0": { - "type": "package", - "dependencies": { - "System.Collections": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.Reflection": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Threading": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0" - }, - "compile": { - "ref/netstandard1.3/System.Xml.XDocument.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.3/System.Xml.XDocument.dll": {} - } - }, - "xunit/2.4.1": { - "type": "package", - "dependencies": { - "xunit.analyzers": "0.10.0", - "xunit.assert": "[2.4.1]", - "xunit.core": "[2.4.1]" - } - }, - "xunit.abstractions/2.0.3": { - "type": "package", - "compile": { - "lib/netstandard2.0/xunit.abstractions.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard2.0/xunit.abstractions.dll": { - "related": ".xml" - } - } - }, - "xunit.analyzers/0.10.0": { - "type": "package" - }, - "xunit.assert/2.4.1": { - "type": "package", - "dependencies": { - "NETStandard.Library": "1.6.1" - }, - "compile": { - "lib/netstandard1.1/xunit.assert.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.1/xunit.assert.dll": { - "related": ".xml" - } - } - }, - "xunit.core/2.4.1": { - "type": "package", - "dependencies": { - "xunit.extensibility.core": "[2.4.1]", - "xunit.extensibility.execution": "[2.4.1]" - }, - "build": { - "build/xunit.core.props": {}, - "build/xunit.core.targets": {} - }, - "buildMultiTargeting": { - "buildMultiTargeting/xunit.core.props": {}, - "buildMultiTargeting/xunit.core.targets": {} - } - }, - "xunit.extensibility.core/2.4.1": { - "type": "package", - "dependencies": { - "NETStandard.Library": "1.6.1", - "xunit.abstractions": "2.0.3" - }, - "compile": { - "lib/netstandard1.1/xunit.core.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.1/xunit.core.dll": { - "related": ".xml" - } - } - }, - "xunit.extensibility.execution/2.4.1": { - "type": "package", - "dependencies": { - "NETStandard.Library": "1.6.1", - "xunit.extensibility.core": "[2.4.1]" - }, - "compile": { - "lib/netstandard1.1/xunit.execution.dotnet.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/netstandard1.1/xunit.execution.dotnet.dll": { - "related": ".xml" - } - } - }, - "xunit.runner.visualstudio/2.4.3": { - "type": "package", - "build": { - "build/netcoreapp2.1/xunit.runner.visualstudio.props": {} - } - } - } - }, - "libraries": { - "AWSSDK.Core/3.7.108.2": { - "sha512": "agsi5uUw93uzMpq7jdc0xx0C28KIZh4KpRG2rg+iCjb8AVdG4sFUid/bPDv7LwahX2oRN+nlTViDOQM7K2EZ8g==", - "type": "package", - "path": "awssdk.core/3.7.108.2", - "hasTools": true, - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "awssdk.core.3.7.108.2.nupkg.sha512", - "awssdk.core.nuspec", - "images/AWSLogo.png", - "lib/net35/AWSSDK.Core.dll", - "lib/net35/AWSSDK.Core.pdb", - "lib/net35/AWSSDK.Core.xml", - "lib/net45/AWSSDK.Core.dll", - "lib/net45/AWSSDK.Core.pdb", - "lib/net45/AWSSDK.Core.xml", - "lib/netcoreapp3.1/AWSSDK.Core.dll", - "lib/netcoreapp3.1/AWSSDK.Core.pdb", - "lib/netcoreapp3.1/AWSSDK.Core.xml", - "lib/netstandard2.0/AWSSDK.Core.dll", - "lib/netstandard2.0/AWSSDK.Core.pdb", - "lib/netstandard2.0/AWSSDK.Core.xml", - "tools/account-management.ps1" - ] - }, - "AWSSDK.EBS/3.7.100.153": { - "sha512": "lTyw0ZKeaCUPV/HMxX4VDk8JuRbKIqLudJPDgeiqx9GF6TrCwtLv9hVtPKeGzH/BRKfpbLyarj1syHKyAx1kuw==", - "type": "package", - "path": "awssdk.ebs/3.7.100.153", - "hasTools": true, - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "analyzers/dotnet/cs/AWSSDK.EBS.CodeAnalysis.dll", - "awssdk.ebs.3.7.100.153.nupkg.sha512", - "awssdk.ebs.nuspec", - "images/AWSLogo.png", - "lib/net35/AWSSDK.EBS.dll", - "lib/net35/AWSSDK.EBS.pdb", - "lib/net35/AWSSDK.EBS.xml", - "lib/net45/AWSSDK.EBS.dll", - "lib/net45/AWSSDK.EBS.pdb", - "lib/net45/AWSSDK.EBS.xml", - "lib/netcoreapp3.1/AWSSDK.EBS.dll", - "lib/netcoreapp3.1/AWSSDK.EBS.pdb", - "lib/netcoreapp3.1/AWSSDK.EBS.xml", - "lib/netstandard2.0/AWSSDK.EBS.dll", - "lib/netstandard2.0/AWSSDK.EBS.pdb", - "lib/netstandard2.0/AWSSDK.EBS.xml", - "tools/install.ps1", - "tools/uninstall.ps1" - ] - }, - "FluentAssertions/6.8.0": { - "sha512": "NfSlAG97wMxS48Ov+wQEhJITdn4bKrgtKrG4sCPrFBVKozpC57lQ2vzsPdxUOsPbfEgEQTMtvCDECxIlDBfgNA==", - "type": "package", - "path": "fluentassertions/6.8.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "FluentAssertions.png", - "fluentassertions.6.8.0.nupkg.sha512", - "fluentassertions.nuspec", - "lib/net47/FluentAssertions.dll", - "lib/net47/FluentAssertions.pdb", - "lib/net47/FluentAssertions.xml", - "lib/net6.0/FluentAssertions.dll", - "lib/net6.0/FluentAssertions.pdb", - "lib/net6.0/FluentAssertions.xml", - "lib/netcoreapp2.1/FluentAssertions.dll", - "lib/netcoreapp2.1/FluentAssertions.pdb", - "lib/netcoreapp2.1/FluentAssertions.xml", - "lib/netcoreapp3.0/FluentAssertions.dll", - "lib/netcoreapp3.0/FluentAssertions.pdb", - "lib/netcoreapp3.0/FluentAssertions.xml", - "lib/netstandard2.0/FluentAssertions.dll", - "lib/netstandard2.0/FluentAssertions.pdb", - "lib/netstandard2.0/FluentAssertions.xml", - "lib/netstandard2.1/FluentAssertions.dll", - "lib/netstandard2.1/FluentAssertions.pdb", - "lib/netstandard2.1/FluentAssertions.xml" - ] - }, - "Microsoft.CodeCoverage/17.1.0": { - "sha512": "0N/ZJ71ncCxQWhgtkEYKOgu2oMHa8h1tsOUbhmIKXF8UwtSUCe4vHAsJ3DVcNWRwNfQzSTy263ZE+QF6MdIhhQ==", - "type": "package", - "path": "microsoft.codecoverage/17.1.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE_NET.txt", - "ThirdPartyNotices.txt", - "build/netstandard1.0/CodeCoverage/CodeCoverage.config", - "build/netstandard1.0/CodeCoverage/CodeCoverage.exe", - "build/netstandard1.0/CodeCoverage/VanguardInstrumentationProfiler_x86.config", - "build/netstandard1.0/CodeCoverage/amd64/CodeCoverage.exe", - "build/netstandard1.0/CodeCoverage/amd64/VanguardInstrumentationProfiler_x64.config", - "build/netstandard1.0/CodeCoverage/amd64/covrun64.dll", - "build/netstandard1.0/CodeCoverage/amd64/msdia140.dll", - "build/netstandard1.0/CodeCoverage/amd64/msvcdis140.dll", - "build/netstandard1.0/CodeCoverage/amd64/msvcp140.dll", - "build/netstandard1.0/CodeCoverage/amd64/msvcp140_atomic_wait.dll", - "build/netstandard1.0/CodeCoverage/amd64/vcruntime140.dll", - "build/netstandard1.0/CodeCoverage/amd64/vcruntime140_1.dll", - "build/netstandard1.0/CodeCoverage/codecoveragemessages.dll", - "build/netstandard1.0/CodeCoverage/coreclr/Microsoft.VisualStudio.CodeCoverage.Shim.dll", - "build/netstandard1.0/CodeCoverage/covrun32.dll", - "build/netstandard1.0/CodeCoverage/msdia140.dll", - "build/netstandard1.0/CodeCoverage/msvcdis140.dll", - "build/netstandard1.0/CodeCoverage/msvcp140.dll", - "build/netstandard1.0/CodeCoverage/msvcp140_atomic_wait.dll", - "build/netstandard1.0/CodeCoverage/vcruntime140.dll", - "build/netstandard1.0/InstrumentationEngine/alpine/x64/VanguardInstrumentationProfiler_x64.config", - "build/netstandard1.0/InstrumentationEngine/alpine/x64/libCoverageInstrumentationMethod.so", - "build/netstandard1.0/InstrumentationEngine/alpine/x64/libInstrumentationEngine.so", - "build/netstandard1.0/InstrumentationEngine/macos/x64/VanguardInstrumentationProfiler_x64.config", - "build/netstandard1.0/InstrumentationEngine/macos/x64/libCoverageInstrumentationMethod.dylib", - "build/netstandard1.0/InstrumentationEngine/macos/x64/libInstrumentationEngine.dylib", - "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/VanguardInstrumentationProfiler_x64.config", - "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/libCoverageInstrumentationMethod.so", - "build/netstandard1.0/InstrumentationEngine/ubuntu/x64/libInstrumentationEngine.so", - "build/netstandard1.0/InstrumentationEngine/x64/MicrosoftInstrumentationEngine_x64.dll", - "build/netstandard1.0/InstrumentationEngine/x86/MicrosoftInstrumentationEngine_x86.dll", - "build/netstandard1.0/Microsoft.CodeCoverage.props", - "build/netstandard1.0/Microsoft.CodeCoverage.targets", - "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Core.dll", - "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Instrumentation.dll", - "build/netstandard1.0/Microsoft.VisualStudio.Coverage.Interprocess.dll", - "build/netstandard1.0/Microsoft.VisualStudio.TraceDataCollector.dll", - "build/netstandard1.0/Mono.Cecil.Pdb.dll", - "build/netstandard1.0/Mono.Cecil.dll", - "build/netstandard1.0/ThirdPartyNotices.txt", - "build/netstandard1.0/cs/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/de/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/es/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/fr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/it/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/ja/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/ko/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/pl/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/pt-BR/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/ru/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/tr/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/zh-Hans/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "build/netstandard1.0/zh-Hant/Microsoft.VisualStudio.TraceDataCollector.resources.dll", - "lib/net45/Microsoft.VisualStudio.CodeCoverage.Shim.dll", - "lib/netcoreapp1.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll", - "microsoft.codecoverage.17.1.0.nupkg.sha512", - "microsoft.codecoverage.nuspec" - ] - }, - "Microsoft.CSharp/4.0.1": { - "sha512": "17h8b5mXa87XYKrrVqdgZ38JefSUqLChUQpXgSnpzsM0nDOhE40FTeNWOJ/YmySGV6tG6T8+hjz6vxbknHJr6A==", - "type": "package", - "path": "microsoft.csharp/4.0.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/Microsoft.CSharp.dll", - "lib/netstandard1.3/Microsoft.CSharp.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "microsoft.csharp.4.0.1.nupkg.sha512", - "microsoft.csharp.nuspec", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/Microsoft.CSharp.dll", - "ref/netcore50/Microsoft.CSharp.xml", - "ref/netcore50/de/Microsoft.CSharp.xml", - "ref/netcore50/es/Microsoft.CSharp.xml", - "ref/netcore50/fr/Microsoft.CSharp.xml", - "ref/netcore50/it/Microsoft.CSharp.xml", - "ref/netcore50/ja/Microsoft.CSharp.xml", - "ref/netcore50/ko/Microsoft.CSharp.xml", - "ref/netcore50/ru/Microsoft.CSharp.xml", - "ref/netcore50/zh-hans/Microsoft.CSharp.xml", - "ref/netcore50/zh-hant/Microsoft.CSharp.xml", - "ref/netstandard1.0/Microsoft.CSharp.dll", - "ref/netstandard1.0/Microsoft.CSharp.xml", - "ref/netstandard1.0/de/Microsoft.CSharp.xml", - "ref/netstandard1.0/es/Microsoft.CSharp.xml", - "ref/netstandard1.0/fr/Microsoft.CSharp.xml", - "ref/netstandard1.0/it/Microsoft.CSharp.xml", - "ref/netstandard1.0/ja/Microsoft.CSharp.xml", - "ref/netstandard1.0/ko/Microsoft.CSharp.xml", - "ref/netstandard1.0/ru/Microsoft.CSharp.xml", - "ref/netstandard1.0/zh-hans/Microsoft.CSharp.xml", - "ref/netstandard1.0/zh-hant/Microsoft.CSharp.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._" - ] - }, - "Microsoft.Extensions.Configuration/7.0.0": { - "sha512": "tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==", - "type": "package", - "path": "microsoft.extensions.configuration/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.Configuration.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.targets", - "lib/net462/Microsoft.Extensions.Configuration.dll", - "lib/net462/Microsoft.Extensions.Configuration.xml", - "lib/net6.0/Microsoft.Extensions.Configuration.dll", - "lib/net6.0/Microsoft.Extensions.Configuration.xml", - "lib/net7.0/Microsoft.Extensions.Configuration.dll", - "lib/net7.0/Microsoft.Extensions.Configuration.xml", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.dll", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.xml", - "microsoft.extensions.configuration.7.0.0.nupkg.sha512", - "microsoft.extensions.configuration.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Configuration.Abstractions/7.0.0": { - "sha512": "f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==", - "type": "package", - "path": "microsoft.extensions.configuration.abstractions/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.Configuration.Abstractions.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Abstractions.targets", - "lib/net462/Microsoft.Extensions.Configuration.Abstractions.dll", - "lib/net462/Microsoft.Extensions.Configuration.Abstractions.xml", - "lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll", - "lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.xml", - "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.dll", - "lib/net7.0/Microsoft.Extensions.Configuration.Abstractions.xml", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.dll", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Abstractions.xml", - "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512", - "microsoft.extensions.configuration.abstractions.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Configuration.FileExtensions/7.0.0": { - "sha512": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==", - "type": "package", - "path": "microsoft.extensions.configuration.fileextensions/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.Configuration.FileExtensions.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.FileExtensions.targets", - "lib/net462/Microsoft.Extensions.Configuration.FileExtensions.dll", - "lib/net462/Microsoft.Extensions.Configuration.FileExtensions.xml", - "lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.dll", - "lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.xml", - "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.dll", - "lib/net7.0/Microsoft.Extensions.Configuration.FileExtensions.xml", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.dll", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.FileExtensions.xml", - "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512", - "microsoft.extensions.configuration.fileextensions.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Configuration.Json/7.0.0": { - "sha512": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==", - "type": "package", - "path": "microsoft.extensions.configuration.json/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.Configuration.Json.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.Json.targets", - "lib/net462/Microsoft.Extensions.Configuration.Json.dll", - "lib/net462/Microsoft.Extensions.Configuration.Json.xml", - "lib/net6.0/Microsoft.Extensions.Configuration.Json.dll", - "lib/net6.0/Microsoft.Extensions.Configuration.Json.xml", - "lib/net7.0/Microsoft.Extensions.Configuration.Json.dll", - "lib/net7.0/Microsoft.Extensions.Configuration.Json.xml", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.dll", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.Json.xml", - "lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.dll", - "lib/netstandard2.1/Microsoft.Extensions.Configuration.Json.xml", - "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512", - "microsoft.extensions.configuration.json.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Configuration.UserSecrets/7.0.0": { - "sha512": "33HPW1PmB2RS0ietBQyvOxjp4O3wlt+4tIs8KPyMn1kqp04goiZGa7+3mc69NRLv6bphkLDy0YR7Uw3aZyf8Zw==", - "type": "package", - "path": "microsoft.extensions.configuration.usersecrets/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.Configuration.UserSecrets.targets", - "buildTransitive/net462/Microsoft.Extensions.Configuration.UserSecrets.props", - "buildTransitive/net462/Microsoft.Extensions.Configuration.UserSecrets.targets", - "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.props", - "buildTransitive/net6.0/Microsoft.Extensions.Configuration.UserSecrets.targets", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Configuration.UserSecrets.targets", - "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.props", - "buildTransitive/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.targets", - "lib/net462/Microsoft.Extensions.Configuration.UserSecrets.dll", - "lib/net462/Microsoft.Extensions.Configuration.UserSecrets.xml", - "lib/net6.0/Microsoft.Extensions.Configuration.UserSecrets.dll", - "lib/net6.0/Microsoft.Extensions.Configuration.UserSecrets.xml", - "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.dll", - "lib/net7.0/Microsoft.Extensions.Configuration.UserSecrets.xml", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.dll", - "lib/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.xml", - "microsoft.extensions.configuration.usersecrets.7.0.0.nupkg.sha512", - "microsoft.extensions.configuration.usersecrets.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.FileProviders.Abstractions/7.0.0": { - "sha512": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==", - "type": "package", - "path": "microsoft.extensions.fileproviders.abstractions/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.FileProviders.Abstractions.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Abstractions.targets", - "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.dll", - "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.xml", - "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll", - "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.xml", - "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.dll", - "lib/net7.0/Microsoft.Extensions.FileProviders.Abstractions.xml", - "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll", - "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.xml", - "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512", - "microsoft.extensions.fileproviders.abstractions.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.FileProviders.Physical/7.0.0": { - "sha512": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==", - "type": "package", - "path": "microsoft.extensions.fileproviders.physical/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.FileProviders.Physical.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Physical.targets", - "lib/net462/Microsoft.Extensions.FileProviders.Physical.dll", - "lib/net462/Microsoft.Extensions.FileProviders.Physical.xml", - "lib/net6.0/Microsoft.Extensions.FileProviders.Physical.dll", - "lib/net6.0/Microsoft.Extensions.FileProviders.Physical.xml", - "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.dll", - "lib/net7.0/Microsoft.Extensions.FileProviders.Physical.xml", - "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.dll", - "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Physical.xml", - "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512", - "microsoft.extensions.fileproviders.physical.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.FileSystemGlobbing/7.0.0": { - "sha512": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==", - "type": "package", - "path": "microsoft.extensions.filesystemglobbing/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.FileSystemGlobbing.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileSystemGlobbing.targets", - "lib/net462/Microsoft.Extensions.FileSystemGlobbing.dll", - "lib/net462/Microsoft.Extensions.FileSystemGlobbing.xml", - "lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.dll", - "lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.xml", - "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.dll", - "lib/net7.0/Microsoft.Extensions.FileSystemGlobbing.xml", - "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll", - "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.xml", - "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512", - "microsoft.extensions.filesystemglobbing.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.Extensions.Primitives/7.0.0": { - "sha512": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==", - "type": "package", - "path": "microsoft.extensions.primitives/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/Microsoft.Extensions.Primitives.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Primitives.targets", - "lib/net462/Microsoft.Extensions.Primitives.dll", - "lib/net462/Microsoft.Extensions.Primitives.xml", - "lib/net6.0/Microsoft.Extensions.Primitives.dll", - "lib/net6.0/Microsoft.Extensions.Primitives.xml", - "lib/net7.0/Microsoft.Extensions.Primitives.dll", - "lib/net7.0/Microsoft.Extensions.Primitives.xml", - "lib/netstandard2.0/Microsoft.Extensions.Primitives.dll", - "lib/netstandard2.0/Microsoft.Extensions.Primitives.xml", - "microsoft.extensions.primitives.7.0.0.nupkg.sha512", - "microsoft.extensions.primitives.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "Microsoft.NET.Test.Sdk/17.1.0": { - "sha512": "MVKvOsHIfrZrvg+8aqOF5dknO/qWrR1sWZjMPQ1N42MKMlL/zQL30FQFZxPeWfmVKWUWAOmAHYsqB5OerTKziw==", - "type": "package", - "path": "microsoft.net.test.sdk/17.1.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE_NET.txt", - "build/net40/Microsoft.NET.Test.Sdk.props", - "build/net40/Microsoft.NET.Test.Sdk.targets", - "build/net45/Microsoft.NET.Test.Sdk.props", - "build/net45/Microsoft.NET.Test.Sdk.targets", - "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.cs", - "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.fs", - "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.Program.vb", - "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.props", - "build/netcoreapp1.0/Microsoft.NET.Test.Sdk.targets", - "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.cs", - "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.fs", - "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.Program.vb", - "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.props", - "build/netcoreapp2.1/Microsoft.NET.Test.Sdk.targets", - "build/uap10.0/Microsoft.NET.Test.Sdk.props", - "buildMultiTargeting/Microsoft.NET.Test.Sdk.props", - "lib/net40/_._", - "lib/net45/_._", - "lib/netcoreapp1.0/_._", - "lib/netcoreapp2.1/_._", - "lib/uap10.0/_._", - "microsoft.net.test.sdk.17.1.0.nupkg.sha512", - "microsoft.net.test.sdk.nuspec" - ] - }, - "Microsoft.NETCore.Platforms/1.1.0": { - "sha512": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==", - "type": "package", - "path": "microsoft.netcore.platforms/1.1.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.0/_._", - "microsoft.netcore.platforms.1.1.0.nupkg.sha512", - "microsoft.netcore.platforms.nuspec", - "runtime.json" - ] - }, - "Microsoft.NETCore.Targets/1.1.0": { - "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", - "type": "package", - "path": "microsoft.netcore.targets/1.1.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.0/_._", - "microsoft.netcore.targets.1.1.0.nupkg.sha512", - "microsoft.netcore.targets.nuspec", - "runtime.json" - ] - }, - "Microsoft.TestPlatform.ObjectModel/17.1.0": { - "sha512": "OMo/FYnKGy3lZEK0gfitskRM3ga/YBt6MyCyFPq0xNLeybGOQ6HnYNAAvzyePo5WPuMiw3LX+HiuRWNjnas1fA==", - "type": "package", - "path": "microsoft.testplatform.objectmodel/17.1.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE_NET.txt", - "lib/net45/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/net45/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/net45/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/net45/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net45/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/net451/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/net451/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/net451/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net451/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/net451/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/netstandard1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/netstandard1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/netstandard1.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/netstandard1.3/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/netstandard1.3/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/netstandard1.3/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard1.3/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard1.3/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/netstandard2.0/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/netstandard2.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/netstandard2.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/netstandard2.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/netstandard2.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/uap10.0/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/uap10.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/uap10.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "lib/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "microsoft.testplatform.objectmodel.17.1.0.nupkg.sha512", - "microsoft.testplatform.objectmodel.nuspec" - ] - }, - "Microsoft.TestPlatform.TestHost/17.1.0": { - "sha512": "JS0JDLniDhIzkSPLHz7N/x1CG8ywJOtwInFDYA3KQvbz+ojGoT5MT2YDVReL1b86zmNRV8339vsTSm/zh0RcMg==", - "type": "package", - "path": "microsoft.testplatform.testhost/17.1.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE_NET.txt", - "ThirdPartyNotices.txt", - "build/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", - "build/netcoreapp1.0/Microsoft.TestPlatform.TestHost.props", - "build/netcoreapp1.0/x64/Microsoft.TestPlatform.PlatformAbstractions.dll", - "build/netcoreapp1.0/x64/testhost.dll", - "build/netcoreapp1.0/x64/testhost.exe", - "build/netcoreapp1.0/x86/Microsoft.TestPlatform.PlatformAbstractions.dll", - "build/netcoreapp1.0/x86/testhost.x86.dll", - "build/netcoreapp1.0/x86/testhost.x86.exe", - "build/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", - "build/netcoreapp2.1/Microsoft.TestPlatform.TestHost.props", - "build/netcoreapp2.1/x64/Microsoft.TestPlatform.PlatformAbstractions.dll", - "build/netcoreapp2.1/x64/testhost.dll", - "build/netcoreapp2.1/x64/testhost.exe", - "build/netcoreapp2.1/x86/Microsoft.TestPlatform.PlatformAbstractions.dll", - "build/netcoreapp2.1/x86/testhost.x86.dll", - "build/netcoreapp2.1/x86/testhost.x86.exe", - "build/uap10.0/Microsoft.TestPlatform.TestHost.props", - "build/uap10.0/Microsoft.TestPlatform.TestHost.targets", - "build/uap10.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/cs/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/de/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/es/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/fr/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/it/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/ja/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/ko/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/pl/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/pt-BR/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/ru/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/tr/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/x64/msdia140.dll", - "build/uap10.0/x86/msdia140.dll", - "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/zh-Hans/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll", - "build/uap10.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "build/uap10.0/zh-Hant/Microsoft.TestPlatform.Utilities.resources.dll", - "build/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "build/uap10.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll", - "lib/net45/_._", - "lib/netcoreapp1.0/Microsoft.TestPlatform.CommunicationUtilities.dll", - "lib/netcoreapp1.0/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/netcoreapp1.0/Microsoft.TestPlatform.CrossPlatEngine.dll", - "lib/netcoreapp1.0/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/netcoreapp1.0/Microsoft.TestPlatform.Utilities.dll", - "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.Common.dll", - "lib/netcoreapp1.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/testhost.deps.json", - "lib/netcoreapp1.0/testhost.dll", - "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/x64/msdia140.dll", - "lib/netcoreapp1.0/x86/msdia140.dll", - "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp1.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp1.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/Microsoft.TestPlatform.CommunicationUtilities.dll", - "lib/netcoreapp2.1/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/netcoreapp2.1/Microsoft.TestPlatform.CrossPlatEngine.dll", - "lib/netcoreapp2.1/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/netcoreapp2.1/Microsoft.TestPlatform.Utilities.dll", - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.Common.dll", - "lib/netcoreapp2.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/testhost.deps.json", - "lib/netcoreapp2.1/testhost.dll", - "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/x64/msdia140.dll", - "lib/netcoreapp2.1/x86/msdia140.dll", - "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll", - "lib/netcoreapp2.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll", - "lib/netcoreapp2.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll", - "lib/uap10.0/Microsoft.TestPlatform.CommunicationUtilities.dll", - "lib/uap10.0/Microsoft.TestPlatform.CoreUtilities.dll", - "lib/uap10.0/Microsoft.TestPlatform.CrossPlatEngine.dll", - "lib/uap10.0/Microsoft.TestPlatform.PlatformAbstractions.dll", - "lib/uap10.0/Microsoft.TestPlatform.Utilities.dll", - "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.Common.dll", - "lib/uap10.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll", - "lib/uap10.0/testhost.dll", - "microsoft.testplatform.testhost.17.1.0.nupkg.sha512", - "microsoft.testplatform.testhost.nuspec" - ] - }, - "Microsoft.Win32.Primitives/4.3.0": { - "sha512": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", - "type": "package", - "path": "microsoft.win32.primitives/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/Microsoft.Win32.Primitives.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "microsoft.win32.primitives.4.3.0.nupkg.sha512", - "microsoft.win32.primitives.nuspec", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/Microsoft.Win32.Primitives.dll", - "ref/netstandard1.3/Microsoft.Win32.Primitives.dll", - "ref/netstandard1.3/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/de/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/es/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/fr/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/it/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/ja/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/ko/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/ru/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/zh-hans/Microsoft.Win32.Primitives.xml", - "ref/netstandard1.3/zh-hant/Microsoft.Win32.Primitives.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._" - ] - }, - "NETStandard.Library/1.6.1": { - "sha512": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", - "type": "package", - "path": "netstandard.library/1.6.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "netstandard.library.1.6.1.nupkg.sha512", - "netstandard.library.nuspec" - ] - }, - "Newtonsoft.Json/9.0.1": { - "sha512": "U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==", - "type": "package", - "path": "newtonsoft.json/9.0.1", - "hasTools": true, - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net20/Newtonsoft.Json.dll", - "lib/net20/Newtonsoft.Json.xml", - "lib/net35/Newtonsoft.Json.dll", - "lib/net35/Newtonsoft.Json.xml", - "lib/net40/Newtonsoft.Json.dll", - "lib/net40/Newtonsoft.Json.xml", - "lib/net45/Newtonsoft.Json.dll", - "lib/net45/Newtonsoft.Json.xml", - "lib/netstandard1.0/Newtonsoft.Json.dll", - "lib/netstandard1.0/Newtonsoft.Json.xml", - "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll", - "lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml", - "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll", - "lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.xml", - "newtonsoft.json.9.0.1.nupkg.sha512", - "newtonsoft.json.nuspec", - "tools/install.ps1" - ] - }, - "NuGet.Frameworks/5.11.0": { - "sha512": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q==", - "type": "package", - "path": "nuget.frameworks/5.11.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "icon.png", - "lib/net40/NuGet.Frameworks.dll", - "lib/net40/NuGet.Frameworks.xml", - "lib/net472/NuGet.Frameworks.dll", - "lib/net472/NuGet.Frameworks.xml", - "lib/netstandard2.0/NuGet.Frameworks.dll", - "lib/netstandard2.0/NuGet.Frameworks.xml", - "nuget.frameworks.5.11.0.nupkg.sha512", - "nuget.frameworks.nuspec" - ] - }, - "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==", - "type": "package", - "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/debian.8-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==", - "type": "package", - "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/fedora.23-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==", - "type": "package", - "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/fedora.24-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "runtime.native.System/4.3.0": { - "sha512": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", - "type": "package", - "path": "runtime.native.system/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.0/_._", - "runtime.native.system.4.3.0.nupkg.sha512", - "runtime.native.system.nuspec" - ] - }, - "runtime.native.System.IO.Compression/4.3.0": { - "sha512": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", - "type": "package", - "path": "runtime.native.system.io.compression/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.0/_._", - "runtime.native.system.io.compression.4.3.0.nupkg.sha512", - "runtime.native.system.io.compression.nuspec" - ] - }, - "runtime.native.System.Net.Http/4.3.0": { - "sha512": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", - "type": "package", - "path": "runtime.native.system.net.http/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.0/_._", - "runtime.native.system.net.http.4.3.0.nupkg.sha512", - "runtime.native.system.net.http.nuspec" - ] - }, - "runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "sha512": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", - "type": "package", - "path": "runtime.native.system.security.cryptography.apple/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.0/_._", - "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", - "runtime.native.system.security.cryptography.apple.nuspec" - ] - }, - "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", - "type": "package", - "path": "runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.0/_._", - "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.native.system.security.cryptography.openssl.nuspec" - ] - }, - "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==", - "type": "package", - "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/opensuse.13.2-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==", - "type": "package", - "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/opensuse.42.1-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { - "sha512": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==", - "type": "package", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", - "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.nuspec", - "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.Apple.dylib" - ] - }, - "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==", - "type": "package", - "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/osx.10.10-x64/native/System.Security.Cryptography.Native.OpenSsl.dylib" - ] - }, - "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==", - "type": "package", - "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/rhel.7-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==", - "type": "package", - "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/ubuntu.14.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==", - "type": "package", - "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/ubuntu.16.04-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==", - "type": "package", - "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.nuspec", - "runtimes/ubuntu.16.10-x64/native/System.Security.Cryptography.Native.OpenSsl.so" - ] - }, - "System.AppContext/4.3.0": { - "sha512": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", - "type": "package", - "path": "system.appcontext/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.AppContext.dll", - "lib/net463/System.AppContext.dll", - "lib/netcore50/System.AppContext.dll", - "lib/netstandard1.6/System.AppContext.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.AppContext.dll", - "ref/net463/System.AppContext.dll", - "ref/netstandard/_._", - "ref/netstandard1.3/System.AppContext.dll", - "ref/netstandard1.3/System.AppContext.xml", - "ref/netstandard1.3/de/System.AppContext.xml", - "ref/netstandard1.3/es/System.AppContext.xml", - "ref/netstandard1.3/fr/System.AppContext.xml", - "ref/netstandard1.3/it/System.AppContext.xml", - "ref/netstandard1.3/ja/System.AppContext.xml", - "ref/netstandard1.3/ko/System.AppContext.xml", - "ref/netstandard1.3/ru/System.AppContext.xml", - "ref/netstandard1.3/zh-hans/System.AppContext.xml", - "ref/netstandard1.3/zh-hant/System.AppContext.xml", - "ref/netstandard1.6/System.AppContext.dll", - "ref/netstandard1.6/System.AppContext.xml", - "ref/netstandard1.6/de/System.AppContext.xml", - "ref/netstandard1.6/es/System.AppContext.xml", - "ref/netstandard1.6/fr/System.AppContext.xml", - "ref/netstandard1.6/it/System.AppContext.xml", - "ref/netstandard1.6/ja/System.AppContext.xml", - "ref/netstandard1.6/ko/System.AppContext.xml", - "ref/netstandard1.6/ru/System.AppContext.xml", - "ref/netstandard1.6/zh-hans/System.AppContext.xml", - "ref/netstandard1.6/zh-hant/System.AppContext.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/System.AppContext.dll", - "system.appcontext.4.3.0.nupkg.sha512", - "system.appcontext.nuspec" - ] - }, - "System.Buffers/4.3.0": { - "sha512": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==", - "type": "package", - "path": "system.buffers/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.1/.xml", - "lib/netstandard1.1/System.Buffers.dll", - "system.buffers.4.3.0.nupkg.sha512", - "system.buffers.nuspec" - ] - }, - "System.Collections/4.3.0": { - "sha512": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", - "type": "package", - "path": "system.collections/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Collections.dll", - "ref/netcore50/System.Collections.xml", - "ref/netcore50/de/System.Collections.xml", - "ref/netcore50/es/System.Collections.xml", - "ref/netcore50/fr/System.Collections.xml", - "ref/netcore50/it/System.Collections.xml", - "ref/netcore50/ja/System.Collections.xml", - "ref/netcore50/ko/System.Collections.xml", - "ref/netcore50/ru/System.Collections.xml", - "ref/netcore50/zh-hans/System.Collections.xml", - "ref/netcore50/zh-hant/System.Collections.xml", - "ref/netstandard1.0/System.Collections.dll", - "ref/netstandard1.0/System.Collections.xml", - "ref/netstandard1.0/de/System.Collections.xml", - "ref/netstandard1.0/es/System.Collections.xml", - "ref/netstandard1.0/fr/System.Collections.xml", - "ref/netstandard1.0/it/System.Collections.xml", - "ref/netstandard1.0/ja/System.Collections.xml", - "ref/netstandard1.0/ko/System.Collections.xml", - "ref/netstandard1.0/ru/System.Collections.xml", - "ref/netstandard1.0/zh-hans/System.Collections.xml", - "ref/netstandard1.0/zh-hant/System.Collections.xml", - "ref/netstandard1.3/System.Collections.dll", - "ref/netstandard1.3/System.Collections.xml", - "ref/netstandard1.3/de/System.Collections.xml", - "ref/netstandard1.3/es/System.Collections.xml", - "ref/netstandard1.3/fr/System.Collections.xml", - "ref/netstandard1.3/it/System.Collections.xml", - "ref/netstandard1.3/ja/System.Collections.xml", - "ref/netstandard1.3/ko/System.Collections.xml", - "ref/netstandard1.3/ru/System.Collections.xml", - "ref/netstandard1.3/zh-hans/System.Collections.xml", - "ref/netstandard1.3/zh-hant/System.Collections.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.collections.4.3.0.nupkg.sha512", - "system.collections.nuspec" - ] - }, - "System.Collections.Concurrent/4.3.0": { - "sha512": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", - "type": "package", - "path": "system.collections.concurrent/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Collections.Concurrent.dll", - "lib/netstandard1.3/System.Collections.Concurrent.dll", - "lib/portable-net45+win8+wpa81/_._", - "lib/win8/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Collections.Concurrent.dll", - "ref/netcore50/System.Collections.Concurrent.xml", - "ref/netcore50/de/System.Collections.Concurrent.xml", - "ref/netcore50/es/System.Collections.Concurrent.xml", - "ref/netcore50/fr/System.Collections.Concurrent.xml", - "ref/netcore50/it/System.Collections.Concurrent.xml", - "ref/netcore50/ja/System.Collections.Concurrent.xml", - "ref/netcore50/ko/System.Collections.Concurrent.xml", - "ref/netcore50/ru/System.Collections.Concurrent.xml", - "ref/netcore50/zh-hans/System.Collections.Concurrent.xml", - "ref/netcore50/zh-hant/System.Collections.Concurrent.xml", - "ref/netstandard1.1/System.Collections.Concurrent.dll", - "ref/netstandard1.1/System.Collections.Concurrent.xml", - "ref/netstandard1.1/de/System.Collections.Concurrent.xml", - "ref/netstandard1.1/es/System.Collections.Concurrent.xml", - "ref/netstandard1.1/fr/System.Collections.Concurrent.xml", - "ref/netstandard1.1/it/System.Collections.Concurrent.xml", - "ref/netstandard1.1/ja/System.Collections.Concurrent.xml", - "ref/netstandard1.1/ko/System.Collections.Concurrent.xml", - "ref/netstandard1.1/ru/System.Collections.Concurrent.xml", - "ref/netstandard1.1/zh-hans/System.Collections.Concurrent.xml", - "ref/netstandard1.1/zh-hant/System.Collections.Concurrent.xml", - "ref/netstandard1.3/System.Collections.Concurrent.dll", - "ref/netstandard1.3/System.Collections.Concurrent.xml", - "ref/netstandard1.3/de/System.Collections.Concurrent.xml", - "ref/netstandard1.3/es/System.Collections.Concurrent.xml", - "ref/netstandard1.3/fr/System.Collections.Concurrent.xml", - "ref/netstandard1.3/it/System.Collections.Concurrent.xml", - "ref/netstandard1.3/ja/System.Collections.Concurrent.xml", - "ref/netstandard1.3/ko/System.Collections.Concurrent.xml", - "ref/netstandard1.3/ru/System.Collections.Concurrent.xml", - "ref/netstandard1.3/zh-hans/System.Collections.Concurrent.xml", - "ref/netstandard1.3/zh-hant/System.Collections.Concurrent.xml", - "ref/portable-net45+win8+wpa81/_._", - "ref/win8/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.collections.concurrent.4.3.0.nupkg.sha512", - "system.collections.concurrent.nuspec" - ] - }, - "System.Configuration.ConfigurationManager/4.4.0": { - "sha512": "gWwQv/Ug1qWJmHCmN17nAbxJYmQBM/E94QxKLksvUiiKB1Ld3Sc/eK1lgmbSjDFxkQhVuayI/cGFZhpBSodLrg==", - "type": "package", - "path": "system.configuration.configurationmanager/4.4.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/net461/System.Configuration.ConfigurationManager.dll", - "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll", - "ref/net461/System.Configuration.ConfigurationManager.dll", - "ref/net461/System.Configuration.ConfigurationManager.xml", - "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll", - "ref/netstandard2.0/System.Configuration.ConfigurationManager.xml", - "system.configuration.configurationmanager.4.4.0.nupkg.sha512", - "system.configuration.configurationmanager.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "System.Console/4.3.0": { - "sha512": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", - "type": "package", - "path": "system.console/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Console.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Console.dll", - "ref/netstandard1.3/System.Console.dll", - "ref/netstandard1.3/System.Console.xml", - "ref/netstandard1.3/de/System.Console.xml", - "ref/netstandard1.3/es/System.Console.xml", - "ref/netstandard1.3/fr/System.Console.xml", - "ref/netstandard1.3/it/System.Console.xml", - "ref/netstandard1.3/ja/System.Console.xml", - "ref/netstandard1.3/ko/System.Console.xml", - "ref/netstandard1.3/ru/System.Console.xml", - "ref/netstandard1.3/zh-hans/System.Console.xml", - "ref/netstandard1.3/zh-hant/System.Console.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.console.4.3.0.nupkg.sha512", - "system.console.nuspec" - ] - }, - "System.Diagnostics.Debug/4.3.0": { - "sha512": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", - "type": "package", - "path": "system.diagnostics.debug/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Diagnostics.Debug.dll", - "ref/netcore50/System.Diagnostics.Debug.xml", - "ref/netcore50/de/System.Diagnostics.Debug.xml", - "ref/netcore50/es/System.Diagnostics.Debug.xml", - "ref/netcore50/fr/System.Diagnostics.Debug.xml", - "ref/netcore50/it/System.Diagnostics.Debug.xml", - "ref/netcore50/ja/System.Diagnostics.Debug.xml", - "ref/netcore50/ko/System.Diagnostics.Debug.xml", - "ref/netcore50/ru/System.Diagnostics.Debug.xml", - "ref/netcore50/zh-hans/System.Diagnostics.Debug.xml", - "ref/netcore50/zh-hant/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/System.Diagnostics.Debug.dll", - "ref/netstandard1.0/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/de/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/es/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/fr/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/it/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/ja/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/ko/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/ru/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/zh-hans/System.Diagnostics.Debug.xml", - "ref/netstandard1.0/zh-hant/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/System.Diagnostics.Debug.dll", - "ref/netstandard1.3/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/de/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/es/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/fr/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/it/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/ja/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/ko/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/ru/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/zh-hans/System.Diagnostics.Debug.xml", - "ref/netstandard1.3/zh-hant/System.Diagnostics.Debug.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.diagnostics.debug.4.3.0.nupkg.sha512", - "system.diagnostics.debug.nuspec" - ] - }, - "System.Diagnostics.DiagnosticSource/4.3.0": { - "sha512": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==", - "type": "package", - "path": "system.diagnostics.diagnosticsource/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/net46/System.Diagnostics.DiagnosticSource.dll", - "lib/net46/System.Diagnostics.DiagnosticSource.xml", - "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.dll", - "lib/netstandard1.1/System.Diagnostics.DiagnosticSource.xml", - "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.dll", - "lib/netstandard1.3/System.Diagnostics.DiagnosticSource.xml", - "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.dll", - "lib/portable-net45+win8+wpa81/System.Diagnostics.DiagnosticSource.xml", - "system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512", - "system.diagnostics.diagnosticsource.nuspec" - ] - }, - "System.Diagnostics.Tools/4.3.0": { - "sha512": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", - "type": "package", - "path": "system.diagnostics.tools/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Diagnostics.Tools.dll", - "ref/netcore50/System.Diagnostics.Tools.xml", - "ref/netcore50/de/System.Diagnostics.Tools.xml", - "ref/netcore50/es/System.Diagnostics.Tools.xml", - "ref/netcore50/fr/System.Diagnostics.Tools.xml", - "ref/netcore50/it/System.Diagnostics.Tools.xml", - "ref/netcore50/ja/System.Diagnostics.Tools.xml", - "ref/netcore50/ko/System.Diagnostics.Tools.xml", - "ref/netcore50/ru/System.Diagnostics.Tools.xml", - "ref/netcore50/zh-hans/System.Diagnostics.Tools.xml", - "ref/netcore50/zh-hant/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/System.Diagnostics.Tools.dll", - "ref/netstandard1.0/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/de/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/es/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/fr/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/it/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/ja/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/ko/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/ru/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/zh-hans/System.Diagnostics.Tools.xml", - "ref/netstandard1.0/zh-hant/System.Diagnostics.Tools.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.diagnostics.tools.4.3.0.nupkg.sha512", - "system.diagnostics.tools.nuspec" - ] - }, - "System.Diagnostics.Tracing/4.3.0": { - "sha512": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", - "type": "package", - "path": "system.diagnostics.tracing/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net462/System.Diagnostics.Tracing.dll", - "lib/portable-net45+win8+wpa81/_._", - "lib/win8/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net462/System.Diagnostics.Tracing.dll", - "ref/netcore50/System.Diagnostics.Tracing.dll", - "ref/netcore50/System.Diagnostics.Tracing.xml", - "ref/netcore50/de/System.Diagnostics.Tracing.xml", - "ref/netcore50/es/System.Diagnostics.Tracing.xml", - "ref/netcore50/fr/System.Diagnostics.Tracing.xml", - "ref/netcore50/it/System.Diagnostics.Tracing.xml", - "ref/netcore50/ja/System.Diagnostics.Tracing.xml", - "ref/netcore50/ko/System.Diagnostics.Tracing.xml", - "ref/netcore50/ru/System.Diagnostics.Tracing.xml", - "ref/netcore50/zh-hans/System.Diagnostics.Tracing.xml", - "ref/netcore50/zh-hant/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/System.Diagnostics.Tracing.dll", - "ref/netstandard1.1/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/de/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/es/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/fr/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/it/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/ja/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/ko/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/ru/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/zh-hans/System.Diagnostics.Tracing.xml", - "ref/netstandard1.1/zh-hant/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/System.Diagnostics.Tracing.dll", - "ref/netstandard1.2/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/de/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/es/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/fr/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/it/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/ja/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/ko/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/ru/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/zh-hans/System.Diagnostics.Tracing.xml", - "ref/netstandard1.2/zh-hant/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/System.Diagnostics.Tracing.dll", - "ref/netstandard1.3/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/de/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/es/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/fr/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/it/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/ja/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/ko/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/ru/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/zh-hans/System.Diagnostics.Tracing.xml", - "ref/netstandard1.3/zh-hant/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/System.Diagnostics.Tracing.dll", - "ref/netstandard1.5/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/de/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/es/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/fr/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/it/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/ja/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/ko/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/ru/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/zh-hans/System.Diagnostics.Tracing.xml", - "ref/netstandard1.5/zh-hant/System.Diagnostics.Tracing.xml", - "ref/portable-net45+win8+wpa81/_._", - "ref/win8/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.diagnostics.tracing.4.3.0.nupkg.sha512", - "system.diagnostics.tracing.nuspec" - ] - }, - "System.Dynamic.Runtime/4.0.11": { - "sha512": "db34f6LHYM0U0JpE+sOmjar27BnqTVkbLJhgfwMpTdgTigG/Hna3m2MYVwnFzGGKnEJk2UXFuoVTr8WUbU91/A==", - "type": "package", - "path": "system.dynamic.runtime/4.0.11", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Dynamic.Runtime.dll", - "lib/netstandard1.3/System.Dynamic.Runtime.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Dynamic.Runtime.dll", - "ref/netcore50/System.Dynamic.Runtime.xml", - "ref/netcore50/de/System.Dynamic.Runtime.xml", - "ref/netcore50/es/System.Dynamic.Runtime.xml", - "ref/netcore50/fr/System.Dynamic.Runtime.xml", - "ref/netcore50/it/System.Dynamic.Runtime.xml", - "ref/netcore50/ja/System.Dynamic.Runtime.xml", - "ref/netcore50/ko/System.Dynamic.Runtime.xml", - "ref/netcore50/ru/System.Dynamic.Runtime.xml", - "ref/netcore50/zh-hans/System.Dynamic.Runtime.xml", - "ref/netcore50/zh-hant/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/System.Dynamic.Runtime.dll", - "ref/netstandard1.0/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/de/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/es/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/fr/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/it/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/ja/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/ko/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/ru/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/zh-hans/System.Dynamic.Runtime.xml", - "ref/netstandard1.0/zh-hant/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/System.Dynamic.Runtime.dll", - "ref/netstandard1.3/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/de/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/es/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/fr/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/it/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/ja/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/ko/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/ru/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/zh-hans/System.Dynamic.Runtime.xml", - "ref/netstandard1.3/zh-hant/System.Dynamic.Runtime.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/System.Dynamic.Runtime.dll", - "system.dynamic.runtime.4.0.11.nupkg.sha512", - "system.dynamic.runtime.nuspec" - ] - }, - "System.Globalization/4.3.0": { - "sha512": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", - "type": "package", - "path": "system.globalization/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Globalization.dll", - "ref/netcore50/System.Globalization.xml", - "ref/netcore50/de/System.Globalization.xml", - "ref/netcore50/es/System.Globalization.xml", - "ref/netcore50/fr/System.Globalization.xml", - "ref/netcore50/it/System.Globalization.xml", - "ref/netcore50/ja/System.Globalization.xml", - "ref/netcore50/ko/System.Globalization.xml", - "ref/netcore50/ru/System.Globalization.xml", - "ref/netcore50/zh-hans/System.Globalization.xml", - "ref/netcore50/zh-hant/System.Globalization.xml", - "ref/netstandard1.0/System.Globalization.dll", - "ref/netstandard1.0/System.Globalization.xml", - "ref/netstandard1.0/de/System.Globalization.xml", - "ref/netstandard1.0/es/System.Globalization.xml", - "ref/netstandard1.0/fr/System.Globalization.xml", - "ref/netstandard1.0/it/System.Globalization.xml", - "ref/netstandard1.0/ja/System.Globalization.xml", - "ref/netstandard1.0/ko/System.Globalization.xml", - "ref/netstandard1.0/ru/System.Globalization.xml", - "ref/netstandard1.0/zh-hans/System.Globalization.xml", - "ref/netstandard1.0/zh-hant/System.Globalization.xml", - "ref/netstandard1.3/System.Globalization.dll", - "ref/netstandard1.3/System.Globalization.xml", - "ref/netstandard1.3/de/System.Globalization.xml", - "ref/netstandard1.3/es/System.Globalization.xml", - "ref/netstandard1.3/fr/System.Globalization.xml", - "ref/netstandard1.3/it/System.Globalization.xml", - "ref/netstandard1.3/ja/System.Globalization.xml", - "ref/netstandard1.3/ko/System.Globalization.xml", - "ref/netstandard1.3/ru/System.Globalization.xml", - "ref/netstandard1.3/zh-hans/System.Globalization.xml", - "ref/netstandard1.3/zh-hant/System.Globalization.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.globalization.4.3.0.nupkg.sha512", - "system.globalization.nuspec" - ] - }, - "System.Globalization.Calendars/4.3.0": { - "sha512": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", - "type": "package", - "path": "system.globalization.calendars/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Globalization.Calendars.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Globalization.Calendars.dll", - "ref/netstandard1.3/System.Globalization.Calendars.dll", - "ref/netstandard1.3/System.Globalization.Calendars.xml", - "ref/netstandard1.3/de/System.Globalization.Calendars.xml", - "ref/netstandard1.3/es/System.Globalization.Calendars.xml", - "ref/netstandard1.3/fr/System.Globalization.Calendars.xml", - "ref/netstandard1.3/it/System.Globalization.Calendars.xml", - "ref/netstandard1.3/ja/System.Globalization.Calendars.xml", - "ref/netstandard1.3/ko/System.Globalization.Calendars.xml", - "ref/netstandard1.3/ru/System.Globalization.Calendars.xml", - "ref/netstandard1.3/zh-hans/System.Globalization.Calendars.xml", - "ref/netstandard1.3/zh-hant/System.Globalization.Calendars.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.globalization.calendars.4.3.0.nupkg.sha512", - "system.globalization.calendars.nuspec" - ] - }, - "System.Globalization.Extensions/4.3.0": { - "sha512": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", - "type": "package", - "path": "system.globalization.extensions/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Globalization.Extensions.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Globalization.Extensions.dll", - "ref/netstandard1.3/System.Globalization.Extensions.dll", - "ref/netstandard1.3/System.Globalization.Extensions.xml", - "ref/netstandard1.3/de/System.Globalization.Extensions.xml", - "ref/netstandard1.3/es/System.Globalization.Extensions.xml", - "ref/netstandard1.3/fr/System.Globalization.Extensions.xml", - "ref/netstandard1.3/it/System.Globalization.Extensions.xml", - "ref/netstandard1.3/ja/System.Globalization.Extensions.xml", - "ref/netstandard1.3/ko/System.Globalization.Extensions.xml", - "ref/netstandard1.3/ru/System.Globalization.Extensions.xml", - "ref/netstandard1.3/zh-hans/System.Globalization.Extensions.xml", - "ref/netstandard1.3/zh-hant/System.Globalization.Extensions.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/unix/lib/netstandard1.3/System.Globalization.Extensions.dll", - "runtimes/win/lib/net46/System.Globalization.Extensions.dll", - "runtimes/win/lib/netstandard1.3/System.Globalization.Extensions.dll", - "system.globalization.extensions.4.3.0.nupkg.sha512", - "system.globalization.extensions.nuspec" - ] - }, - "System.IO/4.3.0": { - "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", - "type": "package", - "path": "system.io/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net462/System.IO.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net462/System.IO.dll", - "ref/netcore50/System.IO.dll", - "ref/netcore50/System.IO.xml", - "ref/netcore50/de/System.IO.xml", - "ref/netcore50/es/System.IO.xml", - "ref/netcore50/fr/System.IO.xml", - "ref/netcore50/it/System.IO.xml", - "ref/netcore50/ja/System.IO.xml", - "ref/netcore50/ko/System.IO.xml", - "ref/netcore50/ru/System.IO.xml", - "ref/netcore50/zh-hans/System.IO.xml", - "ref/netcore50/zh-hant/System.IO.xml", - "ref/netstandard1.0/System.IO.dll", - "ref/netstandard1.0/System.IO.xml", - "ref/netstandard1.0/de/System.IO.xml", - "ref/netstandard1.0/es/System.IO.xml", - "ref/netstandard1.0/fr/System.IO.xml", - "ref/netstandard1.0/it/System.IO.xml", - "ref/netstandard1.0/ja/System.IO.xml", - "ref/netstandard1.0/ko/System.IO.xml", - "ref/netstandard1.0/ru/System.IO.xml", - "ref/netstandard1.0/zh-hans/System.IO.xml", - "ref/netstandard1.0/zh-hant/System.IO.xml", - "ref/netstandard1.3/System.IO.dll", - "ref/netstandard1.3/System.IO.xml", - "ref/netstandard1.3/de/System.IO.xml", - "ref/netstandard1.3/es/System.IO.xml", - "ref/netstandard1.3/fr/System.IO.xml", - "ref/netstandard1.3/it/System.IO.xml", - "ref/netstandard1.3/ja/System.IO.xml", - "ref/netstandard1.3/ko/System.IO.xml", - "ref/netstandard1.3/ru/System.IO.xml", - "ref/netstandard1.3/zh-hans/System.IO.xml", - "ref/netstandard1.3/zh-hant/System.IO.xml", - "ref/netstandard1.5/System.IO.dll", - "ref/netstandard1.5/System.IO.xml", - "ref/netstandard1.5/de/System.IO.xml", - "ref/netstandard1.5/es/System.IO.xml", - "ref/netstandard1.5/fr/System.IO.xml", - "ref/netstandard1.5/it/System.IO.xml", - "ref/netstandard1.5/ja/System.IO.xml", - "ref/netstandard1.5/ko/System.IO.xml", - "ref/netstandard1.5/ru/System.IO.xml", - "ref/netstandard1.5/zh-hans/System.IO.xml", - "ref/netstandard1.5/zh-hant/System.IO.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.io.4.3.0.nupkg.sha512", - "system.io.nuspec" - ] - }, - "System.IO.Compression/4.3.0": { - "sha512": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", - "type": "package", - "path": "system.io.compression/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net46/System.IO.Compression.dll", - "lib/portable-net45+win8+wpa81/_._", - "lib/win8/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net46/System.IO.Compression.dll", - "ref/netcore50/System.IO.Compression.dll", - "ref/netcore50/System.IO.Compression.xml", - "ref/netcore50/de/System.IO.Compression.xml", - "ref/netcore50/es/System.IO.Compression.xml", - "ref/netcore50/fr/System.IO.Compression.xml", - "ref/netcore50/it/System.IO.Compression.xml", - "ref/netcore50/ja/System.IO.Compression.xml", - "ref/netcore50/ko/System.IO.Compression.xml", - "ref/netcore50/ru/System.IO.Compression.xml", - "ref/netcore50/zh-hans/System.IO.Compression.xml", - "ref/netcore50/zh-hant/System.IO.Compression.xml", - "ref/netstandard1.1/System.IO.Compression.dll", - "ref/netstandard1.1/System.IO.Compression.xml", - "ref/netstandard1.1/de/System.IO.Compression.xml", - "ref/netstandard1.1/es/System.IO.Compression.xml", - "ref/netstandard1.1/fr/System.IO.Compression.xml", - "ref/netstandard1.1/it/System.IO.Compression.xml", - "ref/netstandard1.1/ja/System.IO.Compression.xml", - "ref/netstandard1.1/ko/System.IO.Compression.xml", - "ref/netstandard1.1/ru/System.IO.Compression.xml", - "ref/netstandard1.1/zh-hans/System.IO.Compression.xml", - "ref/netstandard1.1/zh-hant/System.IO.Compression.xml", - "ref/netstandard1.3/System.IO.Compression.dll", - "ref/netstandard1.3/System.IO.Compression.xml", - "ref/netstandard1.3/de/System.IO.Compression.xml", - "ref/netstandard1.3/es/System.IO.Compression.xml", - "ref/netstandard1.3/fr/System.IO.Compression.xml", - "ref/netstandard1.3/it/System.IO.Compression.xml", - "ref/netstandard1.3/ja/System.IO.Compression.xml", - "ref/netstandard1.3/ko/System.IO.Compression.xml", - "ref/netstandard1.3/ru/System.IO.Compression.xml", - "ref/netstandard1.3/zh-hans/System.IO.Compression.xml", - "ref/netstandard1.3/zh-hant/System.IO.Compression.xml", - "ref/portable-net45+win8+wpa81/_._", - "ref/win8/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/unix/lib/netstandard1.3/System.IO.Compression.dll", - "runtimes/win/lib/net46/System.IO.Compression.dll", - "runtimes/win/lib/netstandard1.3/System.IO.Compression.dll", - "system.io.compression.4.3.0.nupkg.sha512", - "system.io.compression.nuspec" - ] - }, - "System.IO.Compression.ZipFile/4.3.0": { - "sha512": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", - "type": "package", - "path": "system.io.compression.zipfile/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.IO.Compression.ZipFile.dll", - "lib/netstandard1.3/System.IO.Compression.ZipFile.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.IO.Compression.ZipFile.dll", - "ref/netstandard1.3/System.IO.Compression.ZipFile.dll", - "ref/netstandard1.3/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/de/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/es/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/fr/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/it/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/ja/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/ko/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/ru/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/zh-hans/System.IO.Compression.ZipFile.xml", - "ref/netstandard1.3/zh-hant/System.IO.Compression.ZipFile.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.io.compression.zipfile.4.3.0.nupkg.sha512", - "system.io.compression.zipfile.nuspec" - ] - }, - "System.IO.FileSystem/4.3.0": { - "sha512": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", - "type": "package", - "path": "system.io.filesystem/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.IO.FileSystem.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.IO.FileSystem.dll", - "ref/netstandard1.3/System.IO.FileSystem.dll", - "ref/netstandard1.3/System.IO.FileSystem.xml", - "ref/netstandard1.3/de/System.IO.FileSystem.xml", - "ref/netstandard1.3/es/System.IO.FileSystem.xml", - "ref/netstandard1.3/fr/System.IO.FileSystem.xml", - "ref/netstandard1.3/it/System.IO.FileSystem.xml", - "ref/netstandard1.3/ja/System.IO.FileSystem.xml", - "ref/netstandard1.3/ko/System.IO.FileSystem.xml", - "ref/netstandard1.3/ru/System.IO.FileSystem.xml", - "ref/netstandard1.3/zh-hans/System.IO.FileSystem.xml", - "ref/netstandard1.3/zh-hant/System.IO.FileSystem.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.io.filesystem.4.3.0.nupkg.sha512", - "system.io.filesystem.nuspec" - ] - }, - "System.IO.FileSystem.Primitives/4.3.0": { - "sha512": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", - "type": "package", - "path": "system.io.filesystem.primitives/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.IO.FileSystem.Primitives.dll", - "lib/netstandard1.3/System.IO.FileSystem.Primitives.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.IO.FileSystem.Primitives.dll", - "ref/netstandard1.3/System.IO.FileSystem.Primitives.dll", - "ref/netstandard1.3/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/de/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/es/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/fr/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/it/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/ja/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/ko/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/ru/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/zh-hans/System.IO.FileSystem.Primitives.xml", - "ref/netstandard1.3/zh-hant/System.IO.FileSystem.Primitives.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.io.filesystem.primitives.4.3.0.nupkg.sha512", - "system.io.filesystem.primitives.nuspec" - ] - }, - "System.Linq/4.3.0": { - "sha512": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", - "type": "package", - "path": "system.linq/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net463/System.Linq.dll", - "lib/netcore50/System.Linq.dll", - "lib/netstandard1.6/System.Linq.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net463/System.Linq.dll", - "ref/netcore50/System.Linq.dll", - "ref/netcore50/System.Linq.xml", - "ref/netcore50/de/System.Linq.xml", - "ref/netcore50/es/System.Linq.xml", - "ref/netcore50/fr/System.Linq.xml", - "ref/netcore50/it/System.Linq.xml", - "ref/netcore50/ja/System.Linq.xml", - "ref/netcore50/ko/System.Linq.xml", - "ref/netcore50/ru/System.Linq.xml", - "ref/netcore50/zh-hans/System.Linq.xml", - "ref/netcore50/zh-hant/System.Linq.xml", - "ref/netstandard1.0/System.Linq.dll", - "ref/netstandard1.0/System.Linq.xml", - "ref/netstandard1.0/de/System.Linq.xml", - "ref/netstandard1.0/es/System.Linq.xml", - "ref/netstandard1.0/fr/System.Linq.xml", - "ref/netstandard1.0/it/System.Linq.xml", - "ref/netstandard1.0/ja/System.Linq.xml", - "ref/netstandard1.0/ko/System.Linq.xml", - "ref/netstandard1.0/ru/System.Linq.xml", - "ref/netstandard1.0/zh-hans/System.Linq.xml", - "ref/netstandard1.0/zh-hant/System.Linq.xml", - "ref/netstandard1.6/System.Linq.dll", - "ref/netstandard1.6/System.Linq.xml", - "ref/netstandard1.6/de/System.Linq.xml", - "ref/netstandard1.6/es/System.Linq.xml", - "ref/netstandard1.6/fr/System.Linq.xml", - "ref/netstandard1.6/it/System.Linq.xml", - "ref/netstandard1.6/ja/System.Linq.xml", - "ref/netstandard1.6/ko/System.Linq.xml", - "ref/netstandard1.6/ru/System.Linq.xml", - "ref/netstandard1.6/zh-hans/System.Linq.xml", - "ref/netstandard1.6/zh-hant/System.Linq.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.linq.4.3.0.nupkg.sha512", - "system.linq.nuspec" - ] - }, - "System.Linq.Expressions/4.3.0": { - "sha512": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", - "type": "package", - "path": "system.linq.expressions/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net463/System.Linq.Expressions.dll", - "lib/netcore50/System.Linq.Expressions.dll", - "lib/netstandard1.6/System.Linq.Expressions.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net463/System.Linq.Expressions.dll", - "ref/netcore50/System.Linq.Expressions.dll", - "ref/netcore50/System.Linq.Expressions.xml", - "ref/netcore50/de/System.Linq.Expressions.xml", - "ref/netcore50/es/System.Linq.Expressions.xml", - "ref/netcore50/fr/System.Linq.Expressions.xml", - "ref/netcore50/it/System.Linq.Expressions.xml", - "ref/netcore50/ja/System.Linq.Expressions.xml", - "ref/netcore50/ko/System.Linq.Expressions.xml", - "ref/netcore50/ru/System.Linq.Expressions.xml", - "ref/netcore50/zh-hans/System.Linq.Expressions.xml", - "ref/netcore50/zh-hant/System.Linq.Expressions.xml", - "ref/netstandard1.0/System.Linq.Expressions.dll", - "ref/netstandard1.0/System.Linq.Expressions.xml", - "ref/netstandard1.0/de/System.Linq.Expressions.xml", - "ref/netstandard1.0/es/System.Linq.Expressions.xml", - "ref/netstandard1.0/fr/System.Linq.Expressions.xml", - "ref/netstandard1.0/it/System.Linq.Expressions.xml", - "ref/netstandard1.0/ja/System.Linq.Expressions.xml", - "ref/netstandard1.0/ko/System.Linq.Expressions.xml", - "ref/netstandard1.0/ru/System.Linq.Expressions.xml", - "ref/netstandard1.0/zh-hans/System.Linq.Expressions.xml", - "ref/netstandard1.0/zh-hant/System.Linq.Expressions.xml", - "ref/netstandard1.3/System.Linq.Expressions.dll", - "ref/netstandard1.3/System.Linq.Expressions.xml", - "ref/netstandard1.3/de/System.Linq.Expressions.xml", - "ref/netstandard1.3/es/System.Linq.Expressions.xml", - "ref/netstandard1.3/fr/System.Linq.Expressions.xml", - "ref/netstandard1.3/it/System.Linq.Expressions.xml", - "ref/netstandard1.3/ja/System.Linq.Expressions.xml", - "ref/netstandard1.3/ko/System.Linq.Expressions.xml", - "ref/netstandard1.3/ru/System.Linq.Expressions.xml", - "ref/netstandard1.3/zh-hans/System.Linq.Expressions.xml", - "ref/netstandard1.3/zh-hant/System.Linq.Expressions.xml", - "ref/netstandard1.6/System.Linq.Expressions.dll", - "ref/netstandard1.6/System.Linq.Expressions.xml", - "ref/netstandard1.6/de/System.Linq.Expressions.xml", - "ref/netstandard1.6/es/System.Linq.Expressions.xml", - "ref/netstandard1.6/fr/System.Linq.Expressions.xml", - "ref/netstandard1.6/it/System.Linq.Expressions.xml", - "ref/netstandard1.6/ja/System.Linq.Expressions.xml", - "ref/netstandard1.6/ko/System.Linq.Expressions.xml", - "ref/netstandard1.6/ru/System.Linq.Expressions.xml", - "ref/netstandard1.6/zh-hans/System.Linq.Expressions.xml", - "ref/netstandard1.6/zh-hant/System.Linq.Expressions.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/System.Linq.Expressions.dll", - "system.linq.expressions.4.3.0.nupkg.sha512", - "system.linq.expressions.nuspec" - ] - }, - "System.Net.Http/4.3.0": { - "sha512": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", - "type": "package", - "path": "system.net.http/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/Xamarinmac20/_._", - "lib/monoandroid10/_._", - "lib/monotouch10/_._", - "lib/net45/_._", - "lib/net46/System.Net.Http.dll", - "lib/portable-net45+win8+wpa81/_._", - "lib/win8/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/Xamarinmac20/_._", - "ref/monoandroid10/_._", - "ref/monotouch10/_._", - "ref/net45/_._", - "ref/net46/System.Net.Http.dll", - "ref/net46/System.Net.Http.xml", - "ref/net46/de/System.Net.Http.xml", - "ref/net46/es/System.Net.Http.xml", - "ref/net46/fr/System.Net.Http.xml", - "ref/net46/it/System.Net.Http.xml", - "ref/net46/ja/System.Net.Http.xml", - "ref/net46/ko/System.Net.Http.xml", - "ref/net46/ru/System.Net.Http.xml", - "ref/net46/zh-hans/System.Net.Http.xml", - "ref/net46/zh-hant/System.Net.Http.xml", - "ref/netcore50/System.Net.Http.dll", - "ref/netcore50/System.Net.Http.xml", - "ref/netcore50/de/System.Net.Http.xml", - "ref/netcore50/es/System.Net.Http.xml", - "ref/netcore50/fr/System.Net.Http.xml", - "ref/netcore50/it/System.Net.Http.xml", - "ref/netcore50/ja/System.Net.Http.xml", - "ref/netcore50/ko/System.Net.Http.xml", - "ref/netcore50/ru/System.Net.Http.xml", - "ref/netcore50/zh-hans/System.Net.Http.xml", - "ref/netcore50/zh-hant/System.Net.Http.xml", - "ref/netstandard1.1/System.Net.Http.dll", - "ref/netstandard1.1/System.Net.Http.xml", - "ref/netstandard1.1/de/System.Net.Http.xml", - "ref/netstandard1.1/es/System.Net.Http.xml", - "ref/netstandard1.1/fr/System.Net.Http.xml", - "ref/netstandard1.1/it/System.Net.Http.xml", - "ref/netstandard1.1/ja/System.Net.Http.xml", - "ref/netstandard1.1/ko/System.Net.Http.xml", - "ref/netstandard1.1/ru/System.Net.Http.xml", - "ref/netstandard1.1/zh-hans/System.Net.Http.xml", - "ref/netstandard1.1/zh-hant/System.Net.Http.xml", - "ref/netstandard1.3/System.Net.Http.dll", - "ref/netstandard1.3/System.Net.Http.xml", - "ref/netstandard1.3/de/System.Net.Http.xml", - "ref/netstandard1.3/es/System.Net.Http.xml", - "ref/netstandard1.3/fr/System.Net.Http.xml", - "ref/netstandard1.3/it/System.Net.Http.xml", - "ref/netstandard1.3/ja/System.Net.Http.xml", - "ref/netstandard1.3/ko/System.Net.Http.xml", - "ref/netstandard1.3/ru/System.Net.Http.xml", - "ref/netstandard1.3/zh-hans/System.Net.Http.xml", - "ref/netstandard1.3/zh-hant/System.Net.Http.xml", - "ref/portable-net45+win8+wpa81/_._", - "ref/win8/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/unix/lib/netstandard1.6/System.Net.Http.dll", - "runtimes/win/lib/net46/System.Net.Http.dll", - "runtimes/win/lib/netcore50/System.Net.Http.dll", - "runtimes/win/lib/netstandard1.3/System.Net.Http.dll", - "system.net.http.4.3.0.nupkg.sha512", - "system.net.http.nuspec" - ] - }, - "System.Net.Primitives/4.3.0": { - "sha512": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", - "type": "package", - "path": "system.net.primitives/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Net.Primitives.dll", - "ref/netcore50/System.Net.Primitives.xml", - "ref/netcore50/de/System.Net.Primitives.xml", - "ref/netcore50/es/System.Net.Primitives.xml", - "ref/netcore50/fr/System.Net.Primitives.xml", - "ref/netcore50/it/System.Net.Primitives.xml", - "ref/netcore50/ja/System.Net.Primitives.xml", - "ref/netcore50/ko/System.Net.Primitives.xml", - "ref/netcore50/ru/System.Net.Primitives.xml", - "ref/netcore50/zh-hans/System.Net.Primitives.xml", - "ref/netcore50/zh-hant/System.Net.Primitives.xml", - "ref/netstandard1.0/System.Net.Primitives.dll", - "ref/netstandard1.0/System.Net.Primitives.xml", - "ref/netstandard1.0/de/System.Net.Primitives.xml", - "ref/netstandard1.0/es/System.Net.Primitives.xml", - "ref/netstandard1.0/fr/System.Net.Primitives.xml", - "ref/netstandard1.0/it/System.Net.Primitives.xml", - "ref/netstandard1.0/ja/System.Net.Primitives.xml", - "ref/netstandard1.0/ko/System.Net.Primitives.xml", - "ref/netstandard1.0/ru/System.Net.Primitives.xml", - "ref/netstandard1.0/zh-hans/System.Net.Primitives.xml", - "ref/netstandard1.0/zh-hant/System.Net.Primitives.xml", - "ref/netstandard1.1/System.Net.Primitives.dll", - "ref/netstandard1.1/System.Net.Primitives.xml", - "ref/netstandard1.1/de/System.Net.Primitives.xml", - "ref/netstandard1.1/es/System.Net.Primitives.xml", - "ref/netstandard1.1/fr/System.Net.Primitives.xml", - "ref/netstandard1.1/it/System.Net.Primitives.xml", - "ref/netstandard1.1/ja/System.Net.Primitives.xml", - "ref/netstandard1.1/ko/System.Net.Primitives.xml", - "ref/netstandard1.1/ru/System.Net.Primitives.xml", - "ref/netstandard1.1/zh-hans/System.Net.Primitives.xml", - "ref/netstandard1.1/zh-hant/System.Net.Primitives.xml", - "ref/netstandard1.3/System.Net.Primitives.dll", - "ref/netstandard1.3/System.Net.Primitives.xml", - "ref/netstandard1.3/de/System.Net.Primitives.xml", - "ref/netstandard1.3/es/System.Net.Primitives.xml", - "ref/netstandard1.3/fr/System.Net.Primitives.xml", - "ref/netstandard1.3/it/System.Net.Primitives.xml", - "ref/netstandard1.3/ja/System.Net.Primitives.xml", - "ref/netstandard1.3/ko/System.Net.Primitives.xml", - "ref/netstandard1.3/ru/System.Net.Primitives.xml", - "ref/netstandard1.3/zh-hans/System.Net.Primitives.xml", - "ref/netstandard1.3/zh-hant/System.Net.Primitives.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.net.primitives.4.3.0.nupkg.sha512", - "system.net.primitives.nuspec" - ] - }, - "System.Net.Sockets/4.3.0": { - "sha512": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", - "type": "package", - "path": "system.net.sockets/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Net.Sockets.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Net.Sockets.dll", - "ref/netstandard1.3/System.Net.Sockets.dll", - "ref/netstandard1.3/System.Net.Sockets.xml", - "ref/netstandard1.3/de/System.Net.Sockets.xml", - "ref/netstandard1.3/es/System.Net.Sockets.xml", - "ref/netstandard1.3/fr/System.Net.Sockets.xml", - "ref/netstandard1.3/it/System.Net.Sockets.xml", - "ref/netstandard1.3/ja/System.Net.Sockets.xml", - "ref/netstandard1.3/ko/System.Net.Sockets.xml", - "ref/netstandard1.3/ru/System.Net.Sockets.xml", - "ref/netstandard1.3/zh-hans/System.Net.Sockets.xml", - "ref/netstandard1.3/zh-hant/System.Net.Sockets.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.net.sockets.4.3.0.nupkg.sha512", - "system.net.sockets.nuspec" - ] - }, - "System.ObjectModel/4.3.0": { - "sha512": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", - "type": "package", - "path": "system.objectmodel/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.ObjectModel.dll", - "lib/netstandard1.3/System.ObjectModel.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.ObjectModel.dll", - "ref/netcore50/System.ObjectModel.xml", - "ref/netcore50/de/System.ObjectModel.xml", - "ref/netcore50/es/System.ObjectModel.xml", - "ref/netcore50/fr/System.ObjectModel.xml", - "ref/netcore50/it/System.ObjectModel.xml", - "ref/netcore50/ja/System.ObjectModel.xml", - "ref/netcore50/ko/System.ObjectModel.xml", - "ref/netcore50/ru/System.ObjectModel.xml", - "ref/netcore50/zh-hans/System.ObjectModel.xml", - "ref/netcore50/zh-hant/System.ObjectModel.xml", - "ref/netstandard1.0/System.ObjectModel.dll", - "ref/netstandard1.0/System.ObjectModel.xml", - "ref/netstandard1.0/de/System.ObjectModel.xml", - "ref/netstandard1.0/es/System.ObjectModel.xml", - "ref/netstandard1.0/fr/System.ObjectModel.xml", - "ref/netstandard1.0/it/System.ObjectModel.xml", - "ref/netstandard1.0/ja/System.ObjectModel.xml", - "ref/netstandard1.0/ko/System.ObjectModel.xml", - "ref/netstandard1.0/ru/System.ObjectModel.xml", - "ref/netstandard1.0/zh-hans/System.ObjectModel.xml", - "ref/netstandard1.0/zh-hant/System.ObjectModel.xml", - "ref/netstandard1.3/System.ObjectModel.dll", - "ref/netstandard1.3/System.ObjectModel.xml", - "ref/netstandard1.3/de/System.ObjectModel.xml", - "ref/netstandard1.3/es/System.ObjectModel.xml", - "ref/netstandard1.3/fr/System.ObjectModel.xml", - "ref/netstandard1.3/it/System.ObjectModel.xml", - "ref/netstandard1.3/ja/System.ObjectModel.xml", - "ref/netstandard1.3/ko/System.ObjectModel.xml", - "ref/netstandard1.3/ru/System.ObjectModel.xml", - "ref/netstandard1.3/zh-hans/System.ObjectModel.xml", - "ref/netstandard1.3/zh-hant/System.ObjectModel.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.objectmodel.4.3.0.nupkg.sha512", - "system.objectmodel.nuspec" - ] - }, - "System.Reflection/4.3.0": { - "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", - "type": "package", - "path": "system.reflection/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net462/System.Reflection.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net462/System.Reflection.dll", - "ref/netcore50/System.Reflection.dll", - "ref/netcore50/System.Reflection.xml", - "ref/netcore50/de/System.Reflection.xml", - "ref/netcore50/es/System.Reflection.xml", - "ref/netcore50/fr/System.Reflection.xml", - "ref/netcore50/it/System.Reflection.xml", - "ref/netcore50/ja/System.Reflection.xml", - "ref/netcore50/ko/System.Reflection.xml", - "ref/netcore50/ru/System.Reflection.xml", - "ref/netcore50/zh-hans/System.Reflection.xml", - "ref/netcore50/zh-hant/System.Reflection.xml", - "ref/netstandard1.0/System.Reflection.dll", - "ref/netstandard1.0/System.Reflection.xml", - "ref/netstandard1.0/de/System.Reflection.xml", - "ref/netstandard1.0/es/System.Reflection.xml", - "ref/netstandard1.0/fr/System.Reflection.xml", - "ref/netstandard1.0/it/System.Reflection.xml", - "ref/netstandard1.0/ja/System.Reflection.xml", - "ref/netstandard1.0/ko/System.Reflection.xml", - "ref/netstandard1.0/ru/System.Reflection.xml", - "ref/netstandard1.0/zh-hans/System.Reflection.xml", - "ref/netstandard1.0/zh-hant/System.Reflection.xml", - "ref/netstandard1.3/System.Reflection.dll", - "ref/netstandard1.3/System.Reflection.xml", - "ref/netstandard1.3/de/System.Reflection.xml", - "ref/netstandard1.3/es/System.Reflection.xml", - "ref/netstandard1.3/fr/System.Reflection.xml", - "ref/netstandard1.3/it/System.Reflection.xml", - "ref/netstandard1.3/ja/System.Reflection.xml", - "ref/netstandard1.3/ko/System.Reflection.xml", - "ref/netstandard1.3/ru/System.Reflection.xml", - "ref/netstandard1.3/zh-hans/System.Reflection.xml", - "ref/netstandard1.3/zh-hant/System.Reflection.xml", - "ref/netstandard1.5/System.Reflection.dll", - "ref/netstandard1.5/System.Reflection.xml", - "ref/netstandard1.5/de/System.Reflection.xml", - "ref/netstandard1.5/es/System.Reflection.xml", - "ref/netstandard1.5/fr/System.Reflection.xml", - "ref/netstandard1.5/it/System.Reflection.xml", - "ref/netstandard1.5/ja/System.Reflection.xml", - "ref/netstandard1.5/ko/System.Reflection.xml", - "ref/netstandard1.5/ru/System.Reflection.xml", - "ref/netstandard1.5/zh-hans/System.Reflection.xml", - "ref/netstandard1.5/zh-hant/System.Reflection.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.reflection.4.3.0.nupkg.sha512", - "system.reflection.nuspec" - ] - }, - "System.Reflection.Emit/4.3.0": { - "sha512": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", - "type": "package", - "path": "system.reflection.emit/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/monotouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Reflection.Emit.dll", - "lib/netstandard1.3/System.Reflection.Emit.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/net45/_._", - "ref/netstandard1.1/System.Reflection.Emit.dll", - "ref/netstandard1.1/System.Reflection.Emit.xml", - "ref/netstandard1.1/de/System.Reflection.Emit.xml", - "ref/netstandard1.1/es/System.Reflection.Emit.xml", - "ref/netstandard1.1/fr/System.Reflection.Emit.xml", - "ref/netstandard1.1/it/System.Reflection.Emit.xml", - "ref/netstandard1.1/ja/System.Reflection.Emit.xml", - "ref/netstandard1.1/ko/System.Reflection.Emit.xml", - "ref/netstandard1.1/ru/System.Reflection.Emit.xml", - "ref/netstandard1.1/zh-hans/System.Reflection.Emit.xml", - "ref/netstandard1.1/zh-hant/System.Reflection.Emit.xml", - "ref/xamarinmac20/_._", - "system.reflection.emit.4.3.0.nupkg.sha512", - "system.reflection.emit.nuspec" - ] - }, - "System.Reflection.Emit.ILGeneration/4.3.0": { - "sha512": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", - "type": "package", - "path": "system.reflection.emit.ilgeneration/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Reflection.Emit.ILGeneration.dll", - "lib/netstandard1.3/System.Reflection.Emit.ILGeneration.dll", - "lib/portable-net45+wp8/_._", - "lib/wp80/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.dll", - "ref/netstandard1.0/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/de/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/es/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/fr/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/it/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/ja/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/ko/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/ru/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/zh-hans/System.Reflection.Emit.ILGeneration.xml", - "ref/netstandard1.0/zh-hant/System.Reflection.Emit.ILGeneration.xml", - "ref/portable-net45+wp8/_._", - "ref/wp80/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/_._", - "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512", - "system.reflection.emit.ilgeneration.nuspec" - ] - }, - "System.Reflection.Emit.Lightweight/4.3.0": { - "sha512": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==", - "type": "package", - "path": "system.reflection.emit.lightweight/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Reflection.Emit.Lightweight.dll", - "lib/netstandard1.3/System.Reflection.Emit.Lightweight.dll", - "lib/portable-net45+wp8/_._", - "lib/wp80/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netstandard1.0/System.Reflection.Emit.Lightweight.dll", - "ref/netstandard1.0/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/de/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/es/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/fr/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/it/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/ja/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/ko/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/ru/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/zh-hans/System.Reflection.Emit.Lightweight.xml", - "ref/netstandard1.0/zh-hant/System.Reflection.Emit.Lightweight.xml", - "ref/portable-net45+wp8/_._", - "ref/wp80/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/_._", - "system.reflection.emit.lightweight.4.3.0.nupkg.sha512", - "system.reflection.emit.lightweight.nuspec" - ] - }, - "System.Reflection.Extensions/4.3.0": { - "sha512": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", - "type": "package", - "path": "system.reflection.extensions/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Reflection.Extensions.dll", - "ref/netcore50/System.Reflection.Extensions.xml", - "ref/netcore50/de/System.Reflection.Extensions.xml", - "ref/netcore50/es/System.Reflection.Extensions.xml", - "ref/netcore50/fr/System.Reflection.Extensions.xml", - "ref/netcore50/it/System.Reflection.Extensions.xml", - "ref/netcore50/ja/System.Reflection.Extensions.xml", - "ref/netcore50/ko/System.Reflection.Extensions.xml", - "ref/netcore50/ru/System.Reflection.Extensions.xml", - "ref/netcore50/zh-hans/System.Reflection.Extensions.xml", - "ref/netcore50/zh-hant/System.Reflection.Extensions.xml", - "ref/netstandard1.0/System.Reflection.Extensions.dll", - "ref/netstandard1.0/System.Reflection.Extensions.xml", - "ref/netstandard1.0/de/System.Reflection.Extensions.xml", - "ref/netstandard1.0/es/System.Reflection.Extensions.xml", - "ref/netstandard1.0/fr/System.Reflection.Extensions.xml", - "ref/netstandard1.0/it/System.Reflection.Extensions.xml", - "ref/netstandard1.0/ja/System.Reflection.Extensions.xml", - "ref/netstandard1.0/ko/System.Reflection.Extensions.xml", - "ref/netstandard1.0/ru/System.Reflection.Extensions.xml", - "ref/netstandard1.0/zh-hans/System.Reflection.Extensions.xml", - "ref/netstandard1.0/zh-hant/System.Reflection.Extensions.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.reflection.extensions.4.3.0.nupkg.sha512", - "system.reflection.extensions.nuspec" - ] - }, - "System.Reflection.Metadata/1.6.0": { - "sha512": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ==", - "type": "package", - "path": "system.reflection.metadata/1.6.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/netstandard1.1/System.Reflection.Metadata.dll", - "lib/netstandard1.1/System.Reflection.Metadata.xml", - "lib/netstandard2.0/System.Reflection.Metadata.dll", - "lib/netstandard2.0/System.Reflection.Metadata.xml", - "lib/portable-net45+win8/System.Reflection.Metadata.dll", - "lib/portable-net45+win8/System.Reflection.Metadata.xml", - "system.reflection.metadata.1.6.0.nupkg.sha512", - "system.reflection.metadata.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "System.Reflection.Primitives/4.3.0": { - "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", - "type": "package", - "path": "system.reflection.primitives/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Reflection.Primitives.dll", - "ref/netcore50/System.Reflection.Primitives.xml", - "ref/netcore50/de/System.Reflection.Primitives.xml", - "ref/netcore50/es/System.Reflection.Primitives.xml", - "ref/netcore50/fr/System.Reflection.Primitives.xml", - "ref/netcore50/it/System.Reflection.Primitives.xml", - "ref/netcore50/ja/System.Reflection.Primitives.xml", - "ref/netcore50/ko/System.Reflection.Primitives.xml", - "ref/netcore50/ru/System.Reflection.Primitives.xml", - "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", - "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", - "ref/netstandard1.0/System.Reflection.Primitives.dll", - "ref/netstandard1.0/System.Reflection.Primitives.xml", - "ref/netstandard1.0/de/System.Reflection.Primitives.xml", - "ref/netstandard1.0/es/System.Reflection.Primitives.xml", - "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", - "ref/netstandard1.0/it/System.Reflection.Primitives.xml", - "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", - "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", - "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", - "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", - "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.reflection.primitives.4.3.0.nupkg.sha512", - "system.reflection.primitives.nuspec" - ] - }, - "System.Reflection.TypeExtensions/4.3.0": { - "sha512": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", - "type": "package", - "path": "system.reflection.typeextensions/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Reflection.TypeExtensions.dll", - "lib/net462/System.Reflection.TypeExtensions.dll", - "lib/netcore50/System.Reflection.TypeExtensions.dll", - "lib/netstandard1.5/System.Reflection.TypeExtensions.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Reflection.TypeExtensions.dll", - "ref/net462/System.Reflection.TypeExtensions.dll", - "ref/netstandard1.3/System.Reflection.TypeExtensions.dll", - "ref/netstandard1.3/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/de/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/es/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/fr/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/it/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/ja/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/ko/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/ru/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/zh-hans/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.3/zh-hant/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/System.Reflection.TypeExtensions.dll", - "ref/netstandard1.5/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/de/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/es/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/fr/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/it/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/ja/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/ko/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/ru/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/zh-hans/System.Reflection.TypeExtensions.xml", - "ref/netstandard1.5/zh-hant/System.Reflection.TypeExtensions.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/System.Reflection.TypeExtensions.dll", - "system.reflection.typeextensions.4.3.0.nupkg.sha512", - "system.reflection.typeextensions.nuspec" - ] - }, - "System.Resources.ResourceManager/4.3.0": { - "sha512": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", - "type": "package", - "path": "system.resources.resourcemanager/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Resources.ResourceManager.dll", - "ref/netcore50/System.Resources.ResourceManager.xml", - "ref/netcore50/de/System.Resources.ResourceManager.xml", - "ref/netcore50/es/System.Resources.ResourceManager.xml", - "ref/netcore50/fr/System.Resources.ResourceManager.xml", - "ref/netcore50/it/System.Resources.ResourceManager.xml", - "ref/netcore50/ja/System.Resources.ResourceManager.xml", - "ref/netcore50/ko/System.Resources.ResourceManager.xml", - "ref/netcore50/ru/System.Resources.ResourceManager.xml", - "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml", - "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/System.Resources.ResourceManager.dll", - "ref/netstandard1.0/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/de/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/es/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/it/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml", - "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.resources.resourcemanager.4.3.0.nupkg.sha512", - "system.resources.resourcemanager.nuspec" - ] - }, - "System.Runtime/4.3.0": { - "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", - "type": "package", - "path": "system.runtime/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net462/System.Runtime.dll", - "lib/portable-net45+win8+wp80+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net462/System.Runtime.dll", - "ref/netcore50/System.Runtime.dll", - "ref/netcore50/System.Runtime.xml", - "ref/netcore50/de/System.Runtime.xml", - "ref/netcore50/es/System.Runtime.xml", - "ref/netcore50/fr/System.Runtime.xml", - "ref/netcore50/it/System.Runtime.xml", - "ref/netcore50/ja/System.Runtime.xml", - "ref/netcore50/ko/System.Runtime.xml", - "ref/netcore50/ru/System.Runtime.xml", - "ref/netcore50/zh-hans/System.Runtime.xml", - "ref/netcore50/zh-hant/System.Runtime.xml", - "ref/netstandard1.0/System.Runtime.dll", - "ref/netstandard1.0/System.Runtime.xml", - "ref/netstandard1.0/de/System.Runtime.xml", - "ref/netstandard1.0/es/System.Runtime.xml", - "ref/netstandard1.0/fr/System.Runtime.xml", - "ref/netstandard1.0/it/System.Runtime.xml", - "ref/netstandard1.0/ja/System.Runtime.xml", - "ref/netstandard1.0/ko/System.Runtime.xml", - "ref/netstandard1.0/ru/System.Runtime.xml", - "ref/netstandard1.0/zh-hans/System.Runtime.xml", - "ref/netstandard1.0/zh-hant/System.Runtime.xml", - "ref/netstandard1.2/System.Runtime.dll", - "ref/netstandard1.2/System.Runtime.xml", - "ref/netstandard1.2/de/System.Runtime.xml", - "ref/netstandard1.2/es/System.Runtime.xml", - "ref/netstandard1.2/fr/System.Runtime.xml", - "ref/netstandard1.2/it/System.Runtime.xml", - "ref/netstandard1.2/ja/System.Runtime.xml", - "ref/netstandard1.2/ko/System.Runtime.xml", - "ref/netstandard1.2/ru/System.Runtime.xml", - "ref/netstandard1.2/zh-hans/System.Runtime.xml", - "ref/netstandard1.2/zh-hant/System.Runtime.xml", - "ref/netstandard1.3/System.Runtime.dll", - "ref/netstandard1.3/System.Runtime.xml", - "ref/netstandard1.3/de/System.Runtime.xml", - "ref/netstandard1.3/es/System.Runtime.xml", - "ref/netstandard1.3/fr/System.Runtime.xml", - "ref/netstandard1.3/it/System.Runtime.xml", - "ref/netstandard1.3/ja/System.Runtime.xml", - "ref/netstandard1.3/ko/System.Runtime.xml", - "ref/netstandard1.3/ru/System.Runtime.xml", - "ref/netstandard1.3/zh-hans/System.Runtime.xml", - "ref/netstandard1.3/zh-hant/System.Runtime.xml", - "ref/netstandard1.5/System.Runtime.dll", - "ref/netstandard1.5/System.Runtime.xml", - "ref/netstandard1.5/de/System.Runtime.xml", - "ref/netstandard1.5/es/System.Runtime.xml", - "ref/netstandard1.5/fr/System.Runtime.xml", - "ref/netstandard1.5/it/System.Runtime.xml", - "ref/netstandard1.5/ja/System.Runtime.xml", - "ref/netstandard1.5/ko/System.Runtime.xml", - "ref/netstandard1.5/ru/System.Runtime.xml", - "ref/netstandard1.5/zh-hans/System.Runtime.xml", - "ref/netstandard1.5/zh-hant/System.Runtime.xml", - "ref/portable-net45+win8+wp80+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.runtime.4.3.0.nupkg.sha512", - "system.runtime.nuspec" - ] - }, - "System.Runtime.Extensions/4.3.0": { - "sha512": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", - "type": "package", - "path": "system.runtime.extensions/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net462/System.Runtime.Extensions.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net462/System.Runtime.Extensions.dll", - "ref/netcore50/System.Runtime.Extensions.dll", - "ref/netcore50/System.Runtime.Extensions.xml", - "ref/netcore50/de/System.Runtime.Extensions.xml", - "ref/netcore50/es/System.Runtime.Extensions.xml", - "ref/netcore50/fr/System.Runtime.Extensions.xml", - "ref/netcore50/it/System.Runtime.Extensions.xml", - "ref/netcore50/ja/System.Runtime.Extensions.xml", - "ref/netcore50/ko/System.Runtime.Extensions.xml", - "ref/netcore50/ru/System.Runtime.Extensions.xml", - "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", - "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", - "ref/netstandard1.0/System.Runtime.Extensions.dll", - "ref/netstandard1.0/System.Runtime.Extensions.xml", - "ref/netstandard1.0/de/System.Runtime.Extensions.xml", - "ref/netstandard1.0/es/System.Runtime.Extensions.xml", - "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", - "ref/netstandard1.0/it/System.Runtime.Extensions.xml", - "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", - "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", - "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", - "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", - "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", - "ref/netstandard1.3/System.Runtime.Extensions.dll", - "ref/netstandard1.3/System.Runtime.Extensions.xml", - "ref/netstandard1.3/de/System.Runtime.Extensions.xml", - "ref/netstandard1.3/es/System.Runtime.Extensions.xml", - "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", - "ref/netstandard1.3/it/System.Runtime.Extensions.xml", - "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", - "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", - "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", - "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", - "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", - "ref/netstandard1.5/System.Runtime.Extensions.dll", - "ref/netstandard1.5/System.Runtime.Extensions.xml", - "ref/netstandard1.5/de/System.Runtime.Extensions.xml", - "ref/netstandard1.5/es/System.Runtime.Extensions.xml", - "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", - "ref/netstandard1.5/it/System.Runtime.Extensions.xml", - "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", - "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", - "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", - "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", - "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.runtime.extensions.4.3.0.nupkg.sha512", - "system.runtime.extensions.nuspec" - ] - }, - "System.Runtime.Handles/4.3.0": { - "sha512": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", - "type": "package", - "path": "system.runtime.handles/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/_._", - "ref/netstandard1.3/System.Runtime.Handles.dll", - "ref/netstandard1.3/System.Runtime.Handles.xml", - "ref/netstandard1.3/de/System.Runtime.Handles.xml", - "ref/netstandard1.3/es/System.Runtime.Handles.xml", - "ref/netstandard1.3/fr/System.Runtime.Handles.xml", - "ref/netstandard1.3/it/System.Runtime.Handles.xml", - "ref/netstandard1.3/ja/System.Runtime.Handles.xml", - "ref/netstandard1.3/ko/System.Runtime.Handles.xml", - "ref/netstandard1.3/ru/System.Runtime.Handles.xml", - "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml", - "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.runtime.handles.4.3.0.nupkg.sha512", - "system.runtime.handles.nuspec" - ] - }, - "System.Runtime.InteropServices/4.3.0": { - "sha512": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", - "type": "package", - "path": "system.runtime.interopservices/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net462/System.Runtime.InteropServices.dll", - "lib/net463/System.Runtime.InteropServices.dll", - "lib/portable-net45+win8+wpa81/_._", - "lib/win8/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net462/System.Runtime.InteropServices.dll", - "ref/net463/System.Runtime.InteropServices.dll", - "ref/netcore50/System.Runtime.InteropServices.dll", - "ref/netcore50/System.Runtime.InteropServices.xml", - "ref/netcore50/de/System.Runtime.InteropServices.xml", - "ref/netcore50/es/System.Runtime.InteropServices.xml", - "ref/netcore50/fr/System.Runtime.InteropServices.xml", - "ref/netcore50/it/System.Runtime.InteropServices.xml", - "ref/netcore50/ja/System.Runtime.InteropServices.xml", - "ref/netcore50/ko/System.Runtime.InteropServices.xml", - "ref/netcore50/ru/System.Runtime.InteropServices.xml", - "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml", - "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml", - "ref/netcoreapp1.1/System.Runtime.InteropServices.dll", - "ref/netstandard1.1/System.Runtime.InteropServices.dll", - "ref/netstandard1.1/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/de/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/es/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/it/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml", - "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/System.Runtime.InteropServices.dll", - "ref/netstandard1.2/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/de/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/es/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/it/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml", - "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/System.Runtime.InteropServices.dll", - "ref/netstandard1.3/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/de/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/es/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/it/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml", - "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/System.Runtime.InteropServices.dll", - "ref/netstandard1.5/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/de/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/es/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/it/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml", - "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml", - "ref/portable-net45+win8+wpa81/_._", - "ref/win8/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.runtime.interopservices.4.3.0.nupkg.sha512", - "system.runtime.interopservices.nuspec" - ] - }, - "System.Runtime.InteropServices.RuntimeInformation/4.3.0": { - "sha512": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", - "type": "package", - "path": "system.runtime.interopservices.runtimeinformation/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll", - "lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", - "lib/win8/System.Runtime.InteropServices.RuntimeInformation.dll", - "lib/wpa81/System.Runtime.InteropServices.RuntimeInformation.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll", - "runtimes/unix/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", - "runtimes/win/lib/net45/System.Runtime.InteropServices.RuntimeInformation.dll", - "runtimes/win/lib/netcore50/System.Runtime.InteropServices.RuntimeInformation.dll", - "runtimes/win/lib/netstandard1.1/System.Runtime.InteropServices.RuntimeInformation.dll", - "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512", - "system.runtime.interopservices.runtimeinformation.nuspec" - ] - }, - "System.Runtime.Numerics/4.3.0": { - "sha512": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", - "type": "package", - "path": "system.runtime.numerics/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Runtime.Numerics.dll", - "lib/netstandard1.3/System.Runtime.Numerics.dll", - "lib/portable-net45+win8+wpa81/_._", - "lib/win8/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Runtime.Numerics.dll", - "ref/netcore50/System.Runtime.Numerics.xml", - "ref/netcore50/de/System.Runtime.Numerics.xml", - "ref/netcore50/es/System.Runtime.Numerics.xml", - "ref/netcore50/fr/System.Runtime.Numerics.xml", - "ref/netcore50/it/System.Runtime.Numerics.xml", - "ref/netcore50/ja/System.Runtime.Numerics.xml", - "ref/netcore50/ko/System.Runtime.Numerics.xml", - "ref/netcore50/ru/System.Runtime.Numerics.xml", - "ref/netcore50/zh-hans/System.Runtime.Numerics.xml", - "ref/netcore50/zh-hant/System.Runtime.Numerics.xml", - "ref/netstandard1.1/System.Runtime.Numerics.dll", - "ref/netstandard1.1/System.Runtime.Numerics.xml", - "ref/netstandard1.1/de/System.Runtime.Numerics.xml", - "ref/netstandard1.1/es/System.Runtime.Numerics.xml", - "ref/netstandard1.1/fr/System.Runtime.Numerics.xml", - "ref/netstandard1.1/it/System.Runtime.Numerics.xml", - "ref/netstandard1.1/ja/System.Runtime.Numerics.xml", - "ref/netstandard1.1/ko/System.Runtime.Numerics.xml", - "ref/netstandard1.1/ru/System.Runtime.Numerics.xml", - "ref/netstandard1.1/zh-hans/System.Runtime.Numerics.xml", - "ref/netstandard1.1/zh-hant/System.Runtime.Numerics.xml", - "ref/portable-net45+win8+wpa81/_._", - "ref/win8/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.runtime.numerics.4.3.0.nupkg.sha512", - "system.runtime.numerics.nuspec" - ] - }, - "System.Runtime.Serialization.Primitives/4.1.1": { - "sha512": "HZ6Du5QrTG8MNJbf4e4qMO3JRAkIboGT5Fk804uZtg3Gq516S7hAqTm2UZKUHa7/6HUGdVy3AqMQKbns06G/cg==", - "type": "package", - "path": "system.runtime.serialization.primitives/4.1.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net46/System.Runtime.Serialization.Primitives.dll", - "lib/netcore50/System.Runtime.Serialization.Primitives.dll", - "lib/netstandard1.3/System.Runtime.Serialization.Primitives.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net46/System.Runtime.Serialization.Primitives.dll", - "ref/netcore50/System.Runtime.Serialization.Primitives.dll", - "ref/netcore50/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/de/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/es/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/fr/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/it/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/ja/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/ko/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/ru/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/zh-hans/System.Runtime.Serialization.Primitives.xml", - "ref/netcore50/zh-hant/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/System.Runtime.Serialization.Primitives.dll", - "ref/netstandard1.0/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/de/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/es/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/fr/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/it/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/ja/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/ko/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/ru/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/zh-hans/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.0/zh-hant/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/System.Runtime.Serialization.Primitives.dll", - "ref/netstandard1.3/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/de/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/es/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/fr/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/it/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/ja/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/ko/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/ru/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/zh-hans/System.Runtime.Serialization.Primitives.xml", - "ref/netstandard1.3/zh-hant/System.Runtime.Serialization.Primitives.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/System.Runtime.Serialization.Primitives.dll", - "system.runtime.serialization.primitives.4.1.1.nupkg.sha512", - "system.runtime.serialization.primitives.nuspec" - ] - }, - "System.Security.Cryptography.Algorithms/4.3.0": { - "sha512": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", - "type": "package", - "path": "system.security.cryptography.algorithms/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Security.Cryptography.Algorithms.dll", - "lib/net461/System.Security.Cryptography.Algorithms.dll", - "lib/net463/System.Security.Cryptography.Algorithms.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Security.Cryptography.Algorithms.dll", - "ref/net461/System.Security.Cryptography.Algorithms.dll", - "ref/net463/System.Security.Cryptography.Algorithms.dll", - "ref/netstandard1.3/System.Security.Cryptography.Algorithms.dll", - "ref/netstandard1.4/System.Security.Cryptography.Algorithms.dll", - "ref/netstandard1.6/System.Security.Cryptography.Algorithms.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/osx/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", - "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", - "runtimes/win/lib/net46/System.Security.Cryptography.Algorithms.dll", - "runtimes/win/lib/net461/System.Security.Cryptography.Algorithms.dll", - "runtimes/win/lib/net463/System.Security.Cryptography.Algorithms.dll", - "runtimes/win/lib/netcore50/System.Security.Cryptography.Algorithms.dll", - "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Algorithms.dll", - "system.security.cryptography.algorithms.4.3.0.nupkg.sha512", - "system.security.cryptography.algorithms.nuspec" - ] - }, - "System.Security.Cryptography.Cng/4.3.0": { - "sha512": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==", - "type": "package", - "path": "system.security.cryptography.cng/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/net46/System.Security.Cryptography.Cng.dll", - "lib/net461/System.Security.Cryptography.Cng.dll", - "lib/net463/System.Security.Cryptography.Cng.dll", - "ref/net46/System.Security.Cryptography.Cng.dll", - "ref/net461/System.Security.Cryptography.Cng.dll", - "ref/net463/System.Security.Cryptography.Cng.dll", - "ref/netstandard1.3/System.Security.Cryptography.Cng.dll", - "ref/netstandard1.4/System.Security.Cryptography.Cng.dll", - "ref/netstandard1.6/System.Security.Cryptography.Cng.dll", - "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.Cng.dll", - "runtimes/win/lib/net46/System.Security.Cryptography.Cng.dll", - "runtimes/win/lib/net461/System.Security.Cryptography.Cng.dll", - "runtimes/win/lib/net463/System.Security.Cryptography.Cng.dll", - "runtimes/win/lib/netstandard1.4/System.Security.Cryptography.Cng.dll", - "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.Cng.dll", - "system.security.cryptography.cng.4.3.0.nupkg.sha512", - "system.security.cryptography.cng.nuspec" - ] - }, - "System.Security.Cryptography.Csp/4.3.0": { - "sha512": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", - "type": "package", - "path": "system.security.cryptography.csp/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Security.Cryptography.Csp.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Security.Cryptography.Csp.dll", - "ref/netstandard1.3/System.Security.Cryptography.Csp.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Csp.dll", - "runtimes/win/lib/net46/System.Security.Cryptography.Csp.dll", - "runtimes/win/lib/netcore50/_._", - "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Csp.dll", - "system.security.cryptography.csp.4.3.0.nupkg.sha512", - "system.security.cryptography.csp.nuspec" - ] - }, - "System.Security.Cryptography.Encoding/4.3.0": { - "sha512": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", - "type": "package", - "path": "system.security.cryptography.encoding/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Security.Cryptography.Encoding.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Security.Cryptography.Encoding.dll", - "ref/netstandard1.3/System.Security.Cryptography.Encoding.dll", - "ref/netstandard1.3/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/de/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/es/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/fr/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/it/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/ja/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/ko/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/ru/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/zh-hans/System.Security.Cryptography.Encoding.xml", - "ref/netstandard1.3/zh-hant/System.Security.Cryptography.Encoding.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/unix/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll", - "runtimes/win/lib/net46/System.Security.Cryptography.Encoding.dll", - "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.Encoding.dll", - "system.security.cryptography.encoding.4.3.0.nupkg.sha512", - "system.security.cryptography.encoding.nuspec" - ] - }, - "System.Security.Cryptography.OpenSsl/4.3.0": { - "sha512": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", - "type": "package", - "path": "system.security.cryptography.openssl/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", - "ref/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", - "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.OpenSsl.dll", - "system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "system.security.cryptography.openssl.nuspec" - ] - }, - "System.Security.Cryptography.Primitives/4.3.0": { - "sha512": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", - "type": "package", - "path": "system.security.cryptography.primitives/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Security.Cryptography.Primitives.dll", - "lib/netstandard1.3/System.Security.Cryptography.Primitives.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Security.Cryptography.Primitives.dll", - "ref/netstandard1.3/System.Security.Cryptography.Primitives.dll", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.security.cryptography.primitives.4.3.0.nupkg.sha512", - "system.security.cryptography.primitives.nuspec" - ] - }, - "System.Security.Cryptography.ProtectedData/4.4.0": { - "sha512": "cJV7ScGW7EhatRsjehfvvYVBvtiSMKgN8bOVI0bQhnF5bU7vnHVIsH49Kva7i7GWaWYvmEzkYVk1TC+gZYBEog==", - "type": "package", - "path": "system.security.cryptography.protecteddata/4.4.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Security.Cryptography.ProtectedData.dll", - "lib/net461/System.Security.Cryptography.ProtectedData.dll", - "lib/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", - "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Security.Cryptography.ProtectedData.dll", - "ref/net461/System.Security.Cryptography.ProtectedData.dll", - "ref/net461/System.Security.Cryptography.ProtectedData.xml", - "ref/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", - "ref/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", - "ref/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/win/lib/net46/System.Security.Cryptography.ProtectedData.dll", - "runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.dll", - "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", - "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", - "system.security.cryptography.protecteddata.4.4.0.nupkg.sha512", - "system.security.cryptography.protecteddata.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "System.Security.Cryptography.X509Certificates/4.3.0": { - "sha512": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", - "type": "package", - "path": "system.security.cryptography.x509certificates/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Security.Cryptography.X509Certificates.dll", - "lib/net461/System.Security.Cryptography.X509Certificates.dll", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Security.Cryptography.X509Certificates.dll", - "ref/net461/System.Security.Cryptography.X509Certificates.dll", - "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.dll", - "ref/netstandard1.3/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/de/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/es/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/fr/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/it/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/ja/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/ko/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/ru/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/zh-hans/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.3/zh-hant/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.dll", - "ref/netstandard1.4/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/de/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/es/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/fr/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/it/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/ja/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/ko/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/ru/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/zh-hans/System.Security.Cryptography.X509Certificates.xml", - "ref/netstandard1.4/zh-hant/System.Security.Cryptography.X509Certificates.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/unix/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll", - "runtimes/win/lib/net46/System.Security.Cryptography.X509Certificates.dll", - "runtimes/win/lib/net461/System.Security.Cryptography.X509Certificates.dll", - "runtimes/win/lib/netcore50/System.Security.Cryptography.X509Certificates.dll", - "runtimes/win/lib/netstandard1.6/System.Security.Cryptography.X509Certificates.dll", - "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512", - "system.security.cryptography.x509certificates.nuspec" - ] - }, - "System.Text.Encoding/4.3.0": { - "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", - "type": "package", - "path": "system.text.encoding/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Text.Encoding.dll", - "ref/netcore50/System.Text.Encoding.xml", - "ref/netcore50/de/System.Text.Encoding.xml", - "ref/netcore50/es/System.Text.Encoding.xml", - "ref/netcore50/fr/System.Text.Encoding.xml", - "ref/netcore50/it/System.Text.Encoding.xml", - "ref/netcore50/ja/System.Text.Encoding.xml", - "ref/netcore50/ko/System.Text.Encoding.xml", - "ref/netcore50/ru/System.Text.Encoding.xml", - "ref/netcore50/zh-hans/System.Text.Encoding.xml", - "ref/netcore50/zh-hant/System.Text.Encoding.xml", - "ref/netstandard1.0/System.Text.Encoding.dll", - "ref/netstandard1.0/System.Text.Encoding.xml", - "ref/netstandard1.0/de/System.Text.Encoding.xml", - "ref/netstandard1.0/es/System.Text.Encoding.xml", - "ref/netstandard1.0/fr/System.Text.Encoding.xml", - "ref/netstandard1.0/it/System.Text.Encoding.xml", - "ref/netstandard1.0/ja/System.Text.Encoding.xml", - "ref/netstandard1.0/ko/System.Text.Encoding.xml", - "ref/netstandard1.0/ru/System.Text.Encoding.xml", - "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", - "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", - "ref/netstandard1.3/System.Text.Encoding.dll", - "ref/netstandard1.3/System.Text.Encoding.xml", - "ref/netstandard1.3/de/System.Text.Encoding.xml", - "ref/netstandard1.3/es/System.Text.Encoding.xml", - "ref/netstandard1.3/fr/System.Text.Encoding.xml", - "ref/netstandard1.3/it/System.Text.Encoding.xml", - "ref/netstandard1.3/ja/System.Text.Encoding.xml", - "ref/netstandard1.3/ko/System.Text.Encoding.xml", - "ref/netstandard1.3/ru/System.Text.Encoding.xml", - "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", - "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.text.encoding.4.3.0.nupkg.sha512", - "system.text.encoding.nuspec" - ] - }, - "System.Text.Encoding.Extensions/4.3.0": { - "sha512": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", - "type": "package", - "path": "system.text.encoding.extensions/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Text.Encoding.Extensions.dll", - "ref/netcore50/System.Text.Encoding.Extensions.xml", - "ref/netcore50/de/System.Text.Encoding.Extensions.xml", - "ref/netcore50/es/System.Text.Encoding.Extensions.xml", - "ref/netcore50/fr/System.Text.Encoding.Extensions.xml", - "ref/netcore50/it/System.Text.Encoding.Extensions.xml", - "ref/netcore50/ja/System.Text.Encoding.Extensions.xml", - "ref/netcore50/ko/System.Text.Encoding.Extensions.xml", - "ref/netcore50/ru/System.Text.Encoding.Extensions.xml", - "ref/netcore50/zh-hans/System.Text.Encoding.Extensions.xml", - "ref/netcore50/zh-hant/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/System.Text.Encoding.Extensions.dll", - "ref/netstandard1.0/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/de/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/es/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/fr/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/it/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/ja/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/ko/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/ru/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/zh-hans/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.0/zh-hant/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/System.Text.Encoding.Extensions.dll", - "ref/netstandard1.3/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/de/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/es/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/fr/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/it/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/ja/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/ko/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/ru/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/zh-hans/System.Text.Encoding.Extensions.xml", - "ref/netstandard1.3/zh-hant/System.Text.Encoding.Extensions.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.text.encoding.extensions.4.3.0.nupkg.sha512", - "system.text.encoding.extensions.nuspec" - ] - }, - "System.Text.Encodings.Web/7.0.0": { - "sha512": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==", - "type": "package", - "path": "system.text.encodings.web/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "buildTransitive/net461/System.Text.Encodings.Web.targets", - "buildTransitive/net462/_._", - "buildTransitive/net6.0/_._", - "buildTransitive/netcoreapp2.0/System.Text.Encodings.Web.targets", - "lib/net462/System.Text.Encodings.Web.dll", - "lib/net462/System.Text.Encodings.Web.xml", - "lib/net6.0/System.Text.Encodings.Web.dll", - "lib/net6.0/System.Text.Encodings.Web.xml", - "lib/net7.0/System.Text.Encodings.Web.dll", - "lib/net7.0/System.Text.Encodings.Web.xml", - "lib/netstandard2.0/System.Text.Encodings.Web.dll", - "lib/netstandard2.0/System.Text.Encodings.Web.xml", - "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll", - "runtimes/browser/lib/net6.0/System.Text.Encodings.Web.xml", - "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.dll", - "runtimes/browser/lib/net7.0/System.Text.Encodings.Web.xml", - "system.text.encodings.web.7.0.0.nupkg.sha512", - "system.text.encodings.web.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "System.Text.Json/7.0.0": { - "sha512": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==", - "type": "package", - "path": "system.text.json/7.0.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "LICENSE.TXT", - "README.md", - "THIRD-PARTY-NOTICES.TXT", - "analyzers/dotnet/roslyn3.11/cs/System.Text.Json.SourceGeneration.dll", - "analyzers/dotnet/roslyn3.11/cs/cs/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/de/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/es/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/fr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/it/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ja/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ko/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/pl/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/ru/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/tr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn3.11/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/System.Text.Json.SourceGeneration.dll", - "analyzers/dotnet/roslyn4.0/cs/cs/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/de/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/es/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/fr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/it/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ja/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ko/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/pl/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/ru/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/tr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.0/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/System.Text.Json.SourceGeneration.dll", - "analyzers/dotnet/roslyn4.4/cs/cs/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/de/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/es/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/fr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/it/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ja/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ko/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/pl/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/pt-BR/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/ru/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/tr/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/zh-Hans/System.Text.Json.SourceGeneration.resources.dll", - "analyzers/dotnet/roslyn4.4/cs/zh-Hant/System.Text.Json.SourceGeneration.resources.dll", - "buildTransitive/net461/System.Text.Json.targets", - "buildTransitive/net462/System.Text.Json.targets", - "buildTransitive/net6.0/System.Text.Json.targets", - "buildTransitive/netcoreapp2.0/System.Text.Json.targets", - "buildTransitive/netstandard2.0/System.Text.Json.targets", - "lib/net462/System.Text.Json.dll", - "lib/net462/System.Text.Json.xml", - "lib/net6.0/System.Text.Json.dll", - "lib/net6.0/System.Text.Json.xml", - "lib/net7.0/System.Text.Json.dll", - "lib/net7.0/System.Text.Json.xml", - "lib/netstandard2.0/System.Text.Json.dll", - "lib/netstandard2.0/System.Text.Json.xml", - "system.text.json.7.0.0.nupkg.sha512", - "system.text.json.nuspec", - "useSharedDesignerContext.txt" - ] - }, - "System.Text.RegularExpressions/4.3.0": { - "sha512": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", - "type": "package", - "path": "system.text.regularexpressions/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net463/System.Text.RegularExpressions.dll", - "lib/netcore50/System.Text.RegularExpressions.dll", - "lib/netstandard1.6/System.Text.RegularExpressions.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net463/System.Text.RegularExpressions.dll", - "ref/netcore50/System.Text.RegularExpressions.dll", - "ref/netcore50/System.Text.RegularExpressions.xml", - "ref/netcore50/de/System.Text.RegularExpressions.xml", - "ref/netcore50/es/System.Text.RegularExpressions.xml", - "ref/netcore50/fr/System.Text.RegularExpressions.xml", - "ref/netcore50/it/System.Text.RegularExpressions.xml", - "ref/netcore50/ja/System.Text.RegularExpressions.xml", - "ref/netcore50/ko/System.Text.RegularExpressions.xml", - "ref/netcore50/ru/System.Text.RegularExpressions.xml", - "ref/netcore50/zh-hans/System.Text.RegularExpressions.xml", - "ref/netcore50/zh-hant/System.Text.RegularExpressions.xml", - "ref/netcoreapp1.1/System.Text.RegularExpressions.dll", - "ref/netstandard1.0/System.Text.RegularExpressions.dll", - "ref/netstandard1.0/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/de/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/es/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/fr/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/it/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/ja/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/ko/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/ru/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/zh-hans/System.Text.RegularExpressions.xml", - "ref/netstandard1.0/zh-hant/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/System.Text.RegularExpressions.dll", - "ref/netstandard1.3/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/de/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/es/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/fr/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/it/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/ja/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/ko/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/ru/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/zh-hans/System.Text.RegularExpressions.xml", - "ref/netstandard1.3/zh-hant/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/System.Text.RegularExpressions.dll", - "ref/netstandard1.6/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/de/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/es/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/fr/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/it/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/ja/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/ko/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/ru/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/zh-hans/System.Text.RegularExpressions.xml", - "ref/netstandard1.6/zh-hant/System.Text.RegularExpressions.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.text.regularexpressions.4.3.0.nupkg.sha512", - "system.text.regularexpressions.nuspec" - ] - }, - "System.Threading/4.3.0": { - "sha512": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", - "type": "package", - "path": "system.threading/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Threading.dll", - "lib/netstandard1.3/System.Threading.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Threading.dll", - "ref/netcore50/System.Threading.xml", - "ref/netcore50/de/System.Threading.xml", - "ref/netcore50/es/System.Threading.xml", - "ref/netcore50/fr/System.Threading.xml", - "ref/netcore50/it/System.Threading.xml", - "ref/netcore50/ja/System.Threading.xml", - "ref/netcore50/ko/System.Threading.xml", - "ref/netcore50/ru/System.Threading.xml", - "ref/netcore50/zh-hans/System.Threading.xml", - "ref/netcore50/zh-hant/System.Threading.xml", - "ref/netstandard1.0/System.Threading.dll", - "ref/netstandard1.0/System.Threading.xml", - "ref/netstandard1.0/de/System.Threading.xml", - "ref/netstandard1.0/es/System.Threading.xml", - "ref/netstandard1.0/fr/System.Threading.xml", - "ref/netstandard1.0/it/System.Threading.xml", - "ref/netstandard1.0/ja/System.Threading.xml", - "ref/netstandard1.0/ko/System.Threading.xml", - "ref/netstandard1.0/ru/System.Threading.xml", - "ref/netstandard1.0/zh-hans/System.Threading.xml", - "ref/netstandard1.0/zh-hant/System.Threading.xml", - "ref/netstandard1.3/System.Threading.dll", - "ref/netstandard1.3/System.Threading.xml", - "ref/netstandard1.3/de/System.Threading.xml", - "ref/netstandard1.3/es/System.Threading.xml", - "ref/netstandard1.3/fr/System.Threading.xml", - "ref/netstandard1.3/it/System.Threading.xml", - "ref/netstandard1.3/ja/System.Threading.xml", - "ref/netstandard1.3/ko/System.Threading.xml", - "ref/netstandard1.3/ru/System.Threading.xml", - "ref/netstandard1.3/zh-hans/System.Threading.xml", - "ref/netstandard1.3/zh-hant/System.Threading.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "runtimes/aot/lib/netcore50/System.Threading.dll", - "system.threading.4.3.0.nupkg.sha512", - "system.threading.nuspec" - ] - }, - "System.Threading.Tasks/4.3.0": { - "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", - "type": "package", - "path": "system.threading.tasks/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Threading.Tasks.dll", - "ref/netcore50/System.Threading.Tasks.xml", - "ref/netcore50/de/System.Threading.Tasks.xml", - "ref/netcore50/es/System.Threading.Tasks.xml", - "ref/netcore50/fr/System.Threading.Tasks.xml", - "ref/netcore50/it/System.Threading.Tasks.xml", - "ref/netcore50/ja/System.Threading.Tasks.xml", - "ref/netcore50/ko/System.Threading.Tasks.xml", - "ref/netcore50/ru/System.Threading.Tasks.xml", - "ref/netcore50/zh-hans/System.Threading.Tasks.xml", - "ref/netcore50/zh-hant/System.Threading.Tasks.xml", - "ref/netstandard1.0/System.Threading.Tasks.dll", - "ref/netstandard1.0/System.Threading.Tasks.xml", - "ref/netstandard1.0/de/System.Threading.Tasks.xml", - "ref/netstandard1.0/es/System.Threading.Tasks.xml", - "ref/netstandard1.0/fr/System.Threading.Tasks.xml", - "ref/netstandard1.0/it/System.Threading.Tasks.xml", - "ref/netstandard1.0/ja/System.Threading.Tasks.xml", - "ref/netstandard1.0/ko/System.Threading.Tasks.xml", - "ref/netstandard1.0/ru/System.Threading.Tasks.xml", - "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", - "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", - "ref/netstandard1.3/System.Threading.Tasks.dll", - "ref/netstandard1.3/System.Threading.Tasks.xml", - "ref/netstandard1.3/de/System.Threading.Tasks.xml", - "ref/netstandard1.3/es/System.Threading.Tasks.xml", - "ref/netstandard1.3/fr/System.Threading.Tasks.xml", - "ref/netstandard1.3/it/System.Threading.Tasks.xml", - "ref/netstandard1.3/ja/System.Threading.Tasks.xml", - "ref/netstandard1.3/ko/System.Threading.Tasks.xml", - "ref/netstandard1.3/ru/System.Threading.Tasks.xml", - "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", - "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.threading.tasks.4.3.0.nupkg.sha512", - "system.threading.tasks.nuspec" - ] - }, - "System.Threading.Tasks.Extensions/4.3.0": { - "sha512": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==", - "type": "package", - "path": "system.threading.tasks.extensions/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/netstandard1.0/System.Threading.Tasks.Extensions.dll", - "lib/netstandard1.0/System.Threading.Tasks.Extensions.xml", - "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.dll", - "lib/portable-net45+win8+wp8+wpa81/System.Threading.Tasks.Extensions.xml", - "system.threading.tasks.extensions.4.3.0.nupkg.sha512", - "system.threading.tasks.extensions.nuspec" - ] - }, - "System.Threading.Timer/4.3.0": { - "sha512": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", - "type": "package", - "path": "system.threading.timer/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net451/_._", - "lib/portable-net451+win81+wpa81/_._", - "lib/win81/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net451/_._", - "ref/netcore50/System.Threading.Timer.dll", - "ref/netcore50/System.Threading.Timer.xml", - "ref/netcore50/de/System.Threading.Timer.xml", - "ref/netcore50/es/System.Threading.Timer.xml", - "ref/netcore50/fr/System.Threading.Timer.xml", - "ref/netcore50/it/System.Threading.Timer.xml", - "ref/netcore50/ja/System.Threading.Timer.xml", - "ref/netcore50/ko/System.Threading.Timer.xml", - "ref/netcore50/ru/System.Threading.Timer.xml", - "ref/netcore50/zh-hans/System.Threading.Timer.xml", - "ref/netcore50/zh-hant/System.Threading.Timer.xml", - "ref/netstandard1.2/System.Threading.Timer.dll", - "ref/netstandard1.2/System.Threading.Timer.xml", - "ref/netstandard1.2/de/System.Threading.Timer.xml", - "ref/netstandard1.2/es/System.Threading.Timer.xml", - "ref/netstandard1.2/fr/System.Threading.Timer.xml", - "ref/netstandard1.2/it/System.Threading.Timer.xml", - "ref/netstandard1.2/ja/System.Threading.Timer.xml", - "ref/netstandard1.2/ko/System.Threading.Timer.xml", - "ref/netstandard1.2/ru/System.Threading.Timer.xml", - "ref/netstandard1.2/zh-hans/System.Threading.Timer.xml", - "ref/netstandard1.2/zh-hant/System.Threading.Timer.xml", - "ref/portable-net451+win81+wpa81/_._", - "ref/win81/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.threading.timer.4.3.0.nupkg.sha512", - "system.threading.timer.nuspec" - ] - }, - "System.Xml.ReaderWriter/4.3.0": { - "sha512": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", - "type": "package", - "path": "system.xml.readerwriter/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/net46/System.Xml.ReaderWriter.dll", - "lib/netcore50/System.Xml.ReaderWriter.dll", - "lib/netstandard1.3/System.Xml.ReaderWriter.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/net46/System.Xml.ReaderWriter.dll", - "ref/netcore50/System.Xml.ReaderWriter.dll", - "ref/netcore50/System.Xml.ReaderWriter.xml", - "ref/netcore50/de/System.Xml.ReaderWriter.xml", - "ref/netcore50/es/System.Xml.ReaderWriter.xml", - "ref/netcore50/fr/System.Xml.ReaderWriter.xml", - "ref/netcore50/it/System.Xml.ReaderWriter.xml", - "ref/netcore50/ja/System.Xml.ReaderWriter.xml", - "ref/netcore50/ko/System.Xml.ReaderWriter.xml", - "ref/netcore50/ru/System.Xml.ReaderWriter.xml", - "ref/netcore50/zh-hans/System.Xml.ReaderWriter.xml", - "ref/netcore50/zh-hant/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/System.Xml.ReaderWriter.dll", - "ref/netstandard1.0/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/de/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/es/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/fr/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/it/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/ja/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/ko/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/ru/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/zh-hans/System.Xml.ReaderWriter.xml", - "ref/netstandard1.0/zh-hant/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/System.Xml.ReaderWriter.dll", - "ref/netstandard1.3/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/de/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/es/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/fr/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/it/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/ja/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/ko/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/ru/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/zh-hans/System.Xml.ReaderWriter.xml", - "ref/netstandard1.3/zh-hant/System.Xml.ReaderWriter.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.xml.readerwriter.4.3.0.nupkg.sha512", - "system.xml.readerwriter.nuspec" - ] - }, - "System.Xml.XDocument/4.3.0": { - "sha512": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", - "type": "package", - "path": "system.xml.xdocument/4.3.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "ThirdPartyNotices.txt", - "dotnet_library_license.txt", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net45/_._", - "lib/netcore50/System.Xml.XDocument.dll", - "lib/netstandard1.3/System.Xml.XDocument.dll", - "lib/portable-net45+win8+wp8+wpa81/_._", - "lib/win8/_._", - "lib/wp80/_._", - "lib/wpa81/_._", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net45/_._", - "ref/netcore50/System.Xml.XDocument.dll", - "ref/netcore50/System.Xml.XDocument.xml", - "ref/netcore50/de/System.Xml.XDocument.xml", - "ref/netcore50/es/System.Xml.XDocument.xml", - "ref/netcore50/fr/System.Xml.XDocument.xml", - "ref/netcore50/it/System.Xml.XDocument.xml", - "ref/netcore50/ja/System.Xml.XDocument.xml", - "ref/netcore50/ko/System.Xml.XDocument.xml", - "ref/netcore50/ru/System.Xml.XDocument.xml", - "ref/netcore50/zh-hans/System.Xml.XDocument.xml", - "ref/netcore50/zh-hant/System.Xml.XDocument.xml", - "ref/netstandard1.0/System.Xml.XDocument.dll", - "ref/netstandard1.0/System.Xml.XDocument.xml", - "ref/netstandard1.0/de/System.Xml.XDocument.xml", - "ref/netstandard1.0/es/System.Xml.XDocument.xml", - "ref/netstandard1.0/fr/System.Xml.XDocument.xml", - "ref/netstandard1.0/it/System.Xml.XDocument.xml", - "ref/netstandard1.0/ja/System.Xml.XDocument.xml", - "ref/netstandard1.0/ko/System.Xml.XDocument.xml", - "ref/netstandard1.0/ru/System.Xml.XDocument.xml", - "ref/netstandard1.0/zh-hans/System.Xml.XDocument.xml", - "ref/netstandard1.0/zh-hant/System.Xml.XDocument.xml", - "ref/netstandard1.3/System.Xml.XDocument.dll", - "ref/netstandard1.3/System.Xml.XDocument.xml", - "ref/netstandard1.3/de/System.Xml.XDocument.xml", - "ref/netstandard1.3/es/System.Xml.XDocument.xml", - "ref/netstandard1.3/fr/System.Xml.XDocument.xml", - "ref/netstandard1.3/it/System.Xml.XDocument.xml", - "ref/netstandard1.3/ja/System.Xml.XDocument.xml", - "ref/netstandard1.3/ko/System.Xml.XDocument.xml", - "ref/netstandard1.3/ru/System.Xml.XDocument.xml", - "ref/netstandard1.3/zh-hans/System.Xml.XDocument.xml", - "ref/netstandard1.3/zh-hant/System.Xml.XDocument.xml", - "ref/portable-net45+win8+wp8+wpa81/_._", - "ref/win8/_._", - "ref/wp80/_._", - "ref/wpa81/_._", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.xml.xdocument.4.3.0.nupkg.sha512", - "system.xml.xdocument.nuspec" - ] - }, - "xunit/2.4.1": { - "sha512": "XNR3Yz9QTtec16O0aKcO6+baVNpXmOnPUxDkCY97J+8krUYxPvXT1szYYEUdKk4sB8GOI2YbAjRIOm8ZnXRfzQ==", - "type": "package", - "path": "xunit/2.4.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "xunit.2.4.1.nupkg.sha512", - "xunit.nuspec" - ] - }, - "xunit.abstractions/2.0.3": { - "sha512": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==", - "type": "package", - "path": "xunit.abstractions/2.0.3", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net35/xunit.abstractions.dll", - "lib/net35/xunit.abstractions.xml", - "lib/netstandard1.0/xunit.abstractions.dll", - "lib/netstandard1.0/xunit.abstractions.xml", - "lib/netstandard2.0/xunit.abstractions.dll", - "lib/netstandard2.0/xunit.abstractions.xml", - "xunit.abstractions.2.0.3.nupkg.sha512", - "xunit.abstractions.nuspec" - ] - }, - "xunit.analyzers/0.10.0": { - "sha512": "4/IDFCJfIeg6bix9apmUtIMwvOsiwqdEexeO/R2D4GReIGPLIRODTpId/l4LRSrAJk9lEO3Zx1H0Zx6uohJDNg==", - "type": "package", - "path": "xunit.analyzers/0.10.0", - "hasTools": true, - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "analyzers/dotnet/cs/xunit.analyzers.dll", - "tools/install.ps1", - "tools/uninstall.ps1", - "xunit.analyzers.0.10.0.nupkg.sha512", - "xunit.analyzers.nuspec" - ] - }, - "xunit.assert/2.4.1": { - "sha512": "O/Oe0BS5RmSsM+LQOb041TzuPo5MdH2Rov+qXGS37X+KFG1Hxz7kopYklM5+1Y+tRGeXrOx5+Xne1RuqLFQoyQ==", - "type": "package", - "path": "xunit.assert/2.4.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/netstandard1.1/xunit.assert.dll", - "lib/netstandard1.1/xunit.assert.xml", - "xunit.assert.2.4.1.nupkg.sha512", - "xunit.assert.nuspec" - ] - }, - "xunit.core/2.4.1": { - "sha512": "Zsj5OMU6JasNGERXZy8s72+pcheG6Q15atS5XpZXqAtULuyQiQ6XNnUsp1gyfC6WgqScqMvySiEHmHcOG6Eg0Q==", - "type": "package", - "path": "xunit.core/2.4.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "build/xunit.core.props", - "build/xunit.core.targets", - "buildMultiTargeting/xunit.core.props", - "buildMultiTargeting/xunit.core.targets", - "xunit.core.2.4.1.nupkg.sha512", - "xunit.core.nuspec" - ] - }, - "xunit.extensibility.core/2.4.1": { - "sha512": "yKZKm/8QNZnBnGZFD9SewkllHBiK0DThybQD/G4PiAmQjKtEZyHi6ET70QPU9KtSMJGRYS6Syk7EyR2EVDU4Kg==", - "type": "package", - "path": "xunit.extensibility.core/2.4.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net452/xunit.core.dll", - "lib/net452/xunit.core.dll.tdnet", - "lib/net452/xunit.core.xml", - "lib/net452/xunit.runner.tdnet.dll", - "lib/net452/xunit.runner.utility.net452.dll", - "lib/netstandard1.1/xunit.core.dll", - "lib/netstandard1.1/xunit.core.xml", - "xunit.extensibility.core.2.4.1.nupkg.sha512", - "xunit.extensibility.core.nuspec" - ] - }, - "xunit.extensibility.execution/2.4.1": { - "sha512": "7e/1jqBpcb7frLkB6XDrHCGXAbKN4Rtdb88epYxCSRQuZDRW8UtTfdTEVpdTl8s4T56e07hOBVd4G0OdCxIY2A==", - "type": "package", - "path": "xunit.extensibility.execution/2.4.1", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/net452/xunit.execution.desktop.dll", - "lib/net452/xunit.execution.desktop.xml", - "lib/netstandard1.1/xunit.execution.dotnet.dll", - "lib/netstandard1.1/xunit.execution.dotnet.xml", - "xunit.extensibility.execution.2.4.1.nupkg.sha512", - "xunit.extensibility.execution.nuspec" - ] - }, - "xunit.runner.visualstudio/2.4.3": { - "sha512": "kZZSmOmKA8OBlAJaquPXnJJLM9RwQ27H7BMVqfMLUcTi9xHinWGJiWksa3D4NEtz0wZ/nxd2mogObvBgJKCRhQ==", - "type": "package", - "path": "xunit.runner.visualstudio/2.4.3", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "License.txt", - "build/net452/xunit.abstractions.dll", - "build/net452/xunit.runner.reporters.net452.dll", - "build/net452/xunit.runner.utility.net452.dll", - "build/net452/xunit.runner.visualstudio.props", - "build/net452/xunit.runner.visualstudio.testadapter.dll", - "build/netcoreapp2.1/xunit.abstractions.dll", - "build/netcoreapp2.1/xunit.runner.reporters.netcoreapp10.dll", - "build/netcoreapp2.1/xunit.runner.utility.netcoreapp10.dll", - "build/netcoreapp2.1/xunit.runner.visualstudio.dotnetcore.testadapter.dll", - "build/netcoreapp2.1/xunit.runner.visualstudio.props", - "build/uap10.0.16299/xunit.runner.reporters.netstandard15.dll", - "build/uap10.0.16299/xunit.runner.utility.netstandard15.dll", - "build/uap10.0.16299/xunit.runner.utility.uwp10.dll", - "build/uap10.0.16299/xunit.runner.utility.uwp10.pri", - "build/uap10.0.16299/xunit.runner.visualstudio.props", - "build/uap10.0.16299/xunit.runner.visualstudio.targets", - "build/uap10.0.16299/xunit.runner.visualstudio.uwp.testadapter.dll", - "build/uap10.0.16299/xunit.runner.visualstudio.uwp.testadapter.pri", - "logo-512-transparent.png", - "xunit.runner.visualstudio.2.4.3.nupkg.sha512", - "xunit.runner.visualstudio.nuspec" - ] - } - }, - "projectFileDependencyGroups": { - "net7.0": [ - "AWSSDK.EBS >= 3.7.100.153", - "FluentAssertions >= 6.8.0", - "Microsoft.Extensions.Configuration.UserSecrets >= 7.0.0", - "Microsoft.NET.Test.Sdk >= 17.1.0", - "xunit >= 2.4.1", - "xunit.runner.visualstudio >= 2.4.3" - ] - }, - "packageFolders": { - "C:\\Users\\zacha\\.nuget\\packages\\": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", - "projectName": "ElasticBlockStore", - "projectPath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", - "packagesPath": "C:\\Users\\zacha\\.nuget\\packages\\", - "outputPath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\obj\\", - "projectStyle": "PackageReference", - "configFilePaths": [ - "C:\\Users\\zacha\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net7.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net7.0": { - "targetAlias": "net7.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - } - }, - "frameworks": { - "net7.0": { - "targetAlias": "net7.0", - "dependencies": { - "AWSSDK.EBS": { - "target": "Package", - "version": "[3.7.100.153, )" - }, - "FluentAssertions": { - "target": "Package", - "version": "[6.8.0, )" - }, - "Microsoft.Extensions.Configuration.UserSecrets": { - "target": "Package", - "version": "[7.0.0, )" - }, - "Microsoft.NET.Test.Sdk": { - "target": "Package", - "version": "[17.1.0, )" - }, - "xunit": { - "target": "Package", - "version": "[2.4.1, )" - }, - "xunit.runner.visualstudio": { - "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", - "suppressParent": "All", - "target": "Package", - "version": "[2.4.3, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\7.0.400-preview.23225.8\\RuntimeIdentifierGraph.json" - } - } - } -} \ No newline at end of file diff --git a/other_langs/tests_dotnet/ebs/obj/project.nuget.cache b/other_langs/tests_dotnet/ebs/obj/project.nuget.cache deleted file mode 100644 index 30c667e8e0ba..000000000000 --- a/other_langs/tests_dotnet/ebs/obj/project.nuget.cache +++ /dev/null @@ -1,116 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "4iijFP6fXJJSu2ul6qTa0jh8jdnsdKCBDTE25L+r57SLAKlnTJhuIMOvW/tri7OzBPB1sEyBCWMVVCQ+I58Ovg==", - "success": true, - "projectFilePath": "c:\\Coding\\moto\\other_langs\\tests_dotnet\\ebs\\ElasticBlockStore.csproj", - "expectedPackageFiles": [ - "C:\\Users\\zacha\\.nuget\\packages\\awssdk.core\\3.7.108.2\\awssdk.core.3.7.108.2.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\awssdk.ebs\\3.7.100.153\\awssdk.ebs.3.7.100.153.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\fluentassertions\\6.8.0\\fluentassertions.6.8.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.codecoverage\\17.1.0\\microsoft.codecoverage.17.1.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.csharp\\4.0.1\\microsoft.csharp.4.0.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration\\7.0.0\\microsoft.extensions.configuration.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\7.0.0\\microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\7.0.0\\microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration.json\\7.0.0\\microsoft.extensions.configuration.json.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.configuration.usersecrets\\7.0.0\\microsoft.extensions.configuration.usersecrets.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\7.0.0\\microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\7.0.0\\microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\7.0.0\\microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.extensions.primitives\\7.0.0\\microsoft.extensions.primitives.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.net.test.sdk\\17.1.0\\microsoft.net.test.sdk.17.1.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.testplatform.objectmodel\\17.1.0\\microsoft.testplatform.objectmodel.17.1.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.testplatform.testhost\\17.1.0\\microsoft.testplatform.testhost.17.1.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\microsoft.win32.primitives\\4.3.0\\microsoft.win32.primitives.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\netstandard.library\\1.6.1\\netstandard.library.1.6.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\newtonsoft.json\\9.0.1\\newtonsoft.json.9.0.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\nuget.frameworks\\5.11.0\\nuget.frameworks.5.11.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system\\4.3.0\\runtime.native.system.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system.io.compression\\4.3.0\\runtime.native.system.io.compression.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system.net.http\\4.3.0\\runtime.native.system.net.http.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl\\4.3.0\\runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.appcontext\\4.3.0\\system.appcontext.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.buffers\\4.3.0\\system.buffers.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.collections.concurrent\\4.3.0\\system.collections.concurrent.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.configuration.configurationmanager\\4.4.0\\system.configuration.configurationmanager.4.4.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.console\\4.3.0\\system.console.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.diagnostics.debug\\4.3.0\\system.diagnostics.debug.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.diagnostics.diagnosticsource\\4.3.0\\system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.diagnostics.tools\\4.3.0\\system.diagnostics.tools.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.dynamic.runtime\\4.0.11\\system.dynamic.runtime.4.0.11.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.globalization.calendars\\4.3.0\\system.globalization.calendars.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.globalization.extensions\\4.3.0\\system.globalization.extensions.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.io.compression\\4.3.0\\system.io.compression.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.io.compression.zipfile\\4.3.0\\system.io.compression.zipfile.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.io.filesystem\\4.3.0\\system.io.filesystem.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.io.filesystem.primitives\\4.3.0\\system.io.filesystem.primitives.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.linq\\4.3.0\\system.linq.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.linq.expressions\\4.3.0\\system.linq.expressions.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.net.http\\4.3.0\\system.net.http.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.net.primitives\\4.3.0\\system.net.primitives.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.net.sockets\\4.3.0\\system.net.sockets.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.objectmodel\\4.3.0\\system.objectmodel.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.emit\\4.3.0\\system.reflection.emit.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.emit.ilgeneration\\4.3.0\\system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.emit.lightweight\\4.3.0\\system.reflection.emit.lightweight.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.extensions\\4.3.0\\system.reflection.extensions.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.metadata\\1.6.0\\system.reflection.metadata.1.6.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.reflection.typeextensions\\4.3.0\\system.reflection.typeextensions.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.interopservices.runtimeinformation\\4.3.0\\system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.numerics\\4.3.0\\system.runtime.numerics.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.runtime.serialization.primitives\\4.1.1\\system.runtime.serialization.primitives.4.1.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.algorithms\\4.3.0\\system.security.cryptography.algorithms.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.cng\\4.3.0\\system.security.cryptography.cng.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.csp\\4.3.0\\system.security.cryptography.csp.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.encoding\\4.3.0\\system.security.cryptography.encoding.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.openssl\\4.3.0\\system.security.cryptography.openssl.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.primitives\\4.3.0\\system.security.cryptography.primitives.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.protecteddata\\4.4.0\\system.security.cryptography.protecteddata.4.4.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.security.cryptography.x509certificates\\4.3.0\\system.security.cryptography.x509certificates.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.text.encoding.extensions\\4.3.0\\system.text.encoding.extensions.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.text.encodings.web\\7.0.0\\system.text.encodings.web.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.text.json\\7.0.0\\system.text.json.7.0.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.text.regularexpressions\\4.3.0\\system.text.regularexpressions.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.threading\\4.3.0\\system.threading.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.threading.tasks.extensions\\4.3.0\\system.threading.tasks.extensions.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.threading.timer\\4.3.0\\system.threading.timer.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.xml.readerwriter\\4.3.0\\system.xml.readerwriter.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\system.xml.xdocument\\4.3.0\\system.xml.xdocument.4.3.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\xunit\\2.4.1\\xunit.2.4.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\xunit.abstractions\\2.0.3\\xunit.abstractions.2.0.3.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\xunit.analyzers\\0.10.0\\xunit.analyzers.0.10.0.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\xunit.assert\\2.4.1\\xunit.assert.2.4.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\xunit.core\\2.4.1\\xunit.core.2.4.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\xunit.extensibility.core\\2.4.1\\xunit.extensibility.core.2.4.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\xunit.extensibility.execution\\2.4.1\\xunit.extensibility.execution.2.4.1.nupkg.sha512", - "C:\\Users\\zacha\\.nuget\\packages\\xunit.runner.visualstudio\\2.4.3\\xunit.runner.visualstudio.2.4.3.nupkg.sha512" - ], - "logs": [] -} \ No newline at end of file From c6e280b6012ab0eed14659eb04b40904012a2784 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Tue, 21 May 2024 10:49:02 -0400 Subject: [PATCH 08/15] fix linting issues --- moto/networkmanager/models.py | 20 ++++++++++---------- moto/networkmanager/responses.py | 19 +++++++++---------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 8593ea01e945..7c3eeb058aa5 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -27,7 +27,7 @@ def __init__( self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" - def to_dict(self): + def to_dict(self) -> Dict[str, Any]: return { "GlobalNetworkId": self.global_network_id, "GlobalNetworkArn": self.global_network_arn, @@ -63,7 +63,7 @@ def __init__( self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" - def to_dict(self): + def to_dict(self) -> Dict[str, Any]: return { "CoreNetworkId": self.core_network_id, "CoreNetworkArn": self.core_network_arn, @@ -79,7 +79,7 @@ def to_dict(self): class NetworkManagerBackend(BaseBackend): """Implementation of NetworkManager APIs.""" - def __init__(self, region_name, account_id): + def __init__(self, region_name, account_id) -> None: super().__init__(region_name, account_id) self.global_networks: Dict[str, GlobalNetwork] = {} self.core_networks: Dict[str, CoreNetwork] = {} @@ -110,7 +110,7 @@ def create_core_network( ) -> CoreNetwork: # check if global network exists if global_network_id not in self.global_networks: - raise ResourceNotFound + raise ResourceNotFound("Resource not found.") core_network = CoreNetwork( global_network_id=global_network_id, @@ -124,28 +124,28 @@ def create_core_network( self.core_networks[cnw_id] = core_network return core_network - def delete_core_network(self, core_network_id) -> CoreNetwork: + def delete_core_network(self, core_network_id: str) -> CoreNetwork: # Check if core network exists if core_network_id not in self.core_networks: - raise ResourceNotFound + raise ResourceNotFound("Resource not found.") core_network = self.core_networks.pop(core_network_id) core_network.state = "DELETING" return core_network - def tag_resource(self, resource_arn, tags) -> None: + def tag_resource(self, resource_arn:str, tags:List[Dict[str,Any]]) -> None: resource = self._get_resource_from_arn(resource_arn) resource.tags.extend(tags) - def untag_resource(self, resource_arn, tag_keys) -> None: + def untag_resource(self, resource_arn:str, tag_keys: List[str]) -> None: resource = self._get_resource_from_arn(resource_arn) resource.tags = [tag for tag in resource.tags if tag["Key"] not in tag_keys] def list_core_networks( - self, max_results, next_token + self, max_results:int, next_token:str ) -> Tuple[List[CoreNetwork], str]: return list(self.core_networks.values()), next_token - def get_core_network(self, core_network_id) -> CoreNetwork: + def get_core_network(self, core_network_id:str) -> CoreNetwork: if core_network_id not in self.core_networks: raise ResourceNotFound core_network = self.core_networks[core_network_id] diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index 103a5bc81d98..0d90ecf03aaf 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -2,6 +2,7 @@ import json +from moto.core.common_types import TYPE_RESPONSE from moto.core.responses import BaseResponse from .models import NetworkManagerBackend, networkmanager_backends @@ -10,7 +11,7 @@ class NetworkManagerResponse(BaseResponse): """Handler for NetworkManager requests and responses.""" - def __init__(self): + def __init__(self) -> None: super().__init__(service_name="networkmanager") @property @@ -33,7 +34,7 @@ def create_global_network(self) -> str: ) return json.dumps(dict(GlobalNetwork=global_network.to_dict())) - def create_core_network(self): + def create_core_network(self) -> str: params = json.loads(self.body) global_network_id = params.get("GlobalNetworkId") description = params.get("Description") @@ -49,14 +50,14 @@ def create_core_network(self): ) return json.dumps(dict(CoreNetwork=core_network.to_dict())) - def delete_core_network(self): + def delete_core_network(self) -> str: core_network_id = self.uri_match.groups()[0] core_network = self.networkmanager_backend.delete_core_network( core_network_id=core_network_id, ) return json.dumps(dict(CoreNetwork=core_network.to_dict())) - def tag_resource(self): + def tag_resource(self) -> TYPE_RESPONSE: params = json.loads(self.body) tags = params.get("Tags") resource_arn = self.uri_match.groups()[0] @@ -68,9 +69,7 @@ def tag_resource(self): ) return 200, {}, json.dumps({}) - # add templates from here - - def untag_resource(self): + def untag_resource(self) -> TYPE_RESPONSE: params = self._get_params() tag_keys = params.get("tagKeys") resource_arn = self.uri_match.groups()[0] @@ -81,7 +80,7 @@ def untag_resource(self): ) return 200, {}, json.dumps({}) - def list_core_networks(self): + def list_core_networks(self) -> str: params = self._get_params() max_results = params.get("maxResults") next_token = params.get("nextToken") @@ -92,14 +91,14 @@ def list_core_networks(self): list_core_networks = [core_network.to_dict() for core_network in core_networks] return json.dumps(dict(CoreNetworks=list_core_networks, nextToken=next_token)) - def get_core_network(self): + def get_core_network(self) -> str: core_network_id = self.uri_match.groups()[0] core_network = self.networkmanager_backend.get_core_network( core_network_id=core_network_id, ) return json.dumps(dict(CoreNetwork=core_network.to_dict())) - def describe_global_networks(self): + def describe_global_networks(self) -> str: params = self._get_params() global_network_ids = params.get("globalNetworkIds") max_results = params.get("maxResults") From 92b5bfd4733a4d251f422ad7841e31c19cc1cec9 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Tue, 21 May 2024 21:18:37 -0400 Subject: [PATCH 09/15] fixed more linting --- moto/networkmanager/models.py | 31 +++++++++++++++++++++---------- moto/networkmanager/responses.py | 13 ++++++------- moto/networkmanager/urls.py | 6 +++--- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 7c3eeb058aa5..10578ecc3d00 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -7,9 +7,19 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.ec2.utils import HEX_CHARS +from moto.utilities.paginator import paginate from .exceptions import ResourceNotFound, ValidationError +PAGINATION_MODEL = { + "describe_global_networks": { + "input_token": "next_token", + "limit_key": "max_results", + "limit_default": 100, + "unique_attribute": "global_network_arn", + }, +} + class GlobalNetwork(BaseModel): def __init__( @@ -79,7 +89,7 @@ def to_dict(self) -> Dict[str, Any]: class NetworkManagerBackend(BaseBackend): """Implementation of NetworkManager APIs.""" - def __init__(self, region_name, account_id) -> None: + def __init__(self, region_name: str, account_id: str) -> None: super().__init__(region_name, account_id) self.global_networks: Dict[str, GlobalNetwork] = {} self.core_networks: Dict[str, CoreNetwork] = {} @@ -132,22 +142,22 @@ def delete_core_network(self, core_network_id: str) -> CoreNetwork: core_network.state = "DELETING" return core_network - def tag_resource(self, resource_arn:str, tags:List[Dict[str,Any]]) -> None: + def tag_resource(self, resource_arn: str, tags: List[Dict[str, Any]]) -> None: resource = self._get_resource_from_arn(resource_arn) resource.tags.extend(tags) - def untag_resource(self, resource_arn:str, tag_keys: List[str]) -> None: + def untag_resource(self, resource_arn: str, tag_keys: Optional[List[str]]) -> None: resource = self._get_resource_from_arn(resource_arn) resource.tags = [tag for tag in resource.tags if tag["Key"] not in tag_keys] def list_core_networks( - self, max_results:int, next_token:str + self, max_results: Optional[int], next_token: Optional[str] ) -> Tuple[List[CoreNetwork], str]: return list(self.core_networks.values()), next_token - def get_core_network(self, core_network_id:str) -> CoreNetwork: + def get_core_network(self, core_network_id: str) -> CoreNetwork: if core_network_id not in self.core_networks: - raise ResourceNotFound + raise ResourceNotFound("Resource not found.") core_network = self.core_networks[core_network_id] return core_network @@ -164,12 +174,13 @@ def _get_resource_from_arn(self, arn: str) -> Any: raise ValidationError(message=message) return resource + @paginate(pagination_model=PAGINATION_MODEL) def describe_global_networks( self, global_network_ids: List[str], - max_results: int, - next_token: str, - ) -> Tuple[List[GlobalNetwork], str]: + max_results: Optional[int], + next_token: Optional[str], + ) -> List[GlobalNetwork]: queried_global_networks = [] if not global_network_ids: queried_global_networks = list(self.global_networks.values()) @@ -182,7 +193,7 @@ def describe_global_networks( if id in self.global_networks: global_network = self.global_networks[id] queried_global_networks.append(global_network) - return queried_global_networks, next_token + return queried_global_networks networkmanager_backends = BackendDict( diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index 0d90ecf03aaf..78f7a7f2e9c6 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -1,6 +1,7 @@ """Handles incoming networkmanager requests, invokes methods, returns responses.""" import json +from urllib.parse import unquote from moto.core.common_types import TYPE_RESPONSE from moto.core.responses import BaseResponse @@ -51,7 +52,7 @@ def create_core_network(self) -> str: return json.dumps(dict(CoreNetwork=core_network.to_dict())) def delete_core_network(self) -> str: - core_network_id = self.uri_match.groups()[0] + core_network_id = unquote(self.path.split("/")[-1]) core_network = self.networkmanager_backend.delete_core_network( core_network_id=core_network_id, ) @@ -60,8 +61,7 @@ def delete_core_network(self) -> str: def tag_resource(self) -> TYPE_RESPONSE: params = json.loads(self.body) tags = params.get("Tags") - resource_arn = self.uri_match.groups()[0] - resource_arn = resource_arn.replace("%3A", ":").replace("%2F", "/") + resource_arn = unquote(self.path.split("/")[-1]) self.networkmanager_backend.tag_resource( resource_arn=resource_arn, @@ -72,8 +72,7 @@ def tag_resource(self) -> TYPE_RESPONSE: def untag_resource(self) -> TYPE_RESPONSE: params = self._get_params() tag_keys = params.get("tagKeys") - resource_arn = self.uri_match.groups()[0] - resource_arn = resource_arn.replace("%3A", ":").replace("%2F", "/") + resource_arn = unquote(self.path.split("/")[-1]) self.networkmanager_backend.untag_resource( resource_arn=resource_arn, tag_keys=tag_keys, @@ -89,10 +88,10 @@ def list_core_networks(self) -> str: next_token=next_token, ) list_core_networks = [core_network.to_dict() for core_network in core_networks] - return json.dumps(dict(CoreNetworks=list_core_networks, nextToken=next_token)) + return json.dumps(dict(CoreNetworks=list_core_networks, NextToken=next_token)) def get_core_network(self) -> str: - core_network_id = self.uri_match.groups()[0] + core_network_id = unquote(self.path.split("/")[-1]) core_network = self.networkmanager_backend.get_core_network( core_network_id=core_network_id, ) diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index b0a8ef09b2bd..23e4d702a04e 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -10,7 +10,7 @@ "0/.*$": NetworkManagerResponse.dispatch, "{0}/global-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks$": NetworkManagerResponse.dispatch, - "{0}/core-networks/(?P[^/]+)$": NetworkManagerResponse.dispatch, - "{0}/global-networks/(?P[^/]+)$": NetworkManagerResponse.dispatch, - "{0}/tags/(?P[^/]+)$": NetworkManagerResponse.dispatch, + "{0}/core-networks/(?P[^/.]+)$": NetworkManagerResponse.dispatch, + "{0}/global-networks/(?P[^/.]+)$": NetworkManagerResponse.dispatch, + "{0}/tags/(?P[^/.]+)$": NetworkManagerResponse.dispatch, } From 9629dd4714ae5c94dac2fad965f8ac5cd266d5f6 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Tue, 21 May 2024 22:05:39 -0400 Subject: [PATCH 10/15] final linting update --- moto/networkmanager/models.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 10578ecc3d00..e31f4546ef82 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -2,7 +2,7 @@ import random from datetime import datetime, timezone -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Dict, List, Optional from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel @@ -18,6 +18,12 @@ "limit_default": 100, "unique_attribute": "global_network_arn", }, + "list_core_networks": { + "input_token": "next_token", + "limit_key": "max_results", + "limit_default": 100, + "unique_attribute": "core_network_arn", + }, } @@ -148,12 +154,12 @@ def tag_resource(self, resource_arn: str, tags: List[Dict[str, Any]]) -> None: def untag_resource(self, resource_arn: str, tag_keys: Optional[List[str]]) -> None: resource = self._get_resource_from_arn(resource_arn) - resource.tags = [tag for tag in resource.tags if tag["Key"] not in tag_keys] + if tag_keys: + resource.tags = [tag for tag in resource.tags if tag["Key"] not in tag_keys] - def list_core_networks( - self, max_results: Optional[int], next_token: Optional[str] - ) -> Tuple[List[CoreNetwork], str]: - return list(self.core_networks.values()), next_token + @paginate(pagination_model=PAGINATION_MODEL) + def list_core_networks(self) -> List[CoreNetwork]: + return list(self.core_networks.values()) def get_core_network(self, core_network_id: str) -> CoreNetwork: if core_network_id not in self.core_networks: @@ -176,10 +182,7 @@ def _get_resource_from_arn(self, arn: str) -> Any: @paginate(pagination_model=PAGINATION_MODEL) def describe_global_networks( - self, - global_network_ids: List[str], - max_results: Optional[int], - next_token: Optional[str], + self, global_network_ids: List[str] ) -> List[GlobalNetwork]: queried_global_networks = [] if not global_network_ids: From 9b7037882608a8e0da3b042e9549e42c8a21fc89 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Wed, 22 May 2024 16:19:07 -0400 Subject: [PATCH 11/15] fix global backend after pr #7710 --- moto/backends.py | 6 ++++++ moto/networkmanager/models.py | 3 ++- moto/networkmanager/responses.py | 6 +----- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/moto/backends.py b/moto/backends.py index 48f9d83876b8..a7b0396aeb06 100644 --- a/moto/backends.py +++ b/moto/backends.py @@ -93,6 +93,7 @@ from moto.moto_api._internal.models import MotoAPIBackend from moto.mq.models import MQBackend from moto.neptune.models import NeptuneBackend + from moto.networkmanager.models import NetworkManagerBackend from moto.opensearch.models import OpenSearchServiceBackend from moto.opsworks.models import OpsWorksBackend from moto.organizations.models import OrganizationsBackend @@ -256,6 +257,7 @@ def get_service_from_url(url: str) -> Optional[str]: "Literal['moto_api']", "Literal['mq']", "Literal['neptune']", + "Literal['networkmanager']", "Literal['opensearch']", "Literal['opsworks']", "Literal['organizations']", @@ -542,6 +544,10 @@ def get_backend(name: "Literal['mq']") -> "BackendDict[MQBackend]": ... @overload def get_backend(name: "Literal['neptune']") -> "BackendDict[NeptuneBackend]": ... @overload +def get_backend( + name: "Literal['networkmanager']", +) -> "BackendDict[NetworkManagerBackend]": ... +@overload def get_backend( name: "Literal['opensearch']", ) -> "BackendDict[OpenSearchServiceBackend]": ... diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index e31f4546ef82..3c3dddc5d516 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -8,6 +8,7 @@ from moto.core.common_models import BaseModel from moto.ec2.utils import HEX_CHARS from moto.utilities.paginator import paginate +from moto.utilities.utils import PARTITION_NAMES from .exceptions import ResourceNotFound, ValidationError @@ -203,5 +204,5 @@ def describe_global_networks( NetworkManagerBackend, "networkmanager", use_boto3_regions=False, - additional_regions=["global"], + additional_regions=PARTITION_NAMES, ) diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index 78f7a7f2e9c6..bf79fc411dfe 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -17,11 +17,7 @@ def __init__(self) -> None: @property def networkmanager_backend(self) -> NetworkManagerBackend: - """Return backend instance specific for this region.""" - # TODO - # networkmanager_backends is not yet typed - # Please modify moto/backends.py to add the appropriate type annotations for this service - return networkmanager_backends[self.current_account]["global"] + return networkmanager_backends[self.current_account][self.partition] # add methods from here From 832be709d4f560ef4a6d64aeb2048f15466bdc1f Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Wed, 22 May 2024 21:42:51 -0400 Subject: [PATCH 12/15] fixed url and added server test --- moto/networkmanager/urls.py | 2 +- tests/test_networkmanager/test_server.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/test_networkmanager/test_server.py diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index 23e4d702a04e..861742ed4b97 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -7,7 +7,7 @@ ] url_paths = { - "0/.*$": NetworkManagerResponse.dispatch, + "{0}/$": NetworkManagerResponse.dispatch, "{0}/global-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks/(?P[^/.]+)$": NetworkManagerResponse.dispatch, diff --git a/tests/test_networkmanager/test_server.py b/tests/test_networkmanager/test_server.py new file mode 100644 index 000000000000..e559e53ddad6 --- /dev/null +++ b/tests/test_networkmanager/test_server.py @@ -0,0 +1,23 @@ +"""Test the different server responses.""" + +import json + +import moto.server as server + + +def test_list_global_networks(): + backend = server.create_backend_app("networkmanager") + test_client = backend.test_client() + + res = test_client.get("/global-networks") + + assert "GlobalNetworks" in json.loads(res.data) + + +def test_list_core_networks(): + backend = server.create_backend_app("networkmanager") + test_client = backend.test_client() + + res = test_client.get("/core-networks") + + assert "CoreNetworks" in json.loads(res.data) From f3bef49281bf58049dd9fe1a312b87d30607daec Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Sun, 19 May 2024 13:51:26 -0400 Subject: [PATCH 13/15] update tests, fix urls, fix global backend after pr #7710 --- .github/workflows/tests_sdk_ruby.yml | 2 +- moto/acm/utils.py | 3 +- moto/acmpca/models.py | 7 +- moto/amp/models.py | 5 +- moto/apigateway/models.py | 16 +- moto/apigateway/urls.py | 2 +- moto/apigatewayv2/models.py | 7 +- moto/appconfig/models.py | 5 +- moto/applicationautoscaling/models.py | 8 +- moto/appsync/models.py | 10 +- moto/athena/models.py | 3 +- moto/autoscaling/models.py | 10 +- moto/awslambda/models.py | 41 +- moto/awslambda/responses.py | 4 +- moto/awslambda/utils.py | 9 +- moto/backend_index.py | 1 + moto/backends.py | 6 + moto/backup/models.py | 5 +- moto/batch/models.py | 5 +- moto/batch/utils.py | 10 +- moto/bedrock/models.py | 11 +- moto/bedrockagent/models.py | 5 +- moto/budgets/models.py | 6 +- moto/budgets/responses.py | 2 +- moto/ce/models.py | 24 +- moto/ce/responses.py | 2 +- moto/cloudformation/models.py | 24 +- moto/cloudformation/parsing.py | 5 +- moto/cloudformation/responses.py | 8 +- moto/cloudformation/utils.py | 11 +- moto/cloudfront/models.py | 11 +- moto/cloudfront/responses.py | 2 +- moto/cloudfront/urls.py | 1 + moto/cloudtrail/models.py | 12 +- moto/cloudwatch/models.py | 12 +- moto/cloudwatch/utils.py | 9 +- moto/codebuild/models.py | 13 +- moto/codebuild/responses.py | 19 +- moto/codecommit/models.py | 3 +- moto/codepipeline/models.py | 5 +- moto/cognitoidp/models.py | 4 +- moto/comprehend/models.py | 3 +- moto/config/models.py | 83 +- moto/config/responses.py | 11 +- moto/core/base_backend.py | 22 +- moto/core/botocore_stubber.py | 2 +- moto/core/common_models.py | 4 +- moto/core/responses.py | 5 +- moto/core/utils.py | 22 +- moto/databrew/models.py | 7 +- moto/datasync/models.py | 5 +- moto/dax/models.py | 5 +- moto/dms/models.py | 3 +- moto/dynamodb/models/table.py | 9 +- moto/dynamodb/models/table_import.py | 10 +- moto/dynamodb_v20111205/models.py | 3 +- moto/dynamodb_v20111205/responses.py | 2 +- moto/ec2/exceptions.py | 14 +- moto/ec2/models/elastic_network_interfaces.py | 8 +- moto/ec2/models/flow_logs.py | 2 +- moto/ec2/models/iam_instance_profile.py | 10 +- moto/ec2/models/managed_prefixes.py | 6 +- moto/ec2/models/transit_gateway.py | 2 +- moto/ec2/models/vpcs.py | 10 +- .../availability-zone-id/ap-south-1.json | 60 + .../availability-zone-id/ap-southeast-1.json | 40 + .../availability-zone-id/ca-central-1.json | 60 + .../availability-zone-id/eu-north-1.json | 60 + .../availability-zone-id/eu-south-2.json | 108 ++ .../availability-zone-id/eu-west-1.json | 60 + .../availability-zone-id/eu-west-2.json | 140 +++ .../availability-zone-id/eu-west-3.json | 40 + .../availability-zone-id/sa-east-1.json | 132 +++ .../availability-zone-id/us-east-1.json | 48 + .../availability-zone-id/us-west-1.json | 40 + .../availability-zone-id/us-west-2.json | 96 ++ .../availability-zone/ap-south-1.json | 60 + .../availability-zone/ap-southeast-1.json | 40 + .../availability-zone/ca-central-1.json | 60 + .../availability-zone/eu-north-1.json | 60 + .../availability-zone/eu-south-2.json | 108 ++ .../availability-zone/eu-west-1.json | 60 + .../availability-zone/eu-west-2.json | 140 +++ .../availability-zone/eu-west-3.json | 40 + .../availability-zone/sa-east-1.json | 132 +++ .../availability-zone/us-east-1.json | 48 + .../availability-zone/us-west-1.json | 40 + .../availability-zone/us-west-2.json | 96 ++ .../region/ap-south-1.json | 20 + .../region/ap-southeast-1.json | 20 + .../region/ca-central-1.json | 20 + .../region/eu-north-1.json | 20 + .../region/eu-south-2.json | 20 + .../region/eu-west-1.json | 20 + .../region/eu-west-2.json | 60 + .../region/eu-west-3.json | 20 + .../region/sa-east-1.json | 56 + .../region/us-west-1.json | 20 + moto/ec2/resources/instance_types.json | 1032 +++++++++++++---- moto/ec2/responses/instances.py | 1 + moto/ec2/responses/launch_templates.py | 8 +- moto/ec2/utils.py | 14 +- moto/ecr/models.py | 7 +- moto/ecs/models.py | 42 +- moto/efs/models.py | 6 +- moto/eks/models.py | 3 +- moto/elasticache/models.py | 7 +- moto/elasticbeanstalk/utils.py | 8 +- moto/elastictranscoder/models.py | 3 +- moto/elb/models.py | 11 +- moto/elbv2/models.py | 2 +- moto/elbv2/utils.py | 7 +- moto/emr/models.py | 3 +- moto/emrcontainers/models.py | 3 +- moto/emrcontainers/utils.py | 15 - moto/emrserverless/models.py | 3 +- moto/es/models.py | 3 +- moto/events/models.py | 21 +- moto/events/notifications.py | 6 +- moto/firehose/models.py | 5 +- moto/forecast/models.py | 3 +- moto/glacier/models.py | 4 +- moto/glue/models.py | 21 +- moto/greengrass/models.py | 27 +- moto/guardduty/models.py | 5 +- moto/iam/access_control.py | 48 +- moto/iam/config.py | 22 +- moto/iam/models.py | 211 ++-- moto/iam/policy_validation.py | 6 +- moto/iam/responses.py | 2 +- moto/inspector2/models.py | 3 +- moto/instance_metadata/models.py | 3 +- moto/iot/models.py | 19 +- moto/ivs/models.py | 7 +- moto/kinesis/models.py | 6 +- moto/kinesisvideo/models.py | 3 +- moto/kms/models.py | 11 +- moto/kms/responses.py | 7 +- moto/logs/models.py | 15 +- moto/mediaconnect/models.py | 13 +- moto/medialive/models.py | 5 +- moto/mediapackage/models.py | 5 +- moto/mediastore/models.py | 3 +- moto/moto_proxy/proxy3.py | 10 +- moto/moto_server/werkzeug_app.py | 2 +- moto/mq/models.py | 7 +- moto/neptune/models.py | 10 +- moto/networkmanager/exceptions.py | 12 + moto/networkmanager/models.py | 181 ++- moto/networkmanager/responses.py | 96 +- moto/networkmanager/urls.py | 6 +- moto/opensearch/models.py | 5 +- moto/opsworks/models.py | 3 +- moto/organizations/models.py | 36 +- moto/organizations/responses.py | 6 +- moto/organizations/utils.py | 14 +- moto/panorama/utils.py | 4 +- moto/personalize/models.py | 3 +- moto/pinpoint/models.py | 9 +- moto/polly/utils.py | 5 +- moto/quicksight/models.py | 17 +- moto/ram/models.py | 10 +- moto/rds/models.py | 35 +- moto/redshift/models.py | 6 +- moto/resiliencehub/models.py | 5 +- moto/resourcegroups/models.py | 5 +- moto/resourcegroupstaggingapi/models.py | 43 +- moto/robomaker/models.py | 3 +- moto/route53/models.py | 39 +- moto/route53/responses.py | 2 +- moto/route53domains/models.py | 7 +- moto/route53domains/responses.py | 2 +- moto/route53resolver/models.py | 7 +- moto/s3/config.py | 12 +- moto/s3/models.py | 67 +- moto/s3/notifications.py | 13 +- moto/s3/responses.py | 26 +- moto/s3control/config.py | 8 +- moto/s3control/models.py | 15 +- moto/s3control/responses.py | 2 +- moto/sagemaker/models.py | 18 +- moto/sagemaker/utils.py | 7 +- moto/sagemakerruntime/models.py | 2 +- moto/scheduler/models.py | 7 +- moto/secretsmanager/utils.py | 7 +- moto/servicediscovery/models.py | 5 +- moto/signer/models.py | 3 +- moto/sns/models.py | 9 +- moto/sns/responses.py | 8 +- moto/sns/utils.py | 3 +- moto/sqs/models.py | 16 +- moto/sqs/responses.py | 8 +- moto/ssm/resources/regions.json | 74 +- moto/ssm/resources/services.json | 74 +- moto/ssm/utils.py | 4 +- moto/ssoadmin/models.py | 3 +- moto/stepfunctions/models.py | 19 +- moto/sts/models.py | 26 +- moto/sts/responses.py | 2 +- moto/swf/models/domain.py | 3 +- moto/timestreamwrite/models.py | 10 +- moto/utilities/utils.py | 22 + moto/wafv2/models.py | 6 +- moto/wafv2/utils.py | 11 +- moto/workspaces/models.py | 5 +- setup.cfg | 2 +- tests/test_acmpca/test_acmpca.py | 20 +- tests/test_appsync/test_appsync_schema.py | 9 +- tests/test_awslambda/test_lambda.py | 24 + tests/test_awslambda/utilities.py | 4 +- tests/test_ce/test_ce.py | 15 +- .../test_cloudformation_stack_crud_boto3.py | 45 +- .../test_cloudfront_distributions.py | 12 +- .../test_cloudwatch/test_cloudwatch_alarms.py | 12 +- .../test_cloudwatch_dashboards.py | 15 +- tests/test_core/test_auth.py | 24 +- tests/test_core/test_backenddict.py | 23 +- .../test_elastic_network_interfaces.py | 517 ++++----- tests/test_iam/test_iam.py | 76 +- tests/test_kms/test_kms_policy_enforcement.py | 2 +- .../test_networkmanager.py | 160 +++ tests/test_networkmanager/test_server.py | 23 + .../organizations_test_utils.py | 22 +- .../test_organizations_boto3.py | 72 +- tests/test_s3/test_s3.py | 67 +- tests/test_s3/test_s3_config.py | 44 +- .../test_s3_eventbridge_integration.py | 39 +- tests/test_s3/test_s3_file_handles.py | 6 +- tests/test_s3/test_s3_lambda_integration.py | 20 +- tests/test_s3/test_s3_multipart.py | 8 +- tests/test_s3/test_s3_notifications.py | 5 +- .../test_sagemaker/test_sagemaker_pipeline.py | 1 + tests/test_ssoadmin/test_ssoadmin_policies.py | 14 +- .../test_stepfunctions/test_stepfunctions.py | 19 + tests/test_sts/test_sts.py | 12 +- tests/test_utilities/test_utils.py | 16 + tests/test_wafv2/test_wafv2.py | 10 +- 237 files changed, 5276 insertions(+), 1446 deletions(-) create mode 100644 tests/test_networkmanager/test_server.py create mode 100644 tests/test_utilities/test_utils.py diff --git a/.github/workflows/tests_sdk_ruby.yml b/.github/workflows/tests_sdk_ruby.yml index 749ab87634bb..fa6f0f230b06 100644 --- a/.github/workflows/tests_sdk_ruby.yml +++ b/.github/workflows/tests_sdk_ruby.yml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Set up Ruby ${{ matrix.ruby-version }} - uses: ruby/setup-ruby@cacc9f1c0b3f4eb8a16a6bb0ed10897b43b9de49 + uses: ruby/setup-ruby@6615b4b8a02c78c4d711c06df4b8a20aa685a45d with: ruby-version: ${{ matrix.ruby-version }} - name: Set up Python 3.8 diff --git a/moto/acm/utils.py b/moto/acm/utils.py index e8b81a378afb..670159a6efac 100644 --- a/moto/acm/utils.py +++ b/moto/acm/utils.py @@ -1,7 +1,8 @@ from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition def make_arn_for_certificate(account_id: str, region_name: str) -> str: # Example # arn:aws:acm:eu-west-2:764371465172:certificate/c4b738b8-56fe-4b3a-b841-1c047654780b - return f"arn:aws:acm:{region_name}:{account_id}:certificate/{mock_random.uuid4()}" + return f"arn:{get_partition(region_name)}:acm:{region_name}:{account_id}:certificate/{mock_random.uuid4()}" diff --git a/moto/acmpca/models.py b/moto/acmpca/models.py index 6a2057ee5eff..ab260be2c13c 100644 --- a/moto/acmpca/models.py +++ b/moto/acmpca/models.py @@ -15,6 +15,7 @@ from moto.core.utils import unix_time, utcnow from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import InvalidS3ObjectAclInCrlConfiguration, ResourceNotFoundException @@ -30,9 +31,7 @@ def __init__( security_standard: Optional[str], ): self.id = mock_random.uuid4() - self.arn = ( - f"arn:aws:acm-pca:{region}:{account_id}:certificate-authority/{self.id}" - ) + self.arn = f"arn:{get_partition(region)}:acm-pca:{region}:{account_id}:certificate-authority/{self.id}" self.account_id = account_id self.region_name = region self.certificate_authority_configuration = certificate_authority_configuration @@ -119,7 +118,7 @@ def issue_certificate(self, csr_bytes: bytes) -> str: cert = cryptography.x509.load_pem_x509_csr(base64.b64decode(csr_bytes)) new_cert = self.generate_cert(common_name="", subject=cert.subject) cert_id = str(mock_random.uuid4()).replace("-", "") - cert_arn = f"arn:aws:acm-pca:{self.region_name}:{self.account_id}:certificate-authority/{self.id}/certificate/{cert_id}" + cert_arn = f"arn:{get_partition(self.region_name)}:acm-pca:{self.region_name}:{self.account_id}:certificate-authority/{self.id}/certificate/{cert_id}" self.issued_certificates[cert_arn] = new_cert return cert_arn diff --git a/moto/amp/models.py b/moto/amp/models.py index 9ce1edfa29cf..318be4999c65 100644 --- a/moto/amp/models.py +++ b/moto/amp/models.py @@ -8,6 +8,7 @@ from moto.moto_api._internal import mock_random from moto.utilities.paginator import paginate from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import RuleGroupNamespaceNotFound, WorkspaceNotFound from .utils import PAGINATION_MODEL @@ -26,7 +27,7 @@ def __init__( self.name = name self.data = data self.tag_fn = tag_fn - self.arn = f"arn:aws:aps:{region}:{account_id}:rulegroupsnamespace/{workspace_id}/{self.name}" + self.arn = f"arn:{get_partition(region)}:aps:{region}:{account_id}:rulegroupsnamespace/{workspace_id}/{self.name}" self.created_at = unix_time() self.modified_at = self.created_at @@ -56,7 +57,7 @@ def __init__( ): self.alias = alias self.workspace_id = f"ws-{mock_random.uuid4()}" - self.arn = f"arn:aws:aps:{region}:{account_id}:workspace/{self.workspace_id}" + self.arn = f"arn:{get_partition(region)}:aps:{region}:{account_id}:workspace/{self.workspace_id}" self.endpoint = f"https://aps-workspaces.{region}.amazonaws.com/workspaces/{self.workspace_id}/" self.status = {"statusCode": "ACTIVE"} self.created_at = unix_time() diff --git a/moto/apigateway/models.py b/moto/apigateway/models.py index 0c2c29b9c199..9ca56026a0cd 100644 --- a/moto/apigateway/models.py +++ b/moto/apigateway/models.py @@ -23,6 +23,7 @@ from moto.core.common_models import BaseModel, CloudFormationModel from moto.core.utils import path_url from moto.moto_api._internal import mock_random as random +from moto.utilities.utils import ARN_PARTITION_REGEX, get_partition from ..core.models import responses_mock from .exceptions import ( @@ -1950,7 +1951,8 @@ def put_integration( ) -> Integration: resource = self.get_resource(function_id, resource_id) if credentials and not re.match( - "^arn:aws:iam::" + str(self.account_id), credentials + f"^arn:{get_partition(self.region_name)}:iam::" + str(self.account_id), + credentials, ): raise CrossAccountNotAllowed() if not integration_method and integration_type in [ @@ -1961,21 +1963,25 @@ def put_integration( ]: raise IntegrationMethodNotDefined() if integration_type in ["AWS_PROXY"] and re.match( - "^arn:aws:apigateway:[a-zA-Z0-9-]+:s3", uri + ARN_PARTITION_REGEX + ":apigateway:[a-zA-Z0-9-]+:s3", uri ): raise AwsProxyNotAllowed() if ( integration_type in ["AWS"] - and re.match("^arn:aws:apigateway:[a-zA-Z0-9-]+:s3", uri) + and re.match(ARN_PARTITION_REGEX + ":apigateway:[a-zA-Z0-9-]+:s3", uri) and not credentials ): raise RoleNotSpecified() if integration_type in ["HTTP", "HTTP_PROXY"] and not self._uri_validator(uri): raise InvalidHttpEndpoint() - if integration_type in ["AWS", "AWS_PROXY"] and not re.match("^arn:aws:", uri): + if integration_type in ["AWS", "AWS_PROXY"] and not re.match( + ARN_PARTITION_REGEX + ":", uri + ): raise InvalidArn() if integration_type in ["AWS", "AWS_PROXY"] and not re.match( - "^arn:aws:apigateway:[a-zA-Z0-9-]+:[a-zA-Z0-9-.]+:(path|action)/", uri + ARN_PARTITION_REGEX + + ":apigateway:[a-zA-Z0-9-]+:[a-zA-Z0-9-.]+:(path|action)/", + uri, ): raise InvalidIntegrationArn() integration = resource.add_integration( diff --git a/moto/apigateway/urls.py b/moto/apigateway/urls.py index 1b520f3136cf..03567ddd2de7 100644 --- a/moto/apigateway/urls.py +++ b/moto/apigateway/urls.py @@ -11,7 +11,7 @@ "{0}/restapis/(?P[^/]+)/authorizers/(?P[^/]+)/?$": APIGatewayResponse.dispatch, "{0}/restapis/(?P[^/]+)/stages$": APIGatewayResponse.dispatch, "{0}/tags/(?P[^/]+)$": APIGatewayResponse.dispatch, - "{0}/tags/arn:aws:apigateway:(?P[^/]+)::/restapis/(?P[^/]+)/stages/(?P[^/]+)$": APIGatewayResponse.dispatch, + "{0}/tags/arn:(?P[^/]+):apigateway:(?P[^/]+)::/restapis/(?P[^/]+)/stages/(?P[^/]+)$": APIGatewayResponse.dispatch, "{0}/restapis/(?P[^/]+)/stages/(?P[^/]+)/?$": APIGatewayResponse.dispatch, "{0}/restapis/(?P[^/]+)/stages/(?P[^/]+)/exports/(?P[^/]+)/?$": APIGatewayResponse.dispatch, "{0}/restapis/(?P[^/]+)/deployments$": APIGatewayResponse.dispatch, diff --git a/moto/apigatewayv2/models.py b/moto/apigatewayv2/models.py index a53b58cc09c0..69d3117c45c1 100644 --- a/moto/apigatewayv2/models.py +++ b/moto/apigatewayv2/models.py @@ -11,6 +11,7 @@ from moto.core.utils import unix_time from moto.moto_api._internal import mock_random as random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ( ApiMappingNotFound, @@ -594,7 +595,9 @@ def __init__( self.routes: Dict[str, Route] = dict() self.stages: Dict[str, Stage] = dict() - self.arn = f"arn:aws:apigateway:{region}::/apis/{self.api_id}" + self.arn = ( + f"arn:{get_partition(region)}:apigateway:{region}::/apis/{self.api_id}" + ) self.backend.tag_resource(self.arn, tags) def clear(self) -> None: @@ -1061,7 +1064,7 @@ def __init__( self.sg_ids = sg_ids self.subnet_ids = subnet_ids - self.arn = f"arn:aws:apigateway:{backend.region_name}::/vpclinks/{self.id}" + self.arn = f"arn:{get_partition(backend.region_name)}:apigateway:{backend.region_name}::/vpclinks/{self.id}" self.backend = backend self.backend.tag_resource(self.arn, tags) diff --git a/moto/appconfig/models.py b/moto/appconfig/models.py index 7a8a3a03de3a..f8f862975a4d 100644 --- a/moto/appconfig/models.py +++ b/moto/appconfig/models.py @@ -4,6 +4,7 @@ from moto.core.common_models import BaseModel from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ( AppNotFoundException, @@ -56,7 +57,7 @@ def __init__( _type: str, ): self.id = mock_random.get_random_hex(7) - self.arn = f"arn:aws:appconfig:{region}:{account_id}:application/{application_id}/configurationprofile/{self.id}" + self.arn = f"arn:{get_partition(region)}:appconfig:{region}:{account_id}:application/{application_id}/configurationprofile/{self.id}" self.application_id = application_id self.name = name self.description = description @@ -116,7 +117,7 @@ def __init__( self, name: str, description: Optional[str], region: str, account_id: str ): self.id = mock_random.get_random_hex(7) - self.arn = f"arn:aws:appconfig:{region}:{account_id}:application/{self.id}" + self.arn = f"arn:{get_partition(region)}:appconfig:{region}:{account_id}:application/{self.id}" self.name = name self.description = description diff --git a/moto/applicationautoscaling/models.py b/moto/applicationautoscaling/models.py index 91214821f55d..d3d2a1c64327 100644 --- a/moto/applicationautoscaling/models.py +++ b/moto/applicationautoscaling/models.py @@ -1,3 +1,4 @@ +import re import time from collections import OrderedDict from enum import Enum, unique @@ -7,6 +8,7 @@ from moto.core.common_models import BaseModel from moto.ecs import ecs_backends from moto.moto_api._internal import mock_random +from moto.utilities.utils import ARN_PARTITION_REGEX, get_partition from .exceptions import AWSValidationException @@ -378,7 +380,7 @@ def _get_resource_type_from_resource_id(resource_id: str) -> str: # - ...except for sagemaker endpoints, dynamodb GSIs and keyspaces tables, where it's the third. # - Comprehend uses an arn, with the resource type being the last element. - if resource_id.startswith("arn:aws:comprehend"): + if re.match(ARN_PARTITION_REGEX + ":comprehend", resource_id): resource_id = resource_id.split(":")[-1] resource_split = ( resource_id.split("/") if "/" in resource_id else resource_id.split(":") @@ -463,7 +465,7 @@ def __init__( self.policy_name = policy_name self.policy_type = policy_type self._guid = mock_random.uuid4() - self.policy_arn = f"arn:aws:autoscaling:{region_name}:{account_id}:scalingPolicy:{self._guid}:resource/{self.service_namespace}/{self.resource_id}:policyName/{self.policy_name}" + self.policy_arn = f"arn:{get_partition(region_name)}:autoscaling:{region_name}:{account_id}:scalingPolicy:{self._guid}:resource/{self.service_namespace}/{self.resource_id}:policyName/{self.policy_name}" self.creation_time = time.time() self.alarms: List["FakeAlarm"] = [] @@ -638,7 +640,7 @@ def __init__( account_id: str, region: str, ) -> None: - self.arn = f"arn:aws:autoscaling:{region}:{account_id}:scheduledAction:{service_namespace}:scheduledActionName/{scheduled_action_name}" + self.arn = f"arn:{get_partition(region)}:autoscaling:{region}:{account_id}:scheduledAction:{service_namespace}:scheduledActionName/{scheduled_action_name}" self.service_namespace = service_namespace self.schedule = schedule self.timezone = timezone diff --git a/moto/appsync/models.py b/moto/appsync/models.py index e2a568b64e27..f0e0345f6cb9 100644 --- a/moto/appsync/models.py +++ b/moto/appsync/models.py @@ -8,6 +8,7 @@ from moto.core.utils import unix_time from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import BadRequestException, GraphqlAPINotFound, GraphQLSchemaException @@ -40,8 +41,9 @@ class GraphqlSchema(BaseModel): - def __init__(self, definition: Any): + def __init__(self, definition: Any, region_name: str): self.definition = definition + self.region_name = region_name # [graphql.language.ast.ObjectTypeDefinitionNode, ..] self.types: List[Any] = [] @@ -57,7 +59,7 @@ def get_type(self, name: str) -> Optional[Dict[str, Any]]: # type: ignore[retur "description": graphql_type.description.value if graphql_type.description else None, - "arn": f"arn:aws:appsync:graphql_type/{name}", + "arn": f"arn:{get_partition(self.region_name)}:appsync:graphql_type/{name}", "definition": "NotYetImplemented", } @@ -155,7 +157,7 @@ def __init__( self.user_pool_config = user_pool_config self.xray_enabled = xray_enabled - self.arn = f"arn:aws:appsync:{self.region}:{account_id}:apis/{self.api_id}" + self.arn = f"arn:{get_partition(self.region)}:appsync:{self.region}:{account_id}:apis/{self.api_id}" self.graphql_schema: Optional[GraphqlSchema] = None self.api_keys: Dict[str, GraphqlAPIKey] = dict() @@ -211,7 +213,7 @@ def update_api_key( def start_schema_creation(self, definition: str) -> None: graphql_definition = base64.b64decode(definition).decode("utf-8") - self.graphql_schema = GraphqlSchema(graphql_definition) + self.graphql_schema = GraphqlSchema(graphql_definition, region_name=self.region) def get_schema_status(self) -> Any: return self.graphql_schema.get_status() # type: ignore[union-attr] diff --git a/moto/athena/models.py b/moto/athena/models.py index f03d4ff929f1..93a563ae21c0 100644 --- a/moto/athena/models.py +++ b/moto/athena/models.py @@ -6,6 +6,7 @@ from moto.core.common_models import BaseModel from moto.moto_api._internal import mock_random from moto.utilities.paginator import paginate +from moto.utilities.utils import get_partition class TaggableResourceMixin: @@ -22,7 +23,7 @@ def __init__( self.region = region_name self.resource_name = resource_name self.tags = tags or [] - self.arn = f"arn:aws:athena:{region_name}:{account_id}:{resource_name}" + self.arn = f"arn:{get_partition(region_name)}:athena:{region_name}:{account_id}:{resource_name}" def create_tags(self, tags: List[Dict[str, str]]) -> List[Dict[str, str]]: new_keys = [tag_set["Key"] for tag_set in tags] diff --git a/moto/autoscaling/models.py b/moto/autoscaling/models.py index 0a0ca2313ca9..c1265c795d12 100644 --- a/moto/autoscaling/models.py +++ b/moto/autoscaling/models.py @@ -18,6 +18,7 @@ BlockDeviceMapping, BlockDeviceType, ) +from moto.utilities.utils import get_partition from .exceptions import ( AutoscalingClientError, @@ -112,7 +113,7 @@ def __init__( @property def arn(self) -> str: - return f"arn:aws:autoscaling:{self.autoscaling_backend.region_name}:{self.autoscaling_backend.account_id}:scalingPolicy:c322761b-3172-4d56-9a21-0ed9d6161d67:autoScalingGroupName/{self.as_name}:policyName/{self.name}" + return f"arn:{get_partition(self.autoscaling_backend.region_name)}:autoscaling:{self.autoscaling_backend.region_name}:{self.autoscaling_backend.account_id}:scalingPolicy:c322761b-3172-4d56-9a21-0ed9d6161d67:autoScalingGroupName/{self.as_name}:policyName/{self.name}" def execute(self) -> None: if self.adjustment_type == "ExactCapacity": @@ -174,7 +175,7 @@ def __init__( self.metadata_options = metadata_options self.classic_link_vpc_id = classic_link_vpc_id self.classic_link_vpc_security_groups = classic_link_vpc_security_groups - self.arn = f"arn:aws:autoscaling:{region_name}:{account_id}:launchConfiguration:9dbbbf87-6141-428a-a409-0752edbe6cad:launchConfigurationName/{self.name}" + self.arn = f"arn:{get_partition(region_name)}:autoscaling:{region_name}:{account_id}:launchConfiguration:9dbbbf87-6141-428a-a409-0752edbe6cad:launchConfigurationName/{self.name}" @classmethod def create_from_instance( @@ -448,7 +449,8 @@ def __init__( self._id = str(random.uuid4()) self.region = self.autoscaling_backend.region_name self.account_id = self.autoscaling_backend.account_id - self.service_linked_role = f"arn:aws:iam::{self.account_id}:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" + partition = get_partition(self.region) + self.service_linked_role = f"arn:{partition}:iam::{self.account_id}:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" self.vpc_zone_identifier: Optional[str] = None self._set_azs_and_vpcs(availability_zones, vpc_zone_identifier) @@ -502,7 +504,7 @@ def tags(self, tags: List[Dict[str, str]]) -> None: @property def arn(self) -> str: - return f"arn:aws:autoscaling:{self.region}:{self.account_id}:autoScalingGroup:{self._id}:autoScalingGroupName/{self.name}" + return f"arn:{get_partition(self.region)}:autoscaling:{self.region}:{self.account_id}:autoScalingGroup:{self._id}:autoScalingGroupName/{self.name}" def active_instances(self) -> List[InstanceState]: return [x for x in self.instance_states if x.lifecycle_state == "InService"] diff --git a/moto/awslambda/models.py b/moto/awslambda/models.py index 8437195b225b..ce66fef661b7 100644 --- a/moto/awslambda/models.py +++ b/moto/awslambda/models.py @@ -40,7 +40,11 @@ from moto.s3.models import FakeKey, s3_backends from moto.sqs.models import sqs_backends from moto.utilities.docker_utilities import DockerModel -from moto.utilities.utils import load_resource_as_bytes +from moto.utilities.utils import ( + ARN_PARTITION_REGEX, + get_partition, + load_resource_as_bytes, +) from .exceptions import ( ConflictException, @@ -280,12 +284,12 @@ def _s3_content(key: Any) -> Tuple[bytes, int, str, str]: def _validate_s3_bucket_and_key( - account_id: str, data: Dict[str, Any] + account_id: str, partition: str, data: Dict[str, Any] ) -> Optional[FakeKey]: key = None try: # FIXME: does not validate bucket region - key = s3_backends[account_id]["global"].get_object( + key = s3_backends[account_id][partition].get_object( data["S3Bucket"], data["S3Key"] ) except MissingBucket: @@ -440,7 +444,10 @@ def __init__(self, spec: Dict[str, Any], account_id: str, region: str): self.code_digest, ) = _zipfile_content(self.content["ZipFile"]) else: - key = _validate_s3_bucket_and_key(account_id, data=self.content) + partition = get_partition(region) + key = _validate_s3_bucket_and_key( + account_id, partition=partition, data=self.content + ) if key: ( self.code_bytes, @@ -529,9 +536,7 @@ def __init__( description: str, routing_config: str, ): - self.arn = ( - f"arn:aws:lambda:{region}:{account_id}:function:{function_name}:{name}" - ) + self.arn = f"arn:{get_partition(region)}:lambda:{region}:{account_id}:function:{function_name}:{name}" self.name = name self.function_version = function_version self.description = description @@ -607,6 +612,7 @@ def __init__( # required self.account_id = account_id self.region = region + self.partition = get_partition(region) self.code = spec["Code"] self.function_name = spec["FunctionName"] self.handler = spec.get("Handler") @@ -860,11 +866,13 @@ def _set_function_code(self, updated_spec: Dict[str, Any]) -> None: try: if from_update: # FIXME: does not validate bucket region - key = s3_backends[self.account_id]["global"].get_object( + key = s3_backends[self.account_id][self.partition].get_object( updated_spec["S3Bucket"], updated_spec["S3Key"] ) else: - key = _validate_s3_bucket_and_key(self.account_id, data=self.code) + key = _validate_s3_bucket_and_key( + self.account_id, partition=self.partition, data=self.code + ) except MissingBucket: if do_validate_s3(): raise ValueError( @@ -1422,6 +1430,7 @@ def __init__(self, region_name: str, account_id: str): ) self.region_name = region_name self.account_id = account_id + self.partition = get_partition(region_name) # function-arn -> alias -> LambdaAlias self._aliases: Dict[str, Dict[str, LambdaAlias]] = defaultdict(lambda: {}) @@ -1451,7 +1460,7 @@ def get_alias(self, name: str, function_name: str) -> LambdaAlias: if name in aliases: return aliases[name] - arn = f"arn:aws:lambda:{self.region_name}:{self.account_id}:function:{function_name}:{name}" + arn = f"arn:{get_partition(self.region_name)}:lambda:{self.region_name}:{self.account_id}:function:{function_name}:{name}" raise UnknownAliasException(arn) def put_alias( @@ -1467,7 +1476,7 @@ def put_alias( ) aliases = self._get_function_aliases(function_name) if name in aliases: - arn = f"arn:aws:lambda:{self.region_name}:{self.account_id}:function:{function_name}:{name}" + arn = f"arn:{get_partition(self.region_name)}:lambda:{self.region_name}:{self.account_id}:function:{function_name}:{name}" raise ConflictException(f"Alias already exists: {arn}") alias = LambdaAlias( @@ -1601,7 +1610,7 @@ def get_function_by_name_or_arn_forbid_qualifier( :raises: InvalidParameterValue if qualifier is provided """ - if name_or_arn.startswith("arn:aws"): + if re.match(ARN_PARTITION_REGEX, name_or_arn): [_, name, qualifier] = self.split_function_arn(name_or_arn) if qualifier is not None: @@ -1620,7 +1629,7 @@ def get_function_by_name_or_arn_with_qualifier( :raises: UnknownFunctionException if function not found """ - if name_or_arn.startswith("arn:aws"): + if re.match(ARN_PARTITION_REGEX, name_or_arn): [_, name, qualifier_in_arn] = self.split_function_arn(name_or_arn) return self.get_function_by_name_with_qualifier( name, qualifier_in_arn or qualifier @@ -1631,7 +1640,7 @@ def get_function_by_name_or_arn_with_qualifier( def construct_unknown_function_exception( self, name_or_arn: str, qualifier: Optional[str] = None ) -> UnknownFunctionException: - if name_or_arn.startswith("arn:aws"): + if re.match(ARN_PARTITION_REGEX, name_or_arn): arn = name_or_arn else: # name_or_arn is a function name with optional qualifier [:] @@ -1648,7 +1657,7 @@ def put_function(self, fn: LambdaFunction) -> None: if account != self.account_id: raise CrossAccountNotAllowed() try: - iam_backend = iam_backends[self.account_id]["global"] + iam_backend = iam_backends[self.account_id][self.partition] iam_backend.get_role_by_arn(fn.role) except IAMNotFoundException: raise InvalidParameterValueException( @@ -1691,7 +1700,7 @@ def publish_version( def del_function(self, name_or_arn: str, qualifier: Optional[str] = None) -> None: # Qualifier may be explicitly passed or part of function name or ARN, extract it here - if name_or_arn.startswith("arn:aws"): + if re.match(ARN_PARTITION_REGEX, name_or_arn): # Extract from ARN if ":" in name_or_arn.split(":function:")[-1]: qualifier = name_or_arn.split(":")[-1] diff --git a/moto/awslambda/responses.py b/moto/awslambda/responses.py index af87165a2056..4f825b991e9b 100644 --- a/moto/awslambda/responses.py +++ b/moto/awslambda/responses.py @@ -1,10 +1,12 @@ import json +import re import sys from typing import Any, Dict, List, Tuple, Union from urllib.parse import unquote from moto.core.responses import TYPE_RESPONSE, BaseResponse from moto.utilities.aws_headers import amz_crc32 +from moto.utilities.utils import ARN_PARTITION_REGEX from .exceptions import FunctionAlreadyExists, UnknownFunctionException from .models import LambdaBackend @@ -224,7 +226,7 @@ def _set_configuration_qualifier( # type: ignore[misc] configuration: Dict[str, Any], function_name: str, qualifier: str ) -> Dict[str, Any]: # Qualifier may be explicitly passed or part of function name or ARN, extract it here - if function_name.startswith("arn:aws"): + if re.match(ARN_PARTITION_REGEX, function_name): # Extract from ARN if ":" in function_name.split(":function:")[-1]: qualifier = function_name.split(":")[-1] diff --git a/moto/awslambda/utils.py b/moto/awslambda/utils.py index 946905faabe5..01ab0d85bca0 100644 --- a/moto/awslambda/utils.py +++ b/moto/awslambda/utils.py @@ -2,6 +2,8 @@ from functools import partial from typing import TYPE_CHECKING, Any, Callable +from moto.utilities.utils import PARTITION_NAMES, get_partition + if TYPE_CHECKING: from .models import LambdaBackend @@ -10,7 +12,9 @@ def make_arn(resource_type: str, region: str, account: str, name: str) -> str: - return f"arn:aws:lambda:{region}:{account}:{resource_type}:{name}" + return ( + f"arn:{get_partition(region)}:lambda:{region}:{account}:{resource_type}:{name}" + ) make_function_arn = partial(make_arn, "function") @@ -29,7 +33,8 @@ def make_ver_arn( def split_arn(arn_type: Callable[[str, str, str, str], str], arn: str) -> Any: - arn = arn.replace("arn:aws:lambda:", "") + for partition in PARTITION_NAMES: + arn = arn.replace(f"arn:{partition}:lambda:", "") region, account, _, name, version = arn.split(":") diff --git a/moto/backend_index.py b/moto/backend_index.py index 52e2a3c08db4..04984eca93a4 100644 --- a/moto/backend_index.py +++ b/moto/backend_index.py @@ -27,6 +27,7 @@ ("ce", re.compile("https?://ce\\.(.+)\\.amazonaws\\.com")), ("cloudformation", re.compile("https?://cloudformation\\.(.+)\\.amazonaws\\.com")), ("cloudfront", re.compile("https?://cloudfront\\.amazonaws\\.com")), + ("cloudfront", re.compile("https?://cloudfront\\.(.+)\\.amazonaws\\.com")), ("cloudtrail", re.compile("https?://cloudtrail\\.(.+)\\.amazonaws\\.com")), ("cloudwatch", re.compile("https?://monitoring\\.(.+)\\.amazonaws.com")), ("codebuild", re.compile("https?://codebuild\\.(.+)\\.amazonaws\\.com")), diff --git a/moto/backends.py b/moto/backends.py index 48f9d83876b8..a7b0396aeb06 100644 --- a/moto/backends.py +++ b/moto/backends.py @@ -93,6 +93,7 @@ from moto.moto_api._internal.models import MotoAPIBackend from moto.mq.models import MQBackend from moto.neptune.models import NeptuneBackend + from moto.networkmanager.models import NetworkManagerBackend from moto.opensearch.models import OpenSearchServiceBackend from moto.opsworks.models import OpsWorksBackend from moto.organizations.models import OrganizationsBackend @@ -256,6 +257,7 @@ def get_service_from_url(url: str) -> Optional[str]: "Literal['moto_api']", "Literal['mq']", "Literal['neptune']", + "Literal['networkmanager']", "Literal['opensearch']", "Literal['opsworks']", "Literal['organizations']", @@ -542,6 +544,10 @@ def get_backend(name: "Literal['mq']") -> "BackendDict[MQBackend]": ... @overload def get_backend(name: "Literal['neptune']") -> "BackendDict[NeptuneBackend]": ... @overload +def get_backend( + name: "Literal['networkmanager']", +) -> "BackendDict[NetworkManagerBackend]": ... +@overload def get_backend( name: "Literal['opensearch']", ) -> "BackendDict[OpenSearchServiceBackend]": ... diff --git a/moto/backup/models.py b/moto/backup/models.py index 5f8d3011f827..f71d0fd3d7bf 100644 --- a/moto/backup/models.py +++ b/moto/backup/models.py @@ -6,6 +6,7 @@ from moto.core.utils import unix_time from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import AlreadyExistsException, ResourceNotFoundException @@ -18,7 +19,7 @@ def __init__( backend: "BackupBackend", ): self.backup_plan_id = str(mock_random.uuid4()) - self.backup_plan_arn = f"arn:aws:backup:{backend.region_name}:{backend.account_id}:backup-plan:{self.backup_plan_id}" + self.backup_plan_arn = f"arn:{get_partition(backend.region_name)}:backup:{backend.region_name}:{backend.account_id}:backup-plan:{self.backup_plan_id}" self.creation_date = unix_time() ran_str = mock_random.get_random_string(length=48) self.version_id = ran_str @@ -84,7 +85,7 @@ def __init__( backend: "BackupBackend", ): self.backup_vault_name = backup_vault_name - self.backup_vault_arn = f"arn:aws:backup:{backend.region_name}:{backend.account_id}:backup-vault:{backup_vault_name}" + self.backup_vault_arn = f"arn:{get_partition(backend.region_name)}:backup:{backend.region_name}:{backend.account_id}:backup-vault:{backup_vault_name}" self.creation_date = unix_time() self.encryption_key_arn = encryption_key_arn self.creator_request_id = creator_request_id diff --git a/moto/batch/models.py b/moto/batch/models.py index a7a35fd089f2..090c5886e739 100644 --- a/moto/batch/models.py +++ b/moto/batch/models.py @@ -27,6 +27,7 @@ from moto.moto_api._internal.managed_state_model import ManagedState from moto.utilities.docker_utilities import DockerModel from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ClientException, InvalidParameterValueException, ValidationError from .utils import ( @@ -977,7 +978,7 @@ def __init__( tags: Dict[str, str], ): self.name = name - self.arn = f"arn:aws:batch:{region}:{account_id}:scheduling-policy/{name}" + self.arn = f"arn:{get_partition(region)}:batch:{region}:{account_id}:scheduling-policy/{name}" self.fairshare_policy = { "computeReservation": fairshare_policy.get("computeReservation") or 0, "shareDecaySeconds": fairshare_policy.get("shareDecaySeconds") or 0, @@ -1020,7 +1021,7 @@ def iam_backend(self) -> IAMBackend: :return: IAM Backend :rtype: moto.iam.models.IAMBackend """ - return iam_backends[self.account_id]["global"] + return iam_backends[self.account_id][self.partition] @property def ec2_backend(self) -> EC2Backend: diff --git a/moto/batch/utils.py b/moto/batch/utils.py index bb6e02746362..b308ffa98998 100644 --- a/moto/batch/utils.py +++ b/moto/batch/utils.py @@ -1,25 +1,27 @@ from enum import Enum from typing import Any, Dict, List, Optional, Tuple +from moto.utilities.utils import get_partition + from .exceptions import ValidationError def make_arn_for_compute_env(account_id: str, name: str, region_name: str) -> str: - return f"arn:aws:batch:{region_name}:{account_id}:compute-environment/{name}" + return f"arn:{get_partition(region_name)}:batch:{region_name}:{account_id}:compute-environment/{name}" def make_arn_for_job_queue(account_id: str, name: str, region_name: str) -> str: - return f"arn:aws:batch:{region_name}:{account_id}:job-queue/{name}" + return f"arn:{get_partition(region_name)}:batch:{region_name}:{account_id}:job-queue/{name}" def make_arn_for_job(account_id: str, job_id: str, region_name: str) -> str: - return f"arn:aws:batch:{region_name}:{account_id}:job/{job_id}" + return f"arn:{get_partition(region_name)}:batch:{region_name}:{account_id}:job/{job_id}" def make_arn_for_task_def( account_id: str, name: str, revision: int, region_name: str ) -> str: - return f"arn:aws:batch:{region_name}:{account_id}:job-definition/{name}:{revision}" + return f"arn:{get_partition(region_name)}:batch:{region_name}:{account_id}:job-definition/{name}:{revision}" def lowercase_first_key(some_dict: Dict[str, Any]) -> Dict[str, Any]: diff --git a/moto/bedrock/models.py b/moto/bedrock/models.py index 6023b1b5528f..4ace313a952a 100644 --- a/moto/bedrock/models.py +++ b/moto/bedrock/models.py @@ -14,6 +14,7 @@ from moto.core.common_models import BaseModel from moto.utilities.paginator import paginate from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition class ModelCustomizationJob(BaseModel): @@ -80,16 +81,16 @@ def __init__( self.vpc_config = vpc_config self.region_name = region_name self.account_id = account_id - self.job_arn = f"arn:aws:bedrock:{self.region_name}:{self.account_id}:model-customization-job/{self.job_name}" + self.job_arn = f"arn:{get_partition(self.region_name)}:bedrock:{self.region_name}:{self.account_id}:model-customization-job/{self.job_name}" self.output_model_name = f"{self.custom_model_name}-{self.job_name}" - self.output_model_arn = f"arn:aws:bedrock:{self.region_name}:{self.account_id}:custom-model/{self.output_model_name}" + self.output_model_arn = f"arn:{get_partition(self.region_name)}:bedrock:{self.region_name}:{self.account_id}:custom-model/{self.output_model_name}" self.status = "InProgress" self.failure_message = "Failure Message" self.creation_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.last_modified_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.end_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - self.base_model_arn = f"arn:aws:bedrock:{self.region_name}::foundation-model/{self.base_model_identifier}" - self.output_model_kms_key_arn = f"arn:aws:kms:{self.region_name}:{self.account_id}:key/{self.output_model_name}-kms-key" + self.base_model_arn = f"arn:{get_partition(self.region_name)}:bedrock:{self.region_name}::foundation-model/{self.base_model_identifier}" + self.output_model_kms_key_arn = f"arn:{get_partition(self.region_name)}:kms:{self.region_name}:{self.account_id}:key/{self.output_model_name}-kms-key" self.training_metrics = {"trainingLoss": 0.0} # hard coded self.validation_metrics = [{"validationLoss": 0.0}] # hard coded @@ -153,7 +154,7 @@ def __init__( self.validation_metrics = validation_metrics self.region_name = region_name self.account_id = account_id - self.model_arn = f"arn:aws:bedrock:{self.region_name}:{self.account_id}:custom-model/{self.model_name}" + self.model_arn = f"arn:{get_partition(self.region_name)}:bedrock:{self.region_name}:{self.account_id}:custom-model/{self.model_name}" self.creation_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.base_model_name = base_model_name diff --git a/moto/bedrockagent/models.py b/moto/bedrockagent/models.py index 245c23c73887..e9c36eddf690 100644 --- a/moto/bedrockagent/models.py +++ b/moto/bedrockagent/models.py @@ -13,6 +13,7 @@ from moto.moto_api._internal import mock_random from moto.utilities.paginator import paginate from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition class Agent(BaseModel): @@ -46,7 +47,7 @@ def __init__( self.prepared_at = unix_time() self.agent_status = "PREPARED" self.agent_id = self.agent_name + str(mock_random.uuid4())[:8] - self.agent_arn = f"arn:aws:bedrock:{self.region_name}:{self.account_id}:agent/{self.agent_id}" + self.agent_arn = f"arn:{get_partition(self.region_name)}:bedrock:{self.region_name}:{self.account_id}:agent/{self.agent_id}" self.agent_version = "1.0" self.failure_reasons: List[str] = [] self.recommended_actions = ["action"] @@ -124,7 +125,7 @@ def __init__( self.region_name = region_name self.account_id = account_id self.knowledge_base_id = self.name + str(mock_random.uuid4())[:8] - self.knowledge_base_arn = f"arn:aws:bedrock:{self.region_name}:{self.account_id}:knowledge-base/{self.knowledge_base_id}" + self.knowledge_base_arn = f"arn:{get_partition(self.region_name)}:bedrock:{self.region_name}:{self.account_id}:knowledge-base/{self.knowledge_base_id}" self.created_at = unix_time() self.updated_at = unix_time() self.status = "Active" diff --git a/moto/budgets/models.py b/moto/budgets/models.py index 16104e6c41e7..cf1f1ea8ee47 100644 --- a/moto/budgets/models.py +++ b/moto/budgets/models.py @@ -6,6 +6,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.utils import unix_time +from moto.utilities.utils import PARTITION_NAMES from .exceptions import BudgetMissingLimit, DuplicateRecordException, NotFoundException @@ -144,5 +145,8 @@ def describe_notifications_for_budget( budgets_backends = BackendDict( - BudgetsBackend, "budgets", use_boto3_regions=False, additional_regions=["global"] + BudgetsBackend, + "budgets", + use_boto3_regions=False, + additional_regions=PARTITION_NAMES, ) diff --git a/moto/budgets/responses.py b/moto/budgets/responses.py index abcc8943ac32..de427e395c2b 100644 --- a/moto/budgets/responses.py +++ b/moto/budgets/responses.py @@ -11,7 +11,7 @@ def __init__(self) -> None: @property def backend(self) -> BudgetsBackend: - return budgets_backends[self.current_account]["global"] + return budgets_backends[self.current_account][self.partition] def create_budget(self) -> str: account_id = self._get_param("AccountId") diff --git a/moto/ce/models.py b/moto/ce/models.py index 6bba495c1eac..04245d82f85d 100644 --- a/moto/ce/models.py +++ b/moto/ce/models.py @@ -8,6 +8,7 @@ from moto.core.utils import iso_8601_datetime_without_milliseconds from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import PARTITION_NAMES, get_partition from .exceptions import CostCategoryNotFound @@ -27,6 +28,7 @@ class CostCategoryDefinition(BaseModel): def __init__( self, account_id: str, + region_name: str, name: str, effective_start: Optional[str], rule_version: str, @@ -39,7 +41,7 @@ def __init__( self.rules = rules self.default_value = default_value self.split_charge_rules = split_charge_rules - self.arn = f"arn:aws:ce::{account_id}:costcategory/{str(mock_random.uuid4())}" + self.arn = f"arn:{get_partition(region_name)}:ce::{account_id}:costcategory/{str(mock_random.uuid4())}" self.effective_start: str = effective_start or first_day() def update( @@ -92,13 +94,14 @@ def create_cost_category_definition( The EffectiveOn and ResourceTags-parameters are not yet implemented """ ccd = CostCategoryDefinition( - self.account_id, - name, - effective_start, - rule_version, - rules, - default_value, - split_charge_rules, + account_id=self.account_id, + region_name=self.region_name, + name=name, + effective_start=effective_start, + rule_version=rule_version, + rules=rules, + default_value=default_value, + split_charge_rules=split_charge_rules, ) self.cost_categories[ccd.arn] = ccd self.tag_resource(ccd.arn, tags) @@ -209,5 +212,8 @@ def get_cost_and_usage(self, body: str) -> Dict[str, Any]: ce_backends = BackendDict( - CostExplorerBackend, "ce", use_boto3_regions=False, additional_regions=["global"] + CostExplorerBackend, + "ce", + use_boto3_regions=False, + additional_regions=PARTITION_NAMES, ) diff --git a/moto/ce/responses.py b/moto/ce/responses.py index 7206aec907df..b484ce3ff5b6 100644 --- a/moto/ce/responses.py +++ b/moto/ce/responses.py @@ -13,7 +13,7 @@ class CostExplorerResponse(BaseResponse): @property def ce_backend(self) -> CostExplorerBackend: """Return backend instance specific for this region.""" - return ce_backends[self.current_account]["global"] + return ce_backends[self.current_account][self.partition] def create_cost_category_definition(self) -> str: params = json.loads(self.body) diff --git a/moto/cloudformation/models.py b/moto/cloudformation/models.py index e9258d85d0bf..f9f8a2c2dc27 100644 --- a/moto/cloudformation/models.py +++ b/moto/cloudformation/models.py @@ -17,6 +17,7 @@ from moto.moto_api._internal import mock_random from moto.organizations.models import OrganizationsBackend, organizations_backends from moto.sns.models import sns_backends +from moto.utilities.utils import get_partition from .custom_model import CustomModel from .exceptions import StackSetNotEmpty, StackSetNotFoundException, ValidationError @@ -54,12 +55,19 @@ def __init__( self.description = description self.parameters = parameters self.tags = tags - self.admin_role = admin_role - self.admin_role_arn = f"arn:aws:iam::{account_id}:role/{self.admin_role}" + self.admin_role = ( + admin_role + or f"arn:{get_partition(region)}:iam::{account_id}:role/AWSCloudFormationStackSetAdministrationRole" + ) self.execution_role = execution_role or "AWSCloudFormationStackSetExecutionRole" self.status = "ACTIVE" self.instances = FakeStackInstances( - account_id, template, parameters, self.id, self.name + account_id=account_id, + region=region, + template=template, + parameters=parameters, + stackset_id=self.id, + stackset_name=self.name, ) self.stack_instances = self.instances.stack_instances self.operations: List[Dict[str, Any]] = [] @@ -281,12 +289,14 @@ class FakeStackInstances(BaseModel): def __init__( self, account_id: str, + region: str, template: str, parameters: Dict[str, str], stackset_id: str, stackset_name: str, ): self.account_id = account_id + self.partition = get_partition(region) self.template = template self.parameters = parameters or {} self.stackset_id = stackset_id @@ -296,7 +306,7 @@ def __init__( @property def org_backend(self) -> OrganizationsBackend: - return organizations_backends[self.account_id]["global"] + return organizations_backends[self.account_id][self.partition] def create_instances( self, @@ -565,7 +575,11 @@ def create_from_cloudformation_json( # type: ignore[misc] ] properties = cloudformation_json["Properties"] - template_body = get_stack_from_s3_url(properties["TemplateURL"], account_id) + template_body = get_stack_from_s3_url( + properties["TemplateURL"], + account_id=account_id, + partition=get_partition(region_name), + ) parameters = properties.get("Parameters", {}) return cf_backend.create_stack( diff --git a/moto/cloudformation/parsing.py b/moto/cloudformation/parsing.py index 6261d0d3f778..3cbae2d5cdf4 100644 --- a/moto/cloudformation/parsing.py +++ b/moto/cloudformation/parsing.py @@ -60,6 +60,7 @@ from moto.ssm import models as ssm_models # noqa # pylint: disable=all from moto.ssm import ssm_backends from moto.stepfunctions import models as sfn_models # noqa # pylint: disable=all +from moto.utilities.utils import get_partition # End ugly list of imports from .exceptions import ( @@ -608,7 +609,9 @@ def transform_mapping(self) -> None: if name == "AWS::Include": location = params["Location"] bucket_name, name = bucket_and_name_from_url(location) - key = s3_backends[self._account_id]["global"].get_object( + key = s3_backends[self._account_id][ + get_partition(self._region_name) + ].get_object( bucket_name, # type: ignore[arg-type] name, ) diff --git a/moto/cloudformation/responses.py b/moto/cloudformation/responses.py index 8373ffb3c57d..66983ba65b25 100644 --- a/moto/cloudformation/responses.py +++ b/moto/cloudformation/responses.py @@ -53,7 +53,9 @@ def cfnresponse(cls, *args: Any, **kwargs: Any) -> Any: # type: ignore[misc] # return cls.dispatch(request=request, full_url=full_url, headers=headers) def _get_stack_from_s3_url(self, template_url: str) -> str: - return get_stack_from_s3_url(template_url, account_id=self.current_account) + return get_stack_from_s3_url( + template_url, account_id=self.current_account, partition=self.partition + ) def _get_params_from_list( self, parameters_list: List[Dict[str, Any]] @@ -529,8 +531,6 @@ def describe_stack_set(self) -> str: stackset_name = self._get_param("StackSetName") stackset = self.cloudformation_backend.describe_stack_set(stackset_name) - if not stackset.admin_role: - stackset.admin_role = f"arn:aws:iam::{self.current_account}:role/AWSCloudFormationStackSetAdministrationRole" if not stackset.execution_role: stackset.execution_role = "AWSCloudFormationStackSetExecutionRole" @@ -1206,7 +1206,7 @@ def set_stack_policy(self) -> str: {{ stackset.execution_role }} - {{ stackset.admin_role_arn }} + {{ stackset.admin_role }} {{ stackset.id }} {{ operation.CreationTimestamp }} {{ operation.OperationId }} diff --git a/moto/cloudformation/utils.py b/moto/cloudformation/utils.py index 7225b5c21b21..3a18868f9f32 100644 --- a/moto/cloudformation/utils.py +++ b/moto/cloudformation/utils.py @@ -6,18 +6,19 @@ import yaml from moto.moto_api._internal import mock_random as random +from moto.utilities.utils import get_partition def generate_stack_id(stack_name: str, region: str, account: str) -> str: random_id = random.uuid4() - return f"arn:aws:cloudformation:{region}:{account}:stack/{stack_name}/{random_id}" + return f"arn:{get_partition(region)}:cloudformation:{region}:{account}:stack/{stack_name}/{random_id}" def generate_changeset_id( changeset_name: str, region_name: str, account_id: str ) -> str: random_id = random.uuid4() - return f"arn:aws:cloudformation:{region_name}:{account_id}:changeSet/{changeset_name}/{random_id}" + return f"arn:{get_partition(region_name)}:cloudformation:{region_name}:{account_id}:changeSet/{changeset_name}/{random_id}" def generate_stackset_id(stackset_name: str) -> str: @@ -26,7 +27,7 @@ def generate_stackset_id(stackset_name: str) -> str: def generate_stackset_arn(stackset_id: str, region_name: str, account_id: str) -> str: - return f"arn:aws:cloudformation:{region_name}:{account_id}:stackset/{stackset_id}" + return f"arn:{get_partition(region_name)}:cloudformation:{region_name}:{account_id}:stackset/{stackset_id}" def random_suffix() -> str: @@ -89,7 +90,7 @@ def validate_template_cfn_lint(template: str) -> List[Any]: return matches -def get_stack_from_s3_url(template_url: str, account_id: str) -> str: +def get_stack_from_s3_url(template_url: str, account_id: str, partition: str) -> str: from moto.s3.models import s3_backends template_url_parts = urlparse(template_url) @@ -108,5 +109,5 @@ def get_stack_from_s3_url(template_url: str, account_id: str) -> str: bucket_name = template_url_parts.netloc.split(".")[0] key_name = template_url_parts.path.lstrip("/") - key = s3_backends[account_id]["global"].get_object(bucket_name, key_name) + key = s3_backends[account_id][partition].get_object(bucket_name, key_name) return key.value.decode("utf-8") # type: ignore[union-attr] diff --git a/moto/cloudfront/models.py b/moto/cloudfront/models.py index 3c4de5227dc4..c720c3d8fd4e 100644 --- a/moto/cloudfront/models.py +++ b/moto/cloudfront/models.py @@ -7,6 +7,7 @@ from moto.moto_api._internal import mock_random as random from moto.moto_api._internal.managed_state_model import ManagedState from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import PARTITION_NAMES, get_partition from .exceptions import ( DistributionAlreadyExists, @@ -208,16 +209,14 @@ def random_id(uppercase: bool = True) -> str: ) return resource_id - def __init__(self, account_id: str, config: Dict[str, Any]): + def __init__(self, account_id: str, region_name: str, config: Dict[str, Any]): # Configured ManagedState super().__init__( "cloudfront::distribution", transitions=[("InProgress", "Deployed")] ) # Configure internal properties self.distribution_id = Distribution.random_id() - self.arn = ( - f"arn:aws:cloudfront:{account_id}:distribution/{self.distribution_id}" - ) + self.arn = f"arn:{get_partition(region_name)}:cloudfront:{account_id}:distribution/{self.distribution_id}" self.distribution_config = DistributionConfig(config) self.active_trusted_signers = ActiveTrustedSigners() self.active_trusted_key_groups = ActiveTrustedKeyGroups() @@ -305,7 +304,7 @@ def create_distribution( def create_distribution_with_tags( self, distribution_config: Dict[str, Any], tags: List[Dict[str, str]] ) -> Tuple[Distribution, str, str]: - dist = Distribution(self.account_id, distribution_config) + dist = Distribution(self.account_id, self.region_name, distribution_config) caller_reference = dist.distribution_config.caller_reference existing_dist = self._distribution_with_caller_reference(caller_reference) if existing_dist is not None: @@ -436,5 +435,5 @@ def delete_origin_access_control(self, control_id: str) -> None: CloudFrontBackend, "cloudfront", use_boto3_regions=False, - additional_regions=["global"], + additional_regions=PARTITION_NAMES, ) diff --git a/moto/cloudfront/responses.py b/moto/cloudfront/responses.py index 6d9a3056494f..609bd76ba8e8 100644 --- a/moto/cloudfront/responses.py +++ b/moto/cloudfront/responses.py @@ -19,7 +19,7 @@ def _get_xml_body(self) -> Dict[str, Any]: @property def backend(self) -> CloudFrontBackend: - return cloudfront_backends[self.current_account]["global"] + return cloudfront_backends[self.current_account][self.partition] def create_distribution(self) -> TYPE_RESPONSE: params = self._get_xml_body() diff --git a/moto/cloudfront/urls.py b/moto/cloudfront/urls.py index edf584fcf697..a630a1f28b3c 100644 --- a/moto/cloudfront/urls.py +++ b/moto/cloudfront/urls.py @@ -4,6 +4,7 @@ url_bases = [ r"https?://cloudfront\.amazonaws\.com", + r"https?://cloudfront\.(.+)\.amazonaws\.com", ] url_paths = { "{0}/2020-05-31/distribution$": CloudFrontResponse.dispatch, diff --git a/moto/cloudtrail/models.py b/moto/cloudtrail/models.py index af8b331413f7..e8ae18421ded 100644 --- a/moto/cloudtrail/models.py +++ b/moto/cloudtrail/models.py @@ -7,6 +7,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import iso_8601_datetime_without_milliseconds, utcnow from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ( InsufficientSnsTopicPolicyException, @@ -90,6 +91,7 @@ def __init__( ): self.account_id = account_id self.region_name = region_name + self.partition = get_partition(region_name) self.trail_name = trail_name self.bucket_name = bucket_name self.s3_key_prefix = s3_key_prefix @@ -111,12 +113,12 @@ def __init__( @property def arn(self) -> str: - return f"arn:aws:cloudtrail:{self.region_name}:{self.account_id}:trail/{self.trail_name}" + return f"arn:{get_partition(self.region_name)}:cloudtrail:{self.region_name}:{self.account_id}:trail/{self.trail_name}" @property def topic_arn(self) -> Optional[str]: if self.sns_topic_name: - return f"arn:aws:sns:{self.region_name}:{self.account_id}:{self.sns_topic_name}" + return f"arn:{get_partition(self.region_name)}:sns:{self.region_name}:{self.account_id}:{self.sns_topic_name}" return None def check_name(self) -> None: @@ -135,7 +137,7 @@ def check_bucket_exists(self) -> None: from moto.s3.models import s3_backends try: - s3_backends[self.account_id]["global"].get_bucket(self.bucket_name) + s3_backends[self.account_id][self.partition].get_bucket(self.bucket_name) except Exception: raise S3BucketDoesNotExistException( f"S3 bucket {self.bucket_name} does not exist!" @@ -312,9 +314,7 @@ def get_trail_status(self, name: str) -> TrailStatus: ) if not trail: # This particular method returns the ARN as part of the error message - arn = ( - f"arn:aws:cloudtrail:{self.region_name}:{self.account_id}:trail/{name}" - ) + arn = f"arn:{get_partition(self.region_name)}:cloudtrail:{self.region_name}:{self.account_id}:trail/{name}" raise TrailNotFoundException(account_id=self.account_id, name=arn) return trail.status diff --git a/moto/cloudwatch/models.py b/moto/cloudwatch/models.py index b0f50f9d1611..20849ebfee92 100644 --- a/moto/cloudwatch/models.py +++ b/moto/cloudwatch/models.py @@ -304,9 +304,9 @@ def __init__( class Dashboard(BaseModel): - def __init__(self, account_id: str, name: str, body: str): + def __init__(self, account_id: str, region_name: str, name: str, body: str): # Guaranteed to be unique for now as the name is also the key of a dictionary where they are stored - self.arn = make_arn_for_dashboard(account_id, name) + self.arn = make_arn_for_dashboard(account_id, region_name, name) self.name = name self.body = body self.last_modified = datetime.now() @@ -449,7 +449,11 @@ def aws_metric_data(self) -> List[MetricDatumBase]: providers = CloudWatchMetricProvider.__subclasses__() md = [] for provider in providers: - md.extend(provider.get_cloudwatch_metrics(self.account_id)) + md.extend( + provider.get_cloudwatch_metrics( + self.account_id, region=self.region_name + ) + ) return md def put_metric_alarm( @@ -805,7 +809,7 @@ def get_all_metrics(self) -> List[MetricDatumBase]: return self.metric_data + self.aws_metric_data def put_dashboard(self, name: str, body: str) -> None: - self.dashboards[name] = Dashboard(self.account_id, name, body) + self.dashboards[name] = Dashboard(self.account_id, self.region_name, name, body) def list_dashboards(self, prefix: str = "") -> Iterable[Dashboard]: for key, value in self.dashboards.items(): diff --git a/moto/cloudwatch/utils.py b/moto/cloudwatch/utils.py index d2d68d7107e8..5394104465eb 100644 --- a/moto/cloudwatch/utils.py +++ b/moto/cloudwatch/utils.py @@ -1,6 +1,9 @@ -def make_arn_for_dashboard(account_id: str, name: str) -> str: - return f"arn:aws:cloudwatch::{account_id}dashboard/{name}" +from moto.utilities.utils import get_partition + + +def make_arn_for_dashboard(account_id: str, region_name: str, name: str) -> str: + return f"arn:{get_partition(region_name)}:cloudwatch::{account_id}:dashboard/{name}" def make_arn_for_alarm(region: str, account_id: str, alarm_name: str) -> str: - return f"arn:aws:cloudwatch:{region}:{account_id}:alarm:{alarm_name}" + return f"arn:{get_partition(region)}:cloudwatch:{region}:{account_id}:alarm:{alarm_name}" diff --git a/moto/codebuild/models.py b/moto/codebuild/models.py index 695c295d7f19..34b96311d6ab 100644 --- a/moto/codebuild/models.py +++ b/moto/codebuild/models.py @@ -8,6 +8,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import iso_8601_datetime_with_milliseconds from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition class CodeBuildProjectMetadata(BaseModel): @@ -26,7 +27,7 @@ def __init__( self.build_metadata["id"] = build_id self.build_metadata["arn"] = ( - f"arn:aws:codebuild:{region_name}:{account_id}:build/{build_id}" + f"arn:{get_partition(region_name)}:codebuild:{region_name}:{account_id}:build/{build_id}" ) self.build_metadata["buildNumber"] = mock_random.randint(1, 100) @@ -77,7 +78,7 @@ def __init__( self.build_metadata["logs"] = { "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=eu-west-2#logEvent:group=null;stream=null", - "cloudWatchLogsArn": f"arn:aws:logs:{region_name}:{account_id}:log-group:null:log-stream:null", + "cloudWatchLogsArn": f"arn:{get_partition(region_name)}:logs:{region_name}:{account_id}:log-group:null:log-stream:null", "cloudWatchLogs": {"status": "ENABLED"}, "s3Logs": {"status": "DISABLED", "encryptionDisabled": False}, } @@ -87,7 +88,7 @@ def __init__( self.build_metadata["buildComplete"] = False self.build_metadata["initiator"] = "rootme" self.build_metadata["encryptionKey"] = ( - f"arn:aws:kms:{region_name}:{account_id}:alias/aws/s3" + f"arn:{get_partition(region_name)}:kms:{region_name}:{account_id}:alias/aws/s3" ) @@ -107,13 +108,13 @@ def __init__( self.project_metadata["name"] = project_name self.project_metadata["arn"] = ( - f"arn:aws:codebuild:{region}:{account_id}:project/{project_name}" + f"arn:{get_partition(region)}:codebuild:{region}:{account_id}:project/{project_name}" ) self.project_metadata["encryptionKey"] = ( - f"arn:aws:kms:{region}:{account_id}:alias/aws/s3" + f"arn:{get_partition(region)}:kms:{region}:{account_id}:alias/aws/s3" ) self.project_metadata["serviceRole"] = ( - f"arn:aws:iam::{account_id}:role/service-role/{serviceRole}" + f"arn:{get_partition(region)}:iam::{account_id}:role/service-role/{serviceRole}" ) self.project_metadata["lastModifiedDate"] = current_date self.project_metadata["created"] = current_date diff --git a/moto/codebuild/responses.py b/moto/codebuild/responses.py index bcdaecef5c3b..f516f6c2c3a2 100644 --- a/moto/codebuild/responses.py +++ b/moto/codebuild/responses.py @@ -3,6 +3,7 @@ from typing import Any, Dict, List from moto.core.responses import BaseResponse +from moto.utilities.utils import get_partition from .exceptions import ( InvalidInputException, @@ -31,8 +32,12 @@ def _validate_required_params_source(source: Dict[str, Any]) -> None: raise InvalidInputException("Project source location is required") -def _validate_required_params_service_role(account_id: str, service_role: str) -> None: - if not service_role.startswith(f"arn:aws:iam::{account_id}:role/"): +def _validate_required_params_service_role( + account_id: str, region_name: str, service_role: str +) -> None: + if not service_role.startswith( + f"arn:{get_partition(region_name)}:iam::{account_id}:role/" + ): raise InvalidInputException( "Invalid service role: Service role account ID does not match caller's account" ) @@ -105,7 +110,7 @@ def list_builds_for_project(self) -> str: ): name = self._get_param("projectName") raise ResourceNotFoundException( - f"The provided project arn:aws:codebuild:{self.region}:{self.current_account}:project/{name} does not exist" + f"The provided project arn:{get_partition(self.region)}:codebuild:{self.region}:{self.current_account}:project/{name} does not exist" ) ids = self.codebuild_backend.list_builds_for_project( @@ -117,7 +122,9 @@ def list_builds_for_project(self) -> str: def create_project(self) -> str: _validate_required_params_source(self._get_param("source")) service_role = self._get_param("serviceRole") - _validate_required_params_service_role(self.current_account, service_role) + _validate_required_params_service_role( + self.current_account, self.region, service_role + ) _validate_required_params_artifacts(self._get_param("artifacts")) _validate_required_params_environment(self._get_param("environment")) _validate_required_params_project_name(self._get_param("name")) @@ -125,7 +132,7 @@ def create_project(self) -> str: if self._get_param("name") in self.codebuild_backend.codebuild_projects.keys(): name = self._get_param("name") raise ResourceAlreadyExistsException( - f"Project already exists: arn:aws:codebuild:{self.region}:{self.current_account}:project/{name}" + f"Project already exists: arn:{get_partition(self.region)}:codebuild:{self.region}:{self.current_account}:project/{name}" ) project_metadata = self.codebuild_backend.create_project( @@ -151,7 +158,7 @@ def start_build(self) -> str: ): name = self._get_param("projectName") raise ResourceNotFoundException( - f"Project cannot be found: arn:aws:codebuild:{self.region}:{self.current_account}:project/{name}" + f"Project cannot be found: arn:{get_partition(self.region)}:codebuild:{self.region}:{self.current_account}:project/{name}" ) metadata = self.codebuild_backend.start_build( diff --git a/moto/codecommit/models.py b/moto/codecommit/models.py index 184c0c4956e2..da55dbf93267 100644 --- a/moto/codecommit/models.py +++ b/moto/codecommit/models.py @@ -4,6 +4,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import iso_8601_datetime_with_milliseconds from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition from .exceptions import RepositoryDoesNotExistException, RepositoryNameExistsException @@ -30,7 +31,7 @@ def __init__( self.repository_metadata["repositoryDescription"] = repository_description self.repository_metadata["repositoryId"] = str(mock_random.uuid4()) self.repository_metadata["Arn"] = ( - f"arn:aws:codecommit:{region}:{account_id}:{repository_name}" + f"arn:{get_partition(region)}:codecommit:{region}:{account_id}:{repository_name}" ) self.repository_metadata["accountId"] = account_id diff --git a/moto/codepipeline/models.py b/moto/codepipeline/models.py index 98552ff20fef..d414f8038366 100644 --- a/moto/codepipeline/models.py +++ b/moto/codepipeline/models.py @@ -13,6 +13,7 @@ from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow from moto.iam.exceptions import IAMNotFoundException from moto.iam.models import IAMBackend, iam_backends +from moto.utilities.utils import get_partition class CodePipeline(BaseModel): @@ -23,7 +24,7 @@ def __init__(self, account_id: str, region: str, pipeline: Dict[str, Any]): self.pipeline = self.add_default_values(pipeline) self.tags: Dict[str, str] = {} - self._arn = f"arn:aws:codepipeline:{region}:{account_id}:{pipeline['name']}" + self._arn = f"arn:{get_partition(region)}:codepipeline:{region}:{account_id}:{pipeline['name']}" self._created = utcnow() self._updated = utcnow() @@ -78,7 +79,7 @@ def default_vpc_endpoint_service( @property def iam_backend(self) -> IAMBackend: - return iam_backends[self.account_id]["global"] + return iam_backends[self.account_id][self.partition] def create_pipeline( self, pipeline: Dict[str, Any], tags: List[Dict[str, str]] diff --git a/moto/cognitoidp/models.py b/moto/cognitoidp/models.py index 2b8917197d20..66a350a810db 100644 --- a/moto/cognitoidp/models.py +++ b/moto/cognitoidp/models.py @@ -15,7 +15,7 @@ from moto.core.utils import utcnow from moto.moto_api._internal import mock_random as random from moto.utilities.paginator import paginate -from moto.utilities.utils import md5_hash +from moto.utilities.utils import get_partition, md5_hash from ..settings import get_cognito_idp_user_pool_id_strategy from .exceptions import ( @@ -396,7 +396,7 @@ def __init__( get_cognito_idp_user_pool_id_strategy(), region, name, extended_config ) self.id = f"{self.region}_{user_pool_id}"[: self.MAX_ID_LENGTH] - self.arn = f"arn:aws:cognito-idp:{self.region}:{account_id}:userpool/{self.id}" + self.arn = f"arn:{get_partition(region)}:cognito-idp:{region}:{account_id}:userpool/{self.id}" self.name = name self.status = None diff --git a/moto/comprehend/models.py b/moto/comprehend/models.py index ff37e0b64fba..945004016551 100644 --- a/moto/comprehend/models.py +++ b/moto/comprehend/models.py @@ -5,6 +5,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ( DetectPIIValidationException, @@ -78,7 +79,7 @@ def __init__( model_policy: str, ): self.name = recognizer_name - self.arn = f"arn:aws:comprehend:{region_name}:{account_id}:entity-recognizer/{recognizer_name}" + self.arn = f"arn:{get_partition(region_name)}:comprehend:{region_name}:{account_id}:entity-recognizer/{recognizer_name}" if version_name: self.arn += f"/version/{version_name}" self.language_code = language_code diff --git a/moto/config/models.py b/moto/config/models.py index 171e6d4fc3be..0c256bfebb75 100644 --- a/moto/config/models.py +++ b/moto/config/models.py @@ -57,7 +57,7 @@ from moto.moto_api._internal import mock_random as random from moto.s3.config import s3_config_query from moto.s3control.config import s3_account_public_access_block_query -from moto.utilities.utils import load_resource +from moto.utilities.utils import get_partition, load_resource POP_STRINGS = [ "capitalizeStart", @@ -400,7 +400,7 @@ def __init__( super().__init__(capitalize_start=True, capitalize_arn=False) self.configuration_aggregator_name = name - self.configuration_aggregator_arn = f"arn:aws:config:{region}:{account_id}:config-aggregator/config-aggregator-{random_string()}" + self.configuration_aggregator_arn = f"arn:{get_partition(region)}:config:{region}:{account_id}:config-aggregator/config-aggregator-{random_string()}" self.account_aggregation_sources = account_sources self.organization_aggregation_source = org_source self.creation_time = datetime2int(utcnow()) @@ -438,7 +438,7 @@ def __init__( ): super().__init__(capitalize_start=True, capitalize_arn=False) - self.aggregation_authorization_arn = f"arn:aws:config:{current_region}:{account_id}:aggregation-authorization/{authorized_account_id}/{authorized_aws_region}" + self.aggregation_authorization_arn = f"arn:{get_partition(current_region)}:config:{current_region}:{account_id}:aggregation-authorization/{authorized_account_id}/{authorized_aws_region}" self.authorized_account_id = authorized_account_id self.authorized_aws_region = authorized_aws_region self.creation_time = datetime2int(utcnow()) @@ -468,7 +468,7 @@ def __init__( self.delivery_s3_key_prefix = delivery_s3_key_prefix self.excluded_accounts = excluded_accounts or [] self.last_update_time = datetime2int(utcnow()) - self.organization_conformance_pack_arn = f"arn:aws:config:{region}:{account_id}:organization-conformance-pack/{self._unique_pack_name}" + self.organization_conformance_pack_arn = f"arn:{get_partition(region)}:config:{region}:{account_id}:organization-conformance-pack/{self._unique_pack_name}" self.organization_conformance_pack_name = name def update( @@ -741,9 +741,7 @@ def __init__( self.maximum_execution_frequency = None # keeps pylint happy self.modify_fields(region, config_rule, tags) self.config_rule_id = f"config-rule-{random_string():.6}" - self.config_rule_arn = ( - f"arn:aws:config:{region}:{account_id}:config-rule/{self.config_rule_id}" - ) + self.config_rule_arn = f"arn:{get_partition(region)}:config:{region}:{account_id}:config-rule/{self.config_rule_id}" def modify_fields( self, region: str, config_rule: Dict[str, Any], tags: Dict[str, str] @@ -1449,7 +1447,6 @@ def delete_delivery_channel(self, channel_name: str) -> None: def list_discovered_resources( self, resource_type: str, - backend_region: str, resource_ids: List[str], resource_name: str, limit: int, @@ -1485,14 +1482,19 @@ def list_discovered_resources( # moto, then call upon the resource type's Config Query class to # retrieve the list of resources that match the criteria: if RESOURCE_MAP.get(resource_type, {}): - # Is this a global resource type? -- if so, re-write the region to 'global': - backend_query_region = ( - backend_region # Always provide the backend this request arrived from. - ) - if RESOURCE_MAP[resource_type].backends[self.account_id].get("global"): - backend_region = "global" + # Always provide the backend this request arrived from. + backend_query_region = self.region_name + # Is this a global resource type? -- if so, use the partition + if ( + RESOURCE_MAP[resource_type] + .backends[self.account_id] + .get(self.partition) + ): + backend_region = self.partition + else: + backend_region = self.region_name - # For non-aggregated queries, the we only care about the + # For non-aggregated queries, we only care about the # backend_region. Need to verify that moto has implemented # the region for the given backend: if ( @@ -1505,10 +1507,11 @@ def list_discovered_resources( resource_type ].list_config_service_resources( self.account_id, - resource_ids, - resource_name, - limit, - next_token, + partition=self.partition, + resource_ids=resource_ids, + resource_name=resource_name, + limit=limit, + next_token=next_token, backend_region=backend_query_region, ) @@ -1575,10 +1578,11 @@ def list_aggregate_discovered_resources( resource_type ].list_config_service_resources( self.account_id, - resource_id, - resource_name, - limit, - next_token, + partition=self.partition, + resource_ids=resource_id, + resource_name=resource_name, + limit=limit, + next_token=next_token, resource_region=resource_region, aggregator=self.config_aggregators.get(aggregator_name).__dict__, ) @@ -1621,12 +1625,12 @@ def get_resource_config_history( if resource_type not in RESOURCE_MAP: raise ResourceNotDiscoveredException(resource_type, resource_id) + # Always provide the backend this request arrived from. + backend_query_region = backend_region # Is the resource type global? - backend_query_region = ( - backend_region # Always provide the backend this request arrived from. - ) - if RESOURCE_MAP[resource_type].backends[self.account_id].get("global"): - backend_region = "global" + partition = get_partition(backend_region) + if RESOURCE_MAP[resource_type].backends[self.account_id].get(partition): + backend_region = partition # If the backend region isn't implemented then we won't find the item: if ( @@ -1638,7 +1642,10 @@ def get_resource_config_history( # Get the item: item = RESOURCE_MAP[resource_type].get_config_resource( - self.account_id, resource_id, backend_region=backend_query_region + account_id=self.account_id, + partition=self.partition, + resource_id=resource_id, + backend_region=backend_query_region, ) if not item: raise ResourceNotDiscoveredException(resource_type, resource_id) @@ -1670,17 +1677,17 @@ def batch_get_resource_config( # Not found so skip. continue - # Is the resource type global? config_backend_region = backend_region - backend_query_region = ( - backend_region # Always provide the backend this request arrived from. - ) + # Always provide the backend this request arrived from. + backend_query_region = backend_region + # Is the resource type global? + partition = get_partition(backend_region) if ( RESOURCE_MAP[resource["resourceType"]] .backends[self.account_id] - .get("global") + .get(partition) ): - config_backend_region = "global" + config_backend_region = partition # If the backend region isn't implemented then we won't find the item: if ( @@ -1693,7 +1700,8 @@ def batch_get_resource_config( # Get the item: item = RESOURCE_MAP[resource["resourceType"]].get_config_resource( self.account_id, - resource["resourceId"], + partition=self.partition, + resource_id=resource["resourceId"], backend_region=backend_query_region, ) if not item: @@ -1748,7 +1756,8 @@ def batch_get_aggregate_resource_config( # Get the item: item = RESOURCE_MAP[resource_type].get_config_resource( self.account_id, - resource_id, + partition=self.partition, + resource_id=resource_id, resource_name=resource_name, resource_region=resource_region, ) diff --git a/moto/config/responses.py b/moto/config/responses.py index d488133a5ce8..18d507b65f75 100644 --- a/moto/config/responses.py +++ b/moto/config/responses.py @@ -118,12 +118,11 @@ def stop_configuration_recorder(self) -> str: def list_discovered_resources(self) -> str: schema = self.config_backend.list_discovered_resources( - self._get_param("resourceType"), - self.region, - self._get_param("resourceIds"), - self._get_param("resourceName"), - self._get_param("limit"), - self._get_param("nextToken"), + resource_type=self._get_param("resourceType"), + resource_ids=self._get_param("resourceIds"), + resource_name=self._get_param("resourceName"), + limit=self._get_param("limit"), + next_token=self._get_param("nextToken"), ) return json.dumps(schema) diff --git a/moto/core/base_backend.py b/moto/core/base_backend.py index 1ed823bfd09a..62564f03eaa5 100644 --- a/moto/core/base_backend.py +++ b/moto/core/base_backend.py @@ -19,10 +19,11 @@ from boto3 import Session from moto.settings import allow_unknown_region, enable_iso_regions +from moto.utilities.utils import get_partition from .model_instances import model_data from .responses import TYPE_RESPONSE -from .utils import convert_regex_to_flask_path +from .utils import ISO_REGION_DOMAINS, convert_regex_to_flask_path if TYPE_CHECKING: from moto.core.common_models import BaseModel @@ -54,6 +55,7 @@ class BaseBackend: def __init__(self, region_name: str, account_id: str): self.region_name = region_name self.account_id = account_id + self.partition = get_partition(region_name) def reset(self) -> None: region_name = self.region_name @@ -85,14 +87,7 @@ def urls(self) -> Dict[str, Callable[[Any, str, Any], TYPE_RESPONSE]]: # type: # This extension ensures support for the China & ISO regions alt_dns_suffixes = {"cn": "amazonaws.com.cn"} if enable_iso_regions(): - alt_dns_suffixes.update( - { - "iso": "c2s.ic.gov", - "isob": "sc2s.sgov.gov", - "isoe": "cloud.adc-e.uk", - "isof": "csp.hci.ic.gov", - } - ) + alt_dns_suffixes.update(ISO_REGION_DOMAINS) for url_path, handler in unformatted_paths.items(): url = url_path.format(url_base) @@ -261,6 +256,8 @@ def reset(self) -> None: region_specific_backend.reset() def __contains__(self, region: str) -> bool: # type: ignore[override] + if region == "global": + region = "aws" return region in self.regions or region in self.keys() def __delitem__(self, key: str) -> None: @@ -276,6 +273,13 @@ def __setitem__(self, key: str, value: SERVICE_BACKEND) -> None: super().__setitem__(key, value) def __getitem__(self, region_name: str) -> SERVICE_BACKEND: + # Some services, like S3, used to be truly global - meaning one Backend serving all + # Now that we support partitions (AWS, AWS-CN, AWS-GOV, etc), there will be one backend per partition + # Because the concept of 'region' doesn't exist in a global service, we use the partition name to keep the backends separate + # We used to use the term 'global' in lieu of a region name, and users may still use this + # It should resolve to 'aws', to ensure consistency + if region_name == "global": + region_name = "aws" if region_name in self.keys(): return super().__getitem__(region_name) # Create the backend for a specific region diff --git a/moto/core/botocore_stubber.py b/moto/core/botocore_stubber.py index e3905dc5e052..929326168a11 100644 --- a/moto/core/botocore_stubber.py +++ b/moto/core/botocore_stubber.py @@ -67,7 +67,7 @@ def process_request(self, request: Any) -> Optional[TYPE_RESPONSE]: if "us-east-1" in backend_dict[DEFAULT_ACCOUNT_ID]: backend = backend_dict[DEFAULT_ACCOUNT_ID]["us-east-1"] else: - backend = backend_dict[DEFAULT_ACCOUNT_ID]["global"] + backend = backend_dict[DEFAULT_ACCOUNT_ID]["aws"] else: backend = backend_dict["global"] diff --git a/moto/core/common_models.py b/moto/core/common_models.py index d4e0af7657a4..13d4c1842adc 100644 --- a/moto/core/common_models.py +++ b/moto/core/common_models.py @@ -104,6 +104,7 @@ def __init__(self, backends: BackendDict[SERVICE_BACKEND]): def list_config_service_resources( self, account_id: str, + partition: str, resource_ids: Optional[List[str]], resource_name: Optional[str], limit: int, @@ -164,6 +165,7 @@ def list_config_service_resources( def get_config_resource( self, account_id: str, + partition: str, resource_id: str, resource_name: Optional[str] = None, backend_region: Optional[str] = None, @@ -200,5 +202,5 @@ def get_config_resource( class CloudWatchMetricProvider: @staticmethod @abstractmethod - def get_cloudwatch_metrics(account_id: str) -> Any: # type: ignore[misc] + def get_cloudwatch_metrics(account_id: str, region: str) -> Any: # type: ignore[misc] pass diff --git a/moto/core/responses.py b/moto/core/responses.py index f5e6b8bd9f57..bc4c8ecc267b 100644 --- a/moto/core/responses.py +++ b/moto/core/responses.py @@ -38,7 +38,7 @@ utcfromtimestamp, ) from moto.utilities.aws_headers import gen_amzn_requestid_long -from moto.utilities.utils import load_resource, load_resource_as_bytes +from moto.utilities.utils import get_partition, load_resource, load_resource_as_bytes log = logging.getLogger(__name__) @@ -208,7 +208,7 @@ def _authenticate_and_authorize_s3_action( self, bucket_name: Optional[str] = None, key_name: Optional[str] = None ) -> None: arn = f"{bucket_name or '*'}/{key_name}" if key_name else (bucket_name or "*") - resource = f"arn:aws:s3:::{arn}" + resource = f"arn:{get_partition(self.region)}:s3:::{arn}" # type: ignore[attr-defined] from moto.iam.access_control import S3IAMRequest @@ -423,6 +423,7 @@ def setup_class( self.data = querystring self.method = request.method self.region = self.get_region_from_url(request, full_url) + self.partition = get_partition(self.region) self.uri_match: Optional[re.Match[str]] = None self.headers = request.headers diff --git a/moto/core/utils.py b/moto/core/utils.py index 2a73db789c6f..ffea7a197bf7 100644 --- a/moto/core/utils.py +++ b/moto/core/utils.py @@ -393,12 +393,13 @@ def gzip_decompress(body: bytes) -> bytes: return decompress(body) -def get_partition_from_region(region_name: str) -> str: - # Very rough implementation - # In an ideal world we check `boto3.Session.get_partition_for_region`, but that is quite computationally heavy - if region_name.startswith("cn-"): - return "aws-cn" - return "aws" +ISO_REGION_DOMAINS = { + "iso": "c2s.ic.gov", + "isob": "sc2s.sgov.gov", + "isoe": "cloud.adc-e.uk", + "isof": "csp.hci.ic.gov", +} +ALT_DOMAIN_SUFFIXES = list(ISO_REGION_DOMAINS.values()) + ["amazonaws.com.cn"] def get_equivalent_url_in_aws_domain(url: str) -> Tuple[ParseResult, bool]: @@ -414,14 +415,7 @@ def get_equivalent_url_in_aws_domain(url: str) -> Tuple[ParseResult, bool]: # https://github.com/getmoto/moto/pull/6412 # Support ISO regions - iso_region_domains = [ - "amazonaws.com.cn", - "c2s.ic.gov", - "sc2s.sgov.gov", - "cloud.adc-e.uk", - "csp.hci.ic.gov", - ] - for domain in iso_region_domains: + for domain in ALT_DOMAIN_SUFFIXES: if host.endswith(domain): host = host.replace(domain, "amazonaws.com") diff --git a/moto/databrew/models.py b/moto/databrew/models.py index 825ff42f362d..4bf1d9a275bb 100644 --- a/moto/databrew/models.py +++ b/moto/databrew/models.py @@ -9,6 +9,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import camelcase_to_pascal, underscores_to_camelcase from moto.utilities.paginator import paginate +from moto.utilities.utils import get_partition from .exceptions import ( AlreadyExistsException, @@ -601,9 +602,7 @@ def __init__( @property def resource_arn(self) -> str: - return ( - f"arn:aws:databrew:{self.region_name}:{self.account_id}:dataset/{self.name}" - ) + return f"arn:{get_partition(self.region_name)}:databrew:{self.region_name}:{self.account_id}:dataset/{self.name}" def as_dict(self) -> Dict[str, Any]: return { @@ -667,7 +666,7 @@ def job_type(self) -> str: @property def resource_arn(self) -> str: - return f"arn:aws:databrew:{self.region_name}:{self.account_id}:job/{self.name}" + return f"arn:{get_partition(self.region_name)}:databrew:{self.region_name}:{self.account_id}:job/{self.name}" def as_dict(self) -> Dict[str, Any]: rtn_dict = { diff --git a/moto/datasync/models.py b/moto/datasync/models.py index 429802c9d15c..32b965f04282 100644 --- a/moto/datasync/models.py +++ b/moto/datasync/models.py @@ -3,6 +3,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel +from moto.utilities.utils import get_partition from .exceptions import InvalidRequestException @@ -21,7 +22,7 @@ def __init__( self.metadata = metadata self.typ = typ # Generate ARN - self.arn = f"arn:aws:datasync:{region_name}:111222333444:location/loc-{str(arn_counter).zfill(17)}" + self.arn = f"arn:{get_partition(region_name)}:datasync:{region_name}:111222333444:location/loc-{str(arn_counter).zfill(17)}" class Task(BaseModel): @@ -42,7 +43,7 @@ def __init__( self.status = "AVAILABLE" self.current_task_execution_arn: Optional[str] = None # Generate ARN - self.arn = f"arn:aws:datasync:{region_name}:111222333444:task/task-{str(arn_counter).zfill(17)}" + self.arn = f"arn:{get_partition(region_name)}:datasync:{region_name}:111222333444:task/task-{str(arn_counter).zfill(17)}" class TaskExecution(BaseModel): diff --git a/moto/dax/models.py b/moto/dax/models.py index d188ed8ac71c..f5e3e577e9c9 100644 --- a/moto/dax/models.py +++ b/moto/dax/models.py @@ -9,6 +9,7 @@ from moto.moto_api._internal.managed_state_model import ManagedState from moto.utilities.paginator import paginate from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ClusterNotFoundFault from .utils import PAGINATION_MODEL @@ -90,7 +91,9 @@ def __init__( # Set internal properties self.name = name self.description = description - self.arn = f"arn:aws:dax:{region}:{account_id}:cache/{self.name}" + self.arn = ( + f"arn:{get_partition(region)}:dax:{region}:{account_id}:cache/{self.name}" + ) self.node_type = node_type self.replication_factor = replication_factor self.cluster_hex = random.get_random_hex(6) diff --git a/moto/dms/models.py b/moto/dms/models.py index 13d31adfebc2..6cb77d373ee6 100644 --- a/moto/dms/models.py +++ b/moto/dms/models.py @@ -4,6 +4,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.utils import utcnow +from moto.utilities.utils import get_partition from .exceptions import ( InvalidResourceStateFault, @@ -119,7 +120,7 @@ def __init__( self.table_mappings = table_mappings self.replication_task_settings = replication_task_settings - self.arn = f"arn:aws:dms:{region_name}:{account_id}:task:{self.id}" + self.arn = f"arn:{get_partition(region_name)}:dms:{region_name}:{account_id}:task:{self.id}" self.status = "creating" self.creation_date = utcnow() diff --git a/moto/dynamodb/models/table.py b/moto/dynamodb/models/table.py index c309ff9252e8..e64f5eecb0f2 100644 --- a/moto/dynamodb/models/table.py +++ b/moto/dynamodb/models/table.py @@ -19,6 +19,7 @@ from moto.dynamodb.models.dynamo_type import DynamoType, Item from moto.dynamodb.models.utilities import dynamo_json_dump from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition RESULT_SIZE_LIMIT = 1000000 # DynamoDB has a 1MB size limit @@ -210,9 +211,7 @@ def add(self, old: Optional[Item], new: Optional[Item]) -> None: from moto.awslambda.utils import get_backend for arn, esm in self.table.lambda_event_source_mappings.items(): - region = arn[ - len("arn:aws:lambda:") : arn.index(":", len("arn:aws:lambda:")) - ] + region = arn.split(":")[3] result = get_backend(self.account_id, region).send_dynamodb_items( arn, self.items, esm.event_source_arn @@ -421,7 +420,7 @@ def delete_from_cloudformation_json( # type: ignore[misc] dynamodb_backends[account_id][region_name].delete_table(name=resource_name) def _generate_arn(self, name: str) -> str: - return f"arn:aws:dynamodb:{self.region_name}:{self.account_id}:table/{name}" + return f"arn:{get_partition(self.region_name)}:dynamodb:{self.region_name}:{self.account_id}:table/{name}" def set_stream_specification(self, streams: Optional[Dict[str, Any]]) -> None: self.stream_specification = streams @@ -1069,7 +1068,7 @@ def _make_identifier(self) -> str: @property def arn(self) -> str: - return f"arn:aws:dynamodb:{self.region_name}:{self.account_id}:table/{self.table.name}/backup/{self.identifier}" + return f"arn:{get_partition(self.region_name)}:dynamodb:{self.region_name}:{self.account_id}:table/{self.table.name}/backup/{self.identifier}" @property def details(self) -> Dict[str, Any]: # type: ignore[misc] diff --git a/moto/dynamodb/models/table_import.py b/moto/dynamodb/models/table_import.py index 905a70219efa..56f41c78249e 100644 --- a/moto/dynamodb/models/table_import.py +++ b/moto/dynamodb/models/table_import.py @@ -3,6 +3,7 @@ from uuid import uuid4 from moto.core.utils import gzip_decompress +from moto.utilities.utils import get_partition if TYPE_CHECKING: from moto.dynamodb.models import DynamoDBBackend @@ -25,7 +26,8 @@ def __init__( compression_type: Optional[str], ): super().__init__() - self.arn = f"arn:aws:dynamodb:{region_name}:{account_id}:table/{table_name}/import/{str(uuid4()).replace('-', '')}" + self.partition = get_partition(region_name) + self.arn = f"arn:{self.partition}:dynamodb:{region_name}:{account_id}:table/{table_name}/import/{str(uuid4()).replace('-', '')}" self.status = "IN_PROGRESS" self.account_id = account_id self.s3_source = s3_source @@ -42,9 +44,7 @@ def __init__( self.failure_code: Optional[str] = None self.failure_message: Optional[str] = None self.table: Optional["Table"] = None - self.table_arn = ( - f"arn:aws:dynamodb:{self.region_name}:{self.account_id}:table/{table_name}" - ) + self.table_arn = f"arn:{get_partition(self.region_name)}:dynamodb:{self.region_name}:{self.account_id}:table/{table_name}" self.processed_count = 0 self.processed_bytes = 0 @@ -57,7 +57,7 @@ def run(self) -> None: try: from moto.s3.models import s3_backends - s3_backend = s3_backends[self.account_id]["global"] + s3_backend = s3_backends[self.account_id][self.partition] bucket = s3_backend.buckets[s3_bucket_name] except KeyError: self.status = "FAILED" diff --git a/moto/dynamodb_v20111205/models.py b/moto/dynamodb_v20111205/models.py index bbf23868ecbe..cca562cdc9d3 100644 --- a/moto/dynamodb_v20111205/models.py +++ b/moto/dynamodb_v20111205/models.py @@ -5,6 +5,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.utils import unix_time, utcnow +from moto.utilities.utils import PARTITION_NAMES from .comparisons import get_comparison_func @@ -397,5 +398,5 @@ def update_item( DynamoDBBackend, "dynamodb_v20111205", use_boto3_regions=False, - additional_regions=["global"], + additional_regions=PARTITION_NAMES, ) diff --git a/moto/dynamodb_v20111205/responses.py b/moto/dynamodb_v20111205/responses.py index ca1586817277..dc2fb2ecaab9 100644 --- a/moto/dynamodb_v20111205/responses.py +++ b/moto/dynamodb_v20111205/responses.py @@ -44,7 +44,7 @@ def call_action(self) -> TYPE_RESPONSE: @property def backend(self) -> DynamoDBBackend: - return dynamodb_backends[self.current_account]["global"] + return dynamodb_backends[self.current_account][self.partition] def list_tables(self) -> str: body = self.body diff --git a/moto/ec2/exceptions.py b/moto/ec2/exceptions.py index 831e615bccad..06e923974a31 100644 --- a/moto/ec2/exceptions.py +++ b/moto/ec2/exceptions.py @@ -580,7 +580,7 @@ def __init__(self, tenancy: str): ) -class OperationNotPermitted(EC2ClientError): +class VPCCidrBlockAssociationError(EC2ClientError): def __init__(self, association_id: str): super().__init__( "OperationNotPermitted", @@ -588,6 +588,18 @@ def __init__(self, association_id: str): ) +class OperationNotPermitted(EC2ClientError): + def __init__(self, message: str): + super().__init__("OperationNotPermitted", message) + + +class LastEniDetachError(OperationNotPermitted): + def __init__(self) -> None: + super().__init__( + "The network interface at device index 0 and networkCard index 0 cannot be detached." + ) + + class InvalidAvailabilityZoneError(EC2ClientError): def __init__( self, availability_zone_value: Optional[str], valid_availability_zones: str diff --git a/moto/ec2/models/elastic_network_interfaces.py b/moto/ec2/models/elastic_network_interfaces.py index c770c580c03e..a3a73364442a 100644 --- a/moto/ec2/models/elastic_network_interfaces.py +++ b/moto/ec2/models/elastic_network_interfaces.py @@ -2,7 +2,11 @@ from moto.core.common_models import CloudFormationModel -from ..exceptions import InvalidNetworkAttachmentIdError, InvalidNetworkInterfaceIdError +from ..exceptions import ( + InvalidNetworkAttachmentIdError, + InvalidNetworkInterfaceIdError, + LastEniDetachError, +) from .core import TaggedEC2Resource from .security_groups import SecurityGroup @@ -331,6 +335,8 @@ def attach_network_interface( def detach_network_interface(self, attachment_id: str) -> None: for eni in self.enis.values(): if eni.attachment_id == attachment_id: + if eni.instance and len(eni.instance.nics) == 1: + raise LastEniDetachError eni.instance.detach_eni(eni) # type: ignore return raise InvalidNetworkAttachmentIdError(attachment_id) diff --git a/moto/ec2/models/flow_logs.py b/moto/ec2/models/flow_logs.py index 810a200c7a99..923def7bb2c0 100644 --- a/moto/ec2/models/flow_logs.py +++ b/moto/ec2/models/flow_logs.py @@ -228,7 +228,7 @@ def create_flow_logs( arn = log_destination.split(":", 5)[5] try: - s3_backends[self.account_id]["global"].get_bucket(arn) # type: ignore[attr-defined] + s3_backends[self.account_id][self.partition].get_bucket(arn) # type: ignore[attr-defined] except MissingBucket: # Instead of creating FlowLog report # the unsuccessful status for the diff --git a/moto/ec2/models/iam_instance_profile.py b/moto/ec2/models/iam_instance_profile.py index 60f7f6d1195d..4ced625bfb19 100644 --- a/moto/ec2/models/iam_instance_profile.py +++ b/moto/ec2/models/iam_instance_profile.py @@ -51,8 +51,9 @@ def associate_iam_instance_profile( instance_profile = filter_iam_instance_profiles( self.account_id, # type: ignore[attr-defined] - iam_instance_profile_arn, - iam_instance_profile_name, + partition=self.partition, # type: ignore[attr-defined] + iam_instance_profile_arn=iam_instance_profile_arn, + iam_instance_profile_name=iam_instance_profile_name, ) if instance_id in self.iam_instance_profile_associations.keys(): @@ -128,8 +129,9 @@ def replace_iam_instance_profile_association( ) -> IamInstanceProfileAssociation: instance_profile = filter_iam_instance_profiles( self.account_id, # type: ignore[attr-defined] - iam_instance_profile_arn, - iam_instance_profile_name, + partition=self.partition, # type: ignore[attr-defined] + iam_instance_profile_arn=iam_instance_profile_arn, + iam_instance_profile_name=iam_instance_profile_name, ) iam_instance_profile_association = None diff --git a/moto/ec2/models/managed_prefixes.py b/moto/ec2/models/managed_prefixes.py index 8d50e3713693..67d85de76dad 100644 --- a/moto/ec2/models/managed_prefixes.py +++ b/moto/ec2/models/managed_prefixes.py @@ -1,6 +1,6 @@ from typing import Any, Dict, List, Optional -from moto.utilities.utils import filter_resources +from moto.utilities.utils import filter_resources, get_partition from ..utils import describe_tag_filter, random_managed_prefix_list_id from .core import TaggedEC2Resource @@ -33,7 +33,9 @@ def __init__( self.delete_counter = 1 def arn(self, region: str, owner_id: str) -> str: - return f"arn:aws:ec2:{region}:{owner_id}:prefix-list/{self.id}" + return ( + f"arn:{get_partition(region)}:ec2:{region}:{owner_id}:prefix-list/{self.id}" + ) @property def owner_id(self) -> str: diff --git a/moto/ec2/models/transit_gateway.py b/moto/ec2/models/transit_gateway.py index e247d13ff15f..cdf34b5b805b 100644 --- a/moto/ec2/models/transit_gateway.py +++ b/moto/ec2/models/transit_gateway.py @@ -52,7 +52,7 @@ def owner_id(self) -> str: @property def arn(self) -> str: - return f"arn:aws:ec2:{self.ec2_backend.region_name}:{self.ec2_backend.account_id}:transit-gateway/{self.id}" + return f"arn:{self.ec2_backend.partition}:ec2:{self.ec2_backend.region_name}:{self.ec2_backend.account_id}:transit-gateway/{self.id}" @staticmethod def cloudformation_name_type() -> str: diff --git a/moto/ec2/models/vpcs.py b/moto/ec2/models/vpcs.py index 614c9ea90bdd..a5f3c113f2a3 100644 --- a/moto/ec2/models/vpcs.py +++ b/moto/ec2/models/vpcs.py @@ -8,6 +8,7 @@ from moto.core.base_backend import BaseBackend from moto.core.common_models import CloudFormationModel +from moto.utilities.utils import get_partition from ..exceptions import ( CidrLimitExceeded, @@ -22,8 +23,8 @@ InvalidVpcEndPointIdError, InvalidVPCIdError, InvalidVPCRangeError, - OperationNotPermitted, UnsupportedTenancy, + VPCCidrBlockAssociationError, ) from ..utils import ( create_dns_entries, @@ -675,7 +676,7 @@ def disassociate_vpc_cidr_block(self, association_id: str) -> Dict[str, Any]: if self.cidr_block == self.cidr_block_association_set.get( association_id, {} ).get("cidr_block"): - raise OperationNotPermitted(association_id) + raise VPCCidrBlockAssociationError(association_id) entry = response = self.cidr_block_association_set.get(association_id, {}) if entry: @@ -1034,8 +1035,9 @@ def _collect_default_endpoint_services( if service: DEFAULT_VPC_ENDPOINT_SERVICES[region].extend(service) - if "global" in account_backend: - service = account_backend["global"].default_vpc_endpoint_service( + partition = get_partition(region) + if partition in account_backend: + service = account_backend[partition].default_vpc_endpoint_service( region, zones ) if service: diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json index 84957962a5b9..9e2890c22927 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-south-1.json @@ -451,6 +451,26 @@ "InstanceType": "c7gd.xlarge", "Location": "aps1-az1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "aps1-az1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "aps1-az1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "aps1-az1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "aps1-az1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "aps1-az1" + }, { "InstanceType": "c7i.12xlarge", "Location": "aps1-az1" @@ -2479,6 +2499,26 @@ "InstanceType": "c7gd.xlarge", "Location": "aps1-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "aps1-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "aps1-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "aps1-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "aps1-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "aps1-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "aps1-az2" @@ -4275,6 +4315,26 @@ "InstanceType": "c7gd.xlarge", "Location": "aps1-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "aps1-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "aps1-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "aps1-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "aps1-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "aps1-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "aps1-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-1.json index b5df93fd9981..4ecede7d7eca 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ap-southeast-1.json @@ -3163,6 +3163,26 @@ "InstanceType": "c7gd.xlarge", "Location": "apse1-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "apse1-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "apse1-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "apse1-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "apse1-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "apse1-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "apse1-az2" @@ -5743,6 +5763,26 @@ "InstanceType": "c7gd.xlarge", "Location": "apse1-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "apse1-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "apse1-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "apse1-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "apse1-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "apse1-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "apse1-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ca-central-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ca-central-1.json index 49ac826f3694..93e18dcaccfd 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/ca-central-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/ca-central-1.json @@ -415,6 +415,26 @@ "InstanceType": "c7g.xlarge", "Location": "cac1-az1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "cac1-az1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "cac1-az1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "cac1-az1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "cac1-az1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "cac1-az1" + }, { "InstanceType": "c7i.12xlarge", "Location": "cac1-az1" @@ -2263,6 +2283,26 @@ "InstanceType": "c7g.xlarge", "Location": "cac1-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "cac1-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "cac1-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "cac1-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "cac1-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "cac1-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "cac1-az2" @@ -4107,6 +4147,26 @@ "InstanceType": "c7g.xlarge", "Location": "cac1-az4" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "cac1-az4" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "cac1-az4" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "cac1-az4" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "cac1-az4" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "cac1-az4" + }, { "InstanceType": "c7i.12xlarge", "Location": "cac1-az4" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json index cc742daa6bb5..12493e70a1db 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-north-1.json @@ -435,6 +435,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eun1-az1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eun1-az1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eun1-az1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eun1-az1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eun1-az1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eun1-az1" + }, { "InstanceType": "c7i.12xlarge", "Location": "eun1-az1" @@ -2123,6 +2143,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eun1-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eun1-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eun1-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eun1-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eun1-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eun1-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "eun1-az2" @@ -3919,6 +3959,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eun1-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eun1-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eun1-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eun1-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eun1-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eun1-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "eun1-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-south-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-south-2.json index 9762f30f6eb2..42bb04c4e2f2 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-south-2.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-south-2.json @@ -267,6 +267,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eus2-az1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eus2-az1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eus2-az1" + }, { "InstanceType": "c7i.12xlarge", "Location": "eus2-az1" @@ -615,6 +635,54 @@ "InstanceType": "m6in.xlarge", "Location": "eus2-az1" }, + { + "InstanceType": "m7a.12xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.16xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.24xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.2xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.32xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.48xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.4xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.8xlarge", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.large", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.medium", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.metal-48xl", + "Location": "eus2-az1" + }, + { + "InstanceType": "m7a.xlarge", + "Location": "eus2-az1" + }, { "InstanceType": "m7g.12xlarge", "Location": "eus2-az1" @@ -1403,6 +1471,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eus2-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eus2-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eus2-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eus2-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eus2-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eus2-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "eus2-az2" @@ -2563,6 +2651,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eus2-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eus2-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eus2-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eus2-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eus2-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eus2-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "eus2-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-1.json index ba2ca090ff1e..410148ef5ee4 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-1.json @@ -659,6 +659,26 @@ "InstanceType": "c7gn.xlarge", "Location": "euw1-az1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "euw1-az1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "euw1-az1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "euw1-az1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "euw1-az1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "euw1-az1" + }, { "InstanceType": "c7i.12xlarge", "Location": "euw1-az1" @@ -3647,6 +3667,26 @@ "InstanceType": "c7gn.xlarge", "Location": "euw1-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "euw1-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "euw1-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "euw1-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "euw1-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "euw1-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "euw1-az2" @@ -6615,6 +6655,26 @@ "InstanceType": "c7gn.xlarge", "Location": "euw1-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "euw1-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "euw1-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "euw1-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "euw1-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "euw1-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "euw1-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-2.json index ff493d38afc0..559164292b46 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-2.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-2.json @@ -455,6 +455,26 @@ "InstanceType": "c7g.xlarge", "Location": "euw2-az1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "euw2-az1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "euw2-az1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "euw2-az1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "euw2-az1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "euw2-az1" + }, { "InstanceType": "c7i.12xlarge", "Location": "euw2-az1" @@ -2299,6 +2319,26 @@ "InstanceType": "c7g.xlarge", "Location": "euw2-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "euw2-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "euw2-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "euw2-az2" @@ -2975,6 +3015,46 @@ "InstanceType": "m6i.xlarge", "Location": "euw2-az2" }, + { + "InstanceType": "m6id.12xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.16xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.24xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.2xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.32xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.4xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.8xlarge", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.large", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.metal", + "Location": "euw2-az2" + }, + { + "InstanceType": "m6id.xlarge", + "Location": "euw2-az2" + }, { "InstanceType": "m7g.12xlarge", "Location": "euw2-az2" @@ -4167,6 +4247,26 @@ "InstanceType": "c7g.xlarge", "Location": "euw2-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "euw2-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "euw2-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "euw2-az3" @@ -4775,6 +4875,46 @@ "InstanceType": "m6i.xlarge", "Location": "euw2-az3" }, + { + "InstanceType": "m6id.12xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.16xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.24xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.2xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.32xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.4xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.8xlarge", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.large", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.metal", + "Location": "euw2-az3" + }, + { + "InstanceType": "m6id.xlarge", + "Location": "euw2-az3" + }, { "InstanceType": "m7g.12xlarge", "Location": "euw2-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-3.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-3.json index aaf8e810da34..f4a3ade5c4ab 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-3.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/eu-west-3.json @@ -1695,6 +1695,26 @@ "InstanceType": "c6in.xlarge", "Location": "euw3-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "euw3-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "euw3-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "euw3-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "euw3-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "euw3-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "euw3-az2" @@ -3163,6 +3183,26 @@ "InstanceType": "c6in.xlarge", "Location": "euw3-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "euw3-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "euw3-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "euw3-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "euw3-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "euw3-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "euw3-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json index c37fc6648534..5c36eb08ac4c 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/sa-east-1.json @@ -439,6 +439,26 @@ "InstanceType": "c6in.xlarge", "Location": "sae1-az1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "sae1-az1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "sae1-az1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "sae1-az1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "sae1-az1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "sae1-az1" + }, { "InstanceType": "c7i.12xlarge", "Location": "sae1-az1" @@ -1123,6 +1143,42 @@ "InstanceType": "m7g.xlarge", "Location": "sae1-az1" }, + { + "InstanceType": "m7gd.12xlarge", + "Location": "sae1-az1" + }, + { + "InstanceType": "m7gd.16xlarge", + "Location": "sae1-az1" + }, + { + "InstanceType": "m7gd.2xlarge", + "Location": "sae1-az1" + }, + { + "InstanceType": "m7gd.4xlarge", + "Location": "sae1-az1" + }, + { + "InstanceType": "m7gd.8xlarge", + "Location": "sae1-az1" + }, + { + "InstanceType": "m7gd.large", + "Location": "sae1-az1" + }, + { + "InstanceType": "m7gd.medium", + "Location": "sae1-az1" + }, + { + "InstanceType": "m7gd.metal", + "Location": "sae1-az1" + }, + { + "InstanceType": "m7gd.xlarge", + "Location": "sae1-az1" + }, { "InstanceType": "m7i-flex.2xlarge", "Location": "sae1-az1" @@ -2207,6 +2263,26 @@ "InstanceType": "c6in.xlarge", "Location": "sae1-az2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "sae1-az2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "sae1-az2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "sae1-az2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "sae1-az2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "sae1-az2" + }, { "InstanceType": "c7i.12xlarge", "Location": "sae1-az2" @@ -2747,6 +2823,42 @@ "InstanceType": "m7g.xlarge", "Location": "sae1-az2" }, + { + "InstanceType": "m7gd.12xlarge", + "Location": "sae1-az2" + }, + { + "InstanceType": "m7gd.16xlarge", + "Location": "sae1-az2" + }, + { + "InstanceType": "m7gd.2xlarge", + "Location": "sae1-az2" + }, + { + "InstanceType": "m7gd.4xlarge", + "Location": "sae1-az2" + }, + { + "InstanceType": "m7gd.8xlarge", + "Location": "sae1-az2" + }, + { + "InstanceType": "m7gd.large", + "Location": "sae1-az2" + }, + { + "InstanceType": "m7gd.medium", + "Location": "sae1-az2" + }, + { + "InstanceType": "m7gd.metal", + "Location": "sae1-az2" + }, + { + "InstanceType": "m7gd.xlarge", + "Location": "sae1-az2" + }, { "InstanceType": "m7i-flex.2xlarge", "Location": "sae1-az2" @@ -3635,6 +3747,26 @@ "InstanceType": "c6in.xlarge", "Location": "sae1-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "sae1-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "sae1-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "sae1-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "sae1-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "sae1-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "sae1-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-1.json index 79a385da7c9d..f8a452b83b1c 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-east-1.json @@ -451,6 +451,54 @@ "InstanceType": "c6in.xlarge", "Location": "use1-az1" }, + { + "InstanceType": "c7a.12xlarge", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.16xlarge", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.24xlarge", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.2xlarge", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.32xlarge", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.48xlarge", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.4xlarge", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.8xlarge", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.large", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.medium", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.metal-48xl", + "Location": "use1-az1" + }, + { + "InstanceType": "c7a.xlarge", + "Location": "use1-az1" + }, { "InstanceType": "c7g.12xlarge", "Location": "use1-az1" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-1.json index eef46a553403..856d28e6e66c 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-1.json @@ -479,6 +479,26 @@ "InstanceType": "c7gd.xlarge", "Location": "usw1-az1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "usw1-az1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "usw1-az1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "usw1-az1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "usw1-az1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "usw1-az1" + }, { "InstanceType": "c7i.12xlarge", "Location": "usw1-az1" @@ -2475,6 +2495,26 @@ "InstanceType": "c7gd.xlarge", "Location": "usw1-az3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "usw1-az3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "usw1-az3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "usw1-az3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "usw1-az3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "usw1-az3" + }, { "InstanceType": "c7i.12xlarge", "Location": "usw1-az3" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-2.json index ded3e9bc1d73..adf3d067071a 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-2.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone-id/us-west-2.json @@ -3567,6 +3567,54 @@ "InstanceType": "c6in.xlarge", "Location": "usw2-az2" }, + { + "InstanceType": "c7a.12xlarge", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.16xlarge", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.24xlarge", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.2xlarge", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.32xlarge", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.48xlarge", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.4xlarge", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.8xlarge", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.large", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.medium", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.metal-48xl", + "Location": "usw2-az2" + }, + { + "InstanceType": "c7a.xlarge", + "Location": "usw2-az2" + }, { "InstanceType": "c7g.12xlarge", "Location": "usw2-az2" @@ -10255,6 +10303,54 @@ "InstanceType": "m6in.xlarge", "Location": "usw2-az4" }, + { + "InstanceType": "m7a.12xlarge", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.16xlarge", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.24xlarge", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.2xlarge", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.32xlarge", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.48xlarge", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.4xlarge", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.8xlarge", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.large", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.medium", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.metal-48xl", + "Location": "usw2-az4" + }, + { + "InstanceType": "m7a.xlarge", + "Location": "usw2-az4" + }, { "InstanceType": "m7g.12xlarge", "Location": "usw2-az4" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json index a730dc8e71ad..161cb3bb15ec 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-south-1.json @@ -451,6 +451,26 @@ "InstanceType": "c7gd.xlarge", "Location": "ap-south-1a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ap-south-1a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ap-south-1a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ap-south-1a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ap-south-1a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ap-south-1a" + }, { "InstanceType": "c7i.12xlarge", "Location": "ap-south-1a" @@ -2499,6 +2519,26 @@ "InstanceType": "c7gd.xlarge", "Location": "ap-south-1b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ap-south-1b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ap-south-1b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ap-south-1b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ap-south-1b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ap-south-1b" + }, { "InstanceType": "c7i.12xlarge", "Location": "ap-south-1b" @@ -4503,6 +4543,26 @@ "InstanceType": "c7gd.xlarge", "Location": "ap-south-1c" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ap-south-1c" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ap-south-1c" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ap-south-1c" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ap-south-1c" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ap-south-1c" + }, { "InstanceType": "c7i.12xlarge", "Location": "ap-south-1c" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-1.json index c30a8a61dd52..053601d43c6d 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ap-southeast-1.json @@ -575,6 +575,26 @@ "InstanceType": "c7gd.xlarge", "Location": "ap-southeast-1a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ap-southeast-1a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ap-southeast-1a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ap-southeast-1a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ap-southeast-1a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ap-southeast-1a" + }, { "InstanceType": "c7i.12xlarge", "Location": "ap-southeast-1a" @@ -5743,6 +5763,26 @@ "InstanceType": "c7gd.xlarge", "Location": "ap-southeast-1c" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ap-southeast-1c" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ap-southeast-1c" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ap-southeast-1c" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ap-southeast-1c" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ap-southeast-1c" + }, { "InstanceType": "c7i.12xlarge", "Location": "ap-southeast-1c" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/ca-central-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/ca-central-1.json index 8d6535e97a9c..a509696a147e 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/ca-central-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/ca-central-1.json @@ -415,6 +415,26 @@ "InstanceType": "c7g.xlarge", "Location": "ca-central-1a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ca-central-1a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ca-central-1a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ca-central-1a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ca-central-1a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ca-central-1a" + }, { "InstanceType": "c7i.12xlarge", "Location": "ca-central-1a" @@ -2263,6 +2283,26 @@ "InstanceType": "c7g.xlarge", "Location": "ca-central-1b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ca-central-1b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ca-central-1b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ca-central-1b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ca-central-1b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ca-central-1b" + }, { "InstanceType": "c7i.12xlarge", "Location": "ca-central-1b" @@ -4107,6 +4147,26 @@ "InstanceType": "c7g.xlarge", "Location": "ca-central-1d" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ca-central-1d" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ca-central-1d" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ca-central-1d" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ca-central-1d" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ca-central-1d" + }, { "InstanceType": "c7i.12xlarge", "Location": "ca-central-1d" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json index 1d5f0e08ed53..a2385e043703 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-north-1.json @@ -435,6 +435,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eu-north-1a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-north-1a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-north-1a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-north-1a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-north-1a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-north-1a" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-north-1a" @@ -2123,6 +2143,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eu-north-1b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-north-1b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-north-1b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-north-1b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-north-1b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-north-1b" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-north-1b" @@ -3919,6 +3959,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eu-north-1c" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-north-1c" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-north-1c" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-north-1c" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-north-1c" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-north-1c" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-north-1c" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-south-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-south-2.json index a18555a3dd3b..b7dcd173d99f 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-south-2.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-south-2.json @@ -267,6 +267,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eu-south-2a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-south-2a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-south-2a" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-south-2a" @@ -615,6 +635,54 @@ "InstanceType": "m6in.xlarge", "Location": "eu-south-2a" }, + { + "InstanceType": "m7a.12xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.16xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.24xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.2xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.32xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.48xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.4xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.8xlarge", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.large", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.medium", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.metal-48xl", + "Location": "eu-south-2a" + }, + { + "InstanceType": "m7a.xlarge", + "Location": "eu-south-2a" + }, { "InstanceType": "m7g.12xlarge", "Location": "eu-south-2a" @@ -1403,6 +1471,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eu-south-2b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-south-2b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-south-2b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-south-2b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-south-2b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-south-2b" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-south-2b" @@ -2563,6 +2651,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eu-south-2c" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-south-2c" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-south-2c" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-south-2c" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-south-2c" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-south-2c" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-south-2c" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-1.json index d23c591fda4d..66fde0d48183 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-1.json @@ -659,6 +659,26 @@ "InstanceType": "c7gn.xlarge", "Location": "eu-west-1a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-1a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-1a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-1a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-1a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-1a" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-1a" @@ -3647,6 +3667,26 @@ "InstanceType": "c7gn.xlarge", "Location": "eu-west-1b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-1b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-1b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-1b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-1b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-1b" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-1b" @@ -6615,6 +6655,26 @@ "InstanceType": "c7gn.xlarge", "Location": "eu-west-1c" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-1c" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-1c" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-1c" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-1c" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-1c" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-1c" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-2.json index c1ba664d32ad..e54ea778fd7e 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-2.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-2.json @@ -455,6 +455,26 @@ "InstanceType": "c7g.xlarge", "Location": "eu-west-2a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-2a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-2a" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-2a" @@ -1131,6 +1151,46 @@ "InstanceType": "m6i.xlarge", "Location": "eu-west-2a" }, + { + "InstanceType": "m6id.12xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.16xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.24xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.2xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.32xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.4xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.8xlarge", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.large", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.metal", + "Location": "eu-west-2a" + }, + { + "InstanceType": "m6id.xlarge", + "Location": "eu-west-2a" + }, { "InstanceType": "m7g.12xlarge", "Location": "eu-west-2a" @@ -2323,6 +2383,26 @@ "InstanceType": "c7g.xlarge", "Location": "eu-west-2b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-2b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-2b" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-2b" @@ -2931,6 +3011,46 @@ "InstanceType": "m6i.xlarge", "Location": "eu-west-2b" }, + { + "InstanceType": "m6id.12xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.16xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.24xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.2xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.32xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.4xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.8xlarge", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.large", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.metal", + "Location": "eu-west-2b" + }, + { + "InstanceType": "m6id.xlarge", + "Location": "eu-west-2b" + }, { "InstanceType": "m7g.12xlarge", "Location": "eu-west-2b" @@ -4135,6 +4255,26 @@ "InstanceType": "c7g.xlarge", "Location": "eu-west-2c" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-2c" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-2c" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-2c" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-2c" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-2c" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-2c" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-3.json b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-3.json index 1bcbd49887c0..208c446ca115 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-3.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/eu-west-3.json @@ -1695,6 +1695,26 @@ "InstanceType": "c6in.xlarge", "Location": "eu-west-3b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-3b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-3b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-3b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-3b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-3b" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-3b" @@ -3163,6 +3183,26 @@ "InstanceType": "c6in.xlarge", "Location": "eu-west-3c" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-3c" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-3c" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-3c" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-3c" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-3c" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-3c" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json index c61d1d7b7f85..85540da41641 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/sa-east-1.json @@ -439,6 +439,26 @@ "InstanceType": "c6in.xlarge", "Location": "sa-east-1a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "sa-east-1a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "sa-east-1a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "sa-east-1a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "sa-east-1a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "sa-east-1a" + }, { "InstanceType": "c7i.12xlarge", "Location": "sa-east-1a" @@ -1123,6 +1143,42 @@ "InstanceType": "m7g.xlarge", "Location": "sa-east-1a" }, + { + "InstanceType": "m7gd.12xlarge", + "Location": "sa-east-1a" + }, + { + "InstanceType": "m7gd.16xlarge", + "Location": "sa-east-1a" + }, + { + "InstanceType": "m7gd.2xlarge", + "Location": "sa-east-1a" + }, + { + "InstanceType": "m7gd.4xlarge", + "Location": "sa-east-1a" + }, + { + "InstanceType": "m7gd.8xlarge", + "Location": "sa-east-1a" + }, + { + "InstanceType": "m7gd.large", + "Location": "sa-east-1a" + }, + { + "InstanceType": "m7gd.medium", + "Location": "sa-east-1a" + }, + { + "InstanceType": "m7gd.metal", + "Location": "sa-east-1a" + }, + { + "InstanceType": "m7gd.xlarge", + "Location": "sa-east-1a" + }, { "InstanceType": "m7i-flex.2xlarge", "Location": "sa-east-1a" @@ -2207,6 +2263,26 @@ "InstanceType": "c6in.xlarge", "Location": "sa-east-1b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "sa-east-1b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "sa-east-1b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "sa-east-1b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "sa-east-1b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "sa-east-1b" + }, { "InstanceType": "c7i.12xlarge", "Location": "sa-east-1b" @@ -2747,6 +2823,42 @@ "InstanceType": "m7g.xlarge", "Location": "sa-east-1b" }, + { + "InstanceType": "m7gd.12xlarge", + "Location": "sa-east-1b" + }, + { + "InstanceType": "m7gd.16xlarge", + "Location": "sa-east-1b" + }, + { + "InstanceType": "m7gd.2xlarge", + "Location": "sa-east-1b" + }, + { + "InstanceType": "m7gd.4xlarge", + "Location": "sa-east-1b" + }, + { + "InstanceType": "m7gd.8xlarge", + "Location": "sa-east-1b" + }, + { + "InstanceType": "m7gd.large", + "Location": "sa-east-1b" + }, + { + "InstanceType": "m7gd.medium", + "Location": "sa-east-1b" + }, + { + "InstanceType": "m7gd.metal", + "Location": "sa-east-1b" + }, + { + "InstanceType": "m7gd.xlarge", + "Location": "sa-east-1b" + }, { "InstanceType": "m7i-flex.2xlarge", "Location": "sa-east-1b" @@ -3635,6 +3747,26 @@ "InstanceType": "c6in.xlarge", "Location": "sa-east-1c" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "sa-east-1c" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "sa-east-1c" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "sa-east-1c" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "sa-east-1c" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "sa-east-1c" + }, { "InstanceType": "c7i.12xlarge", "Location": "sa-east-1c" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-1.json index 37f639ac9ff2..fe062731c072 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/us-east-1.json @@ -451,6 +451,54 @@ "InstanceType": "c6in.xlarge", "Location": "us-east-1a" }, + { + "InstanceType": "c7a.12xlarge", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.16xlarge", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.24xlarge", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.2xlarge", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.32xlarge", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.48xlarge", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.4xlarge", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.8xlarge", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.large", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.medium", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.metal-48xl", + "Location": "us-east-1a" + }, + { + "InstanceType": "c7a.xlarge", + "Location": "us-east-1a" + }, { "InstanceType": "c7g.12xlarge", "Location": "us-east-1a" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-1.json b/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-1.json index 21ddbda08191..7b1de2a15454 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-1.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-1.json @@ -479,6 +479,26 @@ "InstanceType": "c7gd.xlarge", "Location": "us-west-1a" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "us-west-1a" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "us-west-1a" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "us-west-1a" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "us-west-1a" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "us-west-1a" + }, { "InstanceType": "c7i.12xlarge", "Location": "us-west-1a" @@ -2475,6 +2495,26 @@ "InstanceType": "c7gd.xlarge", "Location": "us-west-1b" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "us-west-1b" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "us-west-1b" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "us-west-1b" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "us-west-1b" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "us-west-1b" + }, { "InstanceType": "c7i.12xlarge", "Location": "us-west-1b" diff --git a/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-2.json b/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-2.json index abfb5ba7c8de..052ce59badf0 100644 --- a/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-2.json +++ b/moto/ec2/resources/instance_type_offerings/availability-zone/us-west-2.json @@ -3567,6 +3567,54 @@ "InstanceType": "c6in.xlarge", "Location": "us-west-2b" }, + { + "InstanceType": "c7a.12xlarge", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.16xlarge", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.24xlarge", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.2xlarge", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.32xlarge", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.48xlarge", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.4xlarge", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.8xlarge", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.large", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.medium", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.metal-48xl", + "Location": "us-west-2b" + }, + { + "InstanceType": "c7a.xlarge", + "Location": "us-west-2b" + }, { "InstanceType": "c7g.12xlarge", "Location": "us-west-2b" @@ -10255,6 +10303,54 @@ "InstanceType": "m6in.xlarge", "Location": "us-west-2d" }, + { + "InstanceType": "m7a.12xlarge", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.16xlarge", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.24xlarge", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.2xlarge", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.32xlarge", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.48xlarge", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.4xlarge", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.8xlarge", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.large", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.medium", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.metal-48xl", + "Location": "us-west-2d" + }, + { + "InstanceType": "m7a.xlarge", + "Location": "us-west-2d" + }, { "InstanceType": "m7g.12xlarge", "Location": "us-west-2d" diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json b/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json index 4ba3d1637133..6c4c97c17195 100644 --- a/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json +++ b/moto/ec2/resources/instance_type_offerings/region/ap-south-1.json @@ -475,6 +475,26 @@ "InstanceType": "c7gd.xlarge", "Location": "ap-south-1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ap-south-1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ap-south-1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ap-south-1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ap-south-1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ap-south-1" + }, { "InstanceType": "c7i.12xlarge", "Location": "ap-south-1" diff --git a/moto/ec2/resources/instance_type_offerings/region/ap-southeast-1.json b/moto/ec2/resources/instance_type_offerings/region/ap-southeast-1.json index 81e0e6e48114..5363f5eb225a 100644 --- a/moto/ec2/resources/instance_type_offerings/region/ap-southeast-1.json +++ b/moto/ec2/resources/instance_type_offerings/region/ap-southeast-1.json @@ -575,6 +575,26 @@ "InstanceType": "c7gd.xlarge", "Location": "ap-southeast-1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ap-southeast-1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ap-southeast-1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ap-southeast-1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ap-southeast-1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ap-southeast-1" + }, { "InstanceType": "c7i.12xlarge", "Location": "ap-southeast-1" diff --git a/moto/ec2/resources/instance_type_offerings/region/ca-central-1.json b/moto/ec2/resources/instance_type_offerings/region/ca-central-1.json index cd24aa2e10c2..4cd7c5f96c9a 100644 --- a/moto/ec2/resources/instance_type_offerings/region/ca-central-1.json +++ b/moto/ec2/resources/instance_type_offerings/region/ca-central-1.json @@ -415,6 +415,26 @@ "InstanceType": "c7g.xlarge", "Location": "ca-central-1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "ca-central-1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "ca-central-1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "ca-central-1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "ca-central-1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "ca-central-1" + }, { "InstanceType": "c7i.12xlarge", "Location": "ca-central-1" diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-north-1.json b/moto/ec2/resources/instance_type_offerings/region/eu-north-1.json index 0305cfaab416..fbd5d4d13893 100644 --- a/moto/ec2/resources/instance_type_offerings/region/eu-north-1.json +++ b/moto/ec2/resources/instance_type_offerings/region/eu-north-1.json @@ -435,6 +435,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eu-north-1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-north-1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-north-1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-north-1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-north-1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-north-1" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-north-1" diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-south-2.json b/moto/ec2/resources/instance_type_offerings/region/eu-south-2.json index e9565299606c..6ff6b11fc48f 100644 --- a/moto/ec2/resources/instance_type_offerings/region/eu-south-2.json +++ b/moto/ec2/resources/instance_type_offerings/region/eu-south-2.json @@ -267,6 +267,26 @@ "InstanceType": "c7gd.xlarge", "Location": "eu-south-2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-south-2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-south-2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-south-2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-south-2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-south-2" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-south-2" diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-west-1.json b/moto/ec2/resources/instance_type_offerings/region/eu-west-1.json index 522813c20455..ef480fd5dd78 100644 --- a/moto/ec2/resources/instance_type_offerings/region/eu-west-1.json +++ b/moto/ec2/resources/instance_type_offerings/region/eu-west-1.json @@ -659,6 +659,26 @@ "InstanceType": "c7gn.xlarge", "Location": "eu-west-1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-1" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-1" diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-west-2.json b/moto/ec2/resources/instance_type_offerings/region/eu-west-2.json index cf8fe2dca1cd..61892a647683 100644 --- a/moto/ec2/resources/instance_type_offerings/region/eu-west-2.json +++ b/moto/ec2/resources/instance_type_offerings/region/eu-west-2.json @@ -455,6 +455,26 @@ "InstanceType": "c7g.xlarge", "Location": "eu-west-2" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-2" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-2" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-2" @@ -1131,6 +1151,46 @@ "InstanceType": "m6i.xlarge", "Location": "eu-west-2" }, + { + "InstanceType": "m6id.12xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.16xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.24xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.2xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.32xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.4xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.8xlarge", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.large", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.metal", + "Location": "eu-west-2" + }, + { + "InstanceType": "m6id.xlarge", + "Location": "eu-west-2" + }, { "InstanceType": "m7g.12xlarge", "Location": "eu-west-2" diff --git a/moto/ec2/resources/instance_type_offerings/region/eu-west-3.json b/moto/ec2/resources/instance_type_offerings/region/eu-west-3.json index 7fe32be18a88..56aba0f8bff5 100644 --- a/moto/ec2/resources/instance_type_offerings/region/eu-west-3.json +++ b/moto/ec2/resources/instance_type_offerings/region/eu-west-3.json @@ -303,6 +303,26 @@ "InstanceType": "c6in.xlarge", "Location": "eu-west-3" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "eu-west-3" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "eu-west-3" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "eu-west-3" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "eu-west-3" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "eu-west-3" + }, { "InstanceType": "c7i.12xlarge", "Location": "eu-west-3" diff --git a/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json b/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json index 11d38a27886b..7e12447bd4f2 100644 --- a/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json +++ b/moto/ec2/resources/instance_type_offerings/region/sa-east-1.json @@ -439,6 +439,26 @@ "InstanceType": "c6in.xlarge", "Location": "sa-east-1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "sa-east-1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "sa-east-1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "sa-east-1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "sa-east-1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "sa-east-1" + }, { "InstanceType": "c7i.12xlarge", "Location": "sa-east-1" @@ -1139,6 +1159,42 @@ "InstanceType": "m7g.xlarge", "Location": "sa-east-1" }, + { + "InstanceType": "m7gd.12xlarge", + "Location": "sa-east-1" + }, + { + "InstanceType": "m7gd.16xlarge", + "Location": "sa-east-1" + }, + { + "InstanceType": "m7gd.2xlarge", + "Location": "sa-east-1" + }, + { + "InstanceType": "m7gd.4xlarge", + "Location": "sa-east-1" + }, + { + "InstanceType": "m7gd.8xlarge", + "Location": "sa-east-1" + }, + { + "InstanceType": "m7gd.large", + "Location": "sa-east-1" + }, + { + "InstanceType": "m7gd.medium", + "Location": "sa-east-1" + }, + { + "InstanceType": "m7gd.metal", + "Location": "sa-east-1" + }, + { + "InstanceType": "m7gd.xlarge", + "Location": "sa-east-1" + }, { "InstanceType": "m7i-flex.2xlarge", "Location": "sa-east-1" diff --git a/moto/ec2/resources/instance_type_offerings/region/us-west-1.json b/moto/ec2/resources/instance_type_offerings/region/us-west-1.json index ea38afb5be18..3e37de5cfe39 100644 --- a/moto/ec2/resources/instance_type_offerings/region/us-west-1.json +++ b/moto/ec2/resources/instance_type_offerings/region/us-west-1.json @@ -479,6 +479,26 @@ "InstanceType": "c7gd.xlarge", "Location": "us-west-1" }, + { + "InstanceType": "c7i-flex.2xlarge", + "Location": "us-west-1" + }, + { + "InstanceType": "c7i-flex.4xlarge", + "Location": "us-west-1" + }, + { + "InstanceType": "c7i-flex.8xlarge", + "Location": "us-west-1" + }, + { + "InstanceType": "c7i-flex.large", + "Location": "us-west-1" + }, + { + "InstanceType": "c7i-flex.xlarge", + "Location": "us-west-1" + }, { "InstanceType": "c7i.12xlarge", "Location": "us-west-1" diff --git a/moto/ec2/resources/instance_types.json b/moto/ec2/resources/instance_types.json index 457258011af1..4b309bbd9467 100644 --- a/moto/ec2/resources/instance_types.json +++ b/moto/ec2/resources/instance_types.json @@ -6280,7 +6280,7 @@ "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": false, + "EnaSrdSupported": true, "EnaSupport": "required", "EncryptionInTransitSupported": true, "Ipv4AddressesPerInterface": 50, @@ -6388,7 +6388,7 @@ "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": false, + "EnaSrdSupported": true, "EnaSupport": "required", "EncryptionInTransitSupported": true, "Ipv4AddressesPerInterface": 50, @@ -17904,20 +17904,20 @@ ] } }, - "c7i.12xlarge": { + "c7i-flex.2xlarge": { "AutoRecoverySupported": true, "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": true, + "DedicatedHostsSupported": false, "EbsInfo": { "EbsOptimizedInfo": { - "BaselineBandwidthInMbps": 15000, - "BaselineIops": 60000, - "BaselineThroughputInMBps": 1875.0, - "MaximumBandwidthInMbps": 15000, - "MaximumIops": 60000, - "MaximumThroughputInMBps": 1875.0 + "BaselineBandwidthInMbps": 1250, + "BaselineIops": 6000, + "BaselineThroughputInMBps": 156.25, + "MaximumBandwidthInMbps": 10000, + "MaximumIops": 40000, + "MaximumThroughputInMBps": 1250.0 }, "EbsOptimizedSupport": "default", "EncryptionSupport": "supported", @@ -17927,31 +17927,31 @@ "HibernationSupported": true, "Hypervisor": "nitro", "InstanceStorageSupported": false, - "InstanceType": "c7i.12xlarge", + "InstanceType": "c7i-flex.2xlarge", "MemoryInfo": { - "SizeInMiB": 98304 + "SizeInMiB": 16384 }, "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": true, + "EnaSrdSupported": false, "EnaSupport": "required", "EncryptionInTransitSupported": true, - "Ipv4AddressesPerInterface": 30, - "Ipv6AddressesPerInterface": 30, + "Ipv4AddressesPerInterface": 15, + "Ipv6AddressesPerInterface": 15, "Ipv6Supported": true, "MaximumNetworkCards": 1, - "MaximumNetworkInterfaces": 8, + "MaximumNetworkInterfaces": 4, "NetworkCards": [ { - "BaselineBandwidthInGbps": 18.75, - "MaximumNetworkInterfaces": 8, + "BaselineBandwidthInGbps": 1.562, + "MaximumNetworkInterfaces": 4, "NetworkCardIndex": 0, - "NetworkPerformance": "18.75 Gigabit", - "PeakBandwidthInGbps": 18.75 + "NetworkPerformance": "Up to 12.5 Gigabit", + "PeakBandwidthInGbps": 12.5 } ], - "NetworkPerformance": "18.75 Gigabit" + "NetworkPerformance": "Up to 12.5 Gigabit" }, "NitroEnclavesSupport": "unsupported", "NitroTpmInfo": { @@ -17963,7 +17963,6 @@ "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ - "cluster", "partition", "spread" ] @@ -17990,34 +17989,14 @@ "hvm" ], "VCpuInfo": { - "DefaultCores": 24, + "DefaultCores": 4, "DefaultThreadsPerCore": 2, - "DefaultVCpus": 48, + "DefaultVCpus": 8, "ValidCores": [ 1, 2, 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24 + 4 ], "ValidThreadsPerCore": [ 1, @@ -18025,20 +18004,20 @@ ] } }, - "c7i.16xlarge": { + "c7i-flex.4xlarge": { "AutoRecoverySupported": true, "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": true, + "DedicatedHostsSupported": false, "EbsInfo": { "EbsOptimizedInfo": { - "BaselineBandwidthInMbps": 20000, - "BaselineIops": 80000, - "BaselineThroughputInMBps": 2500.0, - "MaximumBandwidthInMbps": 20000, - "MaximumIops": 80000, - "MaximumThroughputInMBps": 2500.0 + "BaselineBandwidthInMbps": 2500, + "BaselineIops": 12000, + "BaselineThroughputInMBps": 312.5, + "MaximumBandwidthInMbps": 10000, + "MaximumIops": 40000, + "MaximumThroughputInMBps": 1250.0 }, "EbsOptimizedSupport": "default", "EncryptionSupport": "supported", @@ -18048,31 +18027,31 @@ "HibernationSupported": true, "Hypervisor": "nitro", "InstanceStorageSupported": false, - "InstanceType": "c7i.16xlarge", + "InstanceType": "c7i-flex.4xlarge", "MemoryInfo": { - "SizeInMiB": 131072 + "SizeInMiB": 32768 }, "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": true, + "EnaSrdSupported": false, "EnaSupport": "required", "EncryptionInTransitSupported": true, - "Ipv4AddressesPerInterface": 50, - "Ipv6AddressesPerInterface": 50, + "Ipv4AddressesPerInterface": 30, + "Ipv6AddressesPerInterface": 30, "Ipv6Supported": true, "MaximumNetworkCards": 1, - "MaximumNetworkInterfaces": 15, + "MaximumNetworkInterfaces": 8, "NetworkCards": [ { - "BaselineBandwidthInGbps": 25.0, - "MaximumNetworkInterfaces": 15, + "BaselineBandwidthInGbps": 3.125, + "MaximumNetworkInterfaces": 8, "NetworkCardIndex": 0, - "NetworkPerformance": "25 Gigabit", - "PeakBandwidthInGbps": 25.0 + "NetworkPerformance": "Up to 12.5 Gigabit", + "PeakBandwidthInGbps": 12.5 } ], - "NetworkPerformance": "25 Gigabit" + "NetworkPerformance": "Up to 12.5 Gigabit" }, "NitroEnclavesSupport": "unsupported", "NitroTpmInfo": { @@ -18084,7 +18063,6 @@ "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ - "cluster", "partition", "spread" ] @@ -18111,9 +18089,9 @@ "hvm" ], "VCpuInfo": { - "DefaultCores": 32, + "DefaultCores": 8, "DefaultThreadsPerCore": 2, - "DefaultVCpus": 64, + "DefaultVCpus": 16, "ValidCores": [ 1, 2, @@ -18122,31 +18100,7 @@ 5, 6, 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32 + 8 ], "ValidThreadsPerCore": [ 1, @@ -18154,7 +18108,7 @@ ] } }, - "c7i.24xlarge": { + "c7i-flex.8xlarge": { "AutoRecoverySupported": true, "BareMetal": false, "BurstablePerformanceSupported": false, @@ -18162,46 +18116,46 @@ "DedicatedHostsSupported": false, "EbsInfo": { "EbsOptimizedInfo": { - "BaselineBandwidthInMbps": 30000, - "BaselineIops": 120000, - "BaselineThroughputInMBps": 3750.0, - "MaximumBandwidthInMbps": 30000, - "MaximumIops": 120000, - "MaximumThroughputInMBps": 3750.0 + "BaselineBandwidthInMbps": 5000, + "BaselineIops": 20000, + "BaselineThroughputInMBps": 625.0, + "MaximumBandwidthInMbps": 10000, + "MaximumIops": 40000, + "MaximumThroughputInMBps": 1250.0 }, "EbsOptimizedSupport": "default", "EncryptionSupport": "supported", "NvmeSupport": "required" }, "FreeTierEligible": false, - "HibernationSupported": false, + "HibernationSupported": true, "Hypervisor": "nitro", "InstanceStorageSupported": false, - "InstanceType": "c7i.24xlarge", + "InstanceType": "c7i-flex.8xlarge", "MemoryInfo": { - "SizeInMiB": 196608 + "SizeInMiB": 65536 }, "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": true, + "EnaSrdSupported": false, "EnaSupport": "required", "EncryptionInTransitSupported": true, - "Ipv4AddressesPerInterface": 50, - "Ipv6AddressesPerInterface": 50, + "Ipv4AddressesPerInterface": 30, + "Ipv6AddressesPerInterface": 30, "Ipv6Supported": true, "MaximumNetworkCards": 1, - "MaximumNetworkInterfaces": 15, + "MaximumNetworkInterfaces": 8, "NetworkCards": [ { - "BaselineBandwidthInGbps": 37.5, - "MaximumNetworkInterfaces": 15, + "BaselineBandwidthInGbps": 6.25, + "MaximumNetworkInterfaces": 8, "NetworkCardIndex": 0, - "NetworkPerformance": "37.5 Gigabit", - "PeakBandwidthInGbps": 37.5 + "NetworkPerformance": "Up to 12.5 Gigabit", + "PeakBandwidthInGbps": 12.5 } ], - "NetworkPerformance": "37.5 Gigabit" + "NetworkPerformance": "Up to 12.5 Gigabit" }, "NitroEnclavesSupport": "unsupported", "NitroTpmInfo": { @@ -18213,7 +18167,6 @@ "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ - "cluster", "partition", "spread" ] @@ -18240,9 +18193,9 @@ "hvm" ], "VCpuInfo": { - "DefaultCores": 48, + "DefaultCores": 16, "DefaultThreadsPerCore": 2, - "DefaultVCpus": 96, + "DefaultVCpus": 32, "ValidCores": [ 1, 2, @@ -18259,39 +18212,7 @@ 13, 14, 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48 + 16 ], "ValidThreadsPerCore": [ 1, @@ -18299,17 +18220,17 @@ ] } }, - "c7i.2xlarge": { + "c7i-flex.large": { "AutoRecoverySupported": true, "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": true, + "DedicatedHostsSupported": false, "EbsInfo": { "EbsOptimizedInfo": { - "BaselineBandwidthInMbps": 2500, - "BaselineIops": 12000, - "BaselineThroughputInMBps": 312.5, + "BaselineBandwidthInMbps": 312, + "BaselineIops": 2500, + "BaselineThroughputInMBps": 39.0625, "MaximumBandwidthInMbps": 10000, "MaximumIops": 40000, "MaximumThroughputInMBps": 1250.0 @@ -18322,9 +18243,9 @@ "HibernationSupported": true, "Hypervisor": "nitro", "InstanceStorageSupported": false, - "InstanceType": "c7i.2xlarge", + "InstanceType": "c7i-flex.large", "MemoryInfo": { - "SizeInMiB": 16384 + "SizeInMiB": 4096 }, "NetworkInfo": { "DefaultNetworkCardIndex": 0, @@ -18332,15 +18253,15 @@ "EnaSrdSupported": false, "EnaSupport": "required", "EncryptionInTransitSupported": true, - "Ipv4AddressesPerInterface": 15, - "Ipv6AddressesPerInterface": 15, + "Ipv4AddressesPerInterface": 10, + "Ipv6AddressesPerInterface": 10, "Ipv6Supported": true, "MaximumNetworkCards": 1, - "MaximumNetworkInterfaces": 4, + "MaximumNetworkInterfaces": 3, "NetworkCards": [ { - "BaselineBandwidthInGbps": 3.125, - "MaximumNetworkInterfaces": 4, + "BaselineBandwidthInGbps": 0.39, + "MaximumNetworkInterfaces": 3, "NetworkCardIndex": 0, "NetworkPerformance": "Up to 12.5 Gigabit", "PeakBandwidthInGbps": 12.5 @@ -18358,7 +18279,6 @@ "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ - "cluster", "partition", "spread" ] @@ -18385,14 +18305,11 @@ "hvm" ], "VCpuInfo": { - "DefaultCores": 4, + "DefaultCores": 1, "DefaultThreadsPerCore": 2, - "DefaultVCpus": 8, + "DefaultVCpus": 2, "ValidCores": [ - 1, - 2, - 3, - 4 + 1 ], "ValidThreadsPerCore": [ 1, @@ -18400,7 +18317,7 @@ ] } }, - "c7i.48xlarge": { + "c7i-flex.xlarge": { "AutoRecoverySupported": true, "BareMetal": false, "BurstablePerformanceSupported": false, @@ -18408,49 +18325,46 @@ "DedicatedHostsSupported": false, "EbsInfo": { "EbsOptimizedInfo": { - "BaselineBandwidthInMbps": 40000, - "BaselineIops": 240000, - "BaselineThroughputInMBps": 5000.0, - "MaximumBandwidthInMbps": 40000, - "MaximumIops": 240000, - "MaximumThroughputInMBps": 5000.0 + "BaselineBandwidthInMbps": 625, + "BaselineIops": 3600, + "BaselineThroughputInMBps": 78.125, + "MaximumBandwidthInMbps": 10000, + "MaximumIops": 40000, + "MaximumThroughputInMBps": 1250.0 }, "EbsOptimizedSupport": "default", "EncryptionSupport": "supported", "NvmeSupport": "required" }, "FreeTierEligible": false, - "HibernationSupported": false, + "HibernationSupported": true, "Hypervisor": "nitro", "InstanceStorageSupported": false, - "InstanceType": "c7i.48xlarge", + "InstanceType": "c7i-flex.xlarge", "MemoryInfo": { - "SizeInMiB": 393216 + "SizeInMiB": 8192 }, "NetworkInfo": { "DefaultNetworkCardIndex": 0, - "EfaInfo": { - "MaximumEfaInterfaces": 1 - }, - "EfaSupported": true, - "EnaSrdSupported": true, + "EfaSupported": false, + "EnaSrdSupported": false, "EnaSupport": "required", "EncryptionInTransitSupported": true, - "Ipv4AddressesPerInterface": 50, - "Ipv6AddressesPerInterface": 50, + "Ipv4AddressesPerInterface": 15, + "Ipv6AddressesPerInterface": 15, "Ipv6Supported": true, "MaximumNetworkCards": 1, - "MaximumNetworkInterfaces": 15, + "MaximumNetworkInterfaces": 4, "NetworkCards": [ { - "BaselineBandwidthInGbps": 50.0, - "MaximumNetworkInterfaces": 15, + "BaselineBandwidthInGbps": 0.781, + "MaximumNetworkInterfaces": 4, "NetworkCardIndex": 0, - "NetworkPerformance": "50 Gigabit", - "PeakBandwidthInGbps": 50.0 + "NetworkPerformance": "Up to 12.5 Gigabit", + "PeakBandwidthInGbps": 12.5 } ], - "NetworkPerformance": "50 Gigabit" + "NetworkPerformance": "Up to 12.5 Gigabit" }, "NitroEnclavesSupport": "unsupported", "NitroTpmInfo": { @@ -18462,7 +18376,604 @@ "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ - "cluster", + "partition", + "spread" + ] + }, + "ProcessorInfo": { + "Manufacturer": "Intel", + "SupportedArchitectures": [ + "x86_64" + ], + "SustainedClockSpeedInGhz": 3.2 + }, + "SupportedBootModes": [ + "legacy-bios", + "uefi" + ], + "SupportedRootDeviceTypes": [ + "ebs" + ], + "SupportedUsageClasses": [ + "on-demand", + "spot" + ], + "SupportedVirtualizationTypes": [ + "hvm" + ], + "VCpuInfo": { + "DefaultCores": 2, + "DefaultThreadsPerCore": 2, + "DefaultVCpus": 4, + "ValidCores": [ + 1, + 2 + ], + "ValidThreadsPerCore": [ + 1, + 2 + ] + } + }, + "c7i.12xlarge": { + "AutoRecoverySupported": true, + "BareMetal": false, + "BurstablePerformanceSupported": false, + "CurrentGeneration": true, + "DedicatedHostsSupported": true, + "EbsInfo": { + "EbsOptimizedInfo": { + "BaselineBandwidthInMbps": 15000, + "BaselineIops": 60000, + "BaselineThroughputInMBps": 1875.0, + "MaximumBandwidthInMbps": 15000, + "MaximumIops": 60000, + "MaximumThroughputInMBps": 1875.0 + }, + "EbsOptimizedSupport": "default", + "EncryptionSupport": "supported", + "NvmeSupport": "required" + }, + "FreeTierEligible": false, + "HibernationSupported": true, + "Hypervisor": "nitro", + "InstanceStorageSupported": false, + "InstanceType": "c7i.12xlarge", + "MemoryInfo": { + "SizeInMiB": 98304 + }, + "NetworkInfo": { + "DefaultNetworkCardIndex": 0, + "EfaSupported": false, + "EnaSrdSupported": true, + "EnaSupport": "required", + "EncryptionInTransitSupported": true, + "Ipv4AddressesPerInterface": 30, + "Ipv6AddressesPerInterface": 30, + "Ipv6Supported": true, + "MaximumNetworkCards": 1, + "MaximumNetworkInterfaces": 8, + "NetworkCards": [ + { + "BaselineBandwidthInGbps": 18.75, + "MaximumNetworkInterfaces": 8, + "NetworkCardIndex": 0, + "NetworkPerformance": "18.75 Gigabit", + "PeakBandwidthInGbps": 18.75 + } + ], + "NetworkPerformance": "18.75 Gigabit" + }, + "NitroEnclavesSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", + "PhcSupport": "unsupported", + "PlacementGroupInfo": { + "SupportedStrategies": [ + "cluster", + "partition", + "spread" + ] + }, + "ProcessorInfo": { + "Manufacturer": "Intel", + "SupportedArchitectures": [ + "x86_64" + ], + "SustainedClockSpeedInGhz": 3.2 + }, + "SupportedBootModes": [ + "legacy-bios", + "uefi" + ], + "SupportedRootDeviceTypes": [ + "ebs" + ], + "SupportedUsageClasses": [ + "on-demand", + "spot" + ], + "SupportedVirtualizationTypes": [ + "hvm" + ], + "VCpuInfo": { + "DefaultCores": 24, + "DefaultThreadsPerCore": 2, + "DefaultVCpus": 48, + "ValidCores": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24 + ], + "ValidThreadsPerCore": [ + 1, + 2 + ] + } + }, + "c7i.16xlarge": { + "AutoRecoverySupported": true, + "BareMetal": false, + "BurstablePerformanceSupported": false, + "CurrentGeneration": true, + "DedicatedHostsSupported": true, + "EbsInfo": { + "EbsOptimizedInfo": { + "BaselineBandwidthInMbps": 20000, + "BaselineIops": 80000, + "BaselineThroughputInMBps": 2500.0, + "MaximumBandwidthInMbps": 20000, + "MaximumIops": 80000, + "MaximumThroughputInMBps": 2500.0 + }, + "EbsOptimizedSupport": "default", + "EncryptionSupport": "supported", + "NvmeSupport": "required" + }, + "FreeTierEligible": false, + "HibernationSupported": true, + "Hypervisor": "nitro", + "InstanceStorageSupported": false, + "InstanceType": "c7i.16xlarge", + "MemoryInfo": { + "SizeInMiB": 131072 + }, + "NetworkInfo": { + "DefaultNetworkCardIndex": 0, + "EfaSupported": false, + "EnaSrdSupported": true, + "EnaSupport": "required", + "EncryptionInTransitSupported": true, + "Ipv4AddressesPerInterface": 50, + "Ipv6AddressesPerInterface": 50, + "Ipv6Supported": true, + "MaximumNetworkCards": 1, + "MaximumNetworkInterfaces": 15, + "NetworkCards": [ + { + "BaselineBandwidthInGbps": 25.0, + "MaximumNetworkInterfaces": 15, + "NetworkCardIndex": 0, + "NetworkPerformance": "25 Gigabit", + "PeakBandwidthInGbps": 25.0 + } + ], + "NetworkPerformance": "25 Gigabit" + }, + "NitroEnclavesSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", + "PhcSupport": "unsupported", + "PlacementGroupInfo": { + "SupportedStrategies": [ + "cluster", + "partition", + "spread" + ] + }, + "ProcessorInfo": { + "Manufacturer": "Intel", + "SupportedArchitectures": [ + "x86_64" + ], + "SustainedClockSpeedInGhz": 3.2 + }, + "SupportedBootModes": [ + "legacy-bios", + "uefi" + ], + "SupportedRootDeviceTypes": [ + "ebs" + ], + "SupportedUsageClasses": [ + "on-demand", + "spot" + ], + "SupportedVirtualizationTypes": [ + "hvm" + ], + "VCpuInfo": { + "DefaultCores": 32, + "DefaultThreadsPerCore": 2, + "DefaultVCpus": 64, + "ValidCores": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32 + ], + "ValidThreadsPerCore": [ + 1, + 2 + ] + } + }, + "c7i.24xlarge": { + "AutoRecoverySupported": true, + "BareMetal": false, + "BurstablePerformanceSupported": false, + "CurrentGeneration": true, + "DedicatedHostsSupported": false, + "EbsInfo": { + "EbsOptimizedInfo": { + "BaselineBandwidthInMbps": 30000, + "BaselineIops": 120000, + "BaselineThroughputInMBps": 3750.0, + "MaximumBandwidthInMbps": 30000, + "MaximumIops": 120000, + "MaximumThroughputInMBps": 3750.0 + }, + "EbsOptimizedSupport": "default", + "EncryptionSupport": "supported", + "NvmeSupport": "required" + }, + "FreeTierEligible": false, + "HibernationSupported": false, + "Hypervisor": "nitro", + "InstanceStorageSupported": false, + "InstanceType": "c7i.24xlarge", + "MemoryInfo": { + "SizeInMiB": 196608 + }, + "NetworkInfo": { + "DefaultNetworkCardIndex": 0, + "EfaSupported": false, + "EnaSrdSupported": true, + "EnaSupport": "required", + "EncryptionInTransitSupported": true, + "Ipv4AddressesPerInterface": 50, + "Ipv6AddressesPerInterface": 50, + "Ipv6Supported": true, + "MaximumNetworkCards": 1, + "MaximumNetworkInterfaces": 15, + "NetworkCards": [ + { + "BaselineBandwidthInGbps": 37.5, + "MaximumNetworkInterfaces": 15, + "NetworkCardIndex": 0, + "NetworkPerformance": "37.5 Gigabit", + "PeakBandwidthInGbps": 37.5 + } + ], + "NetworkPerformance": "37.5 Gigabit" + }, + "NitroEnclavesSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", + "PhcSupport": "unsupported", + "PlacementGroupInfo": { + "SupportedStrategies": [ + "cluster", + "partition", + "spread" + ] + }, + "ProcessorInfo": { + "Manufacturer": "Intel", + "SupportedArchitectures": [ + "x86_64" + ], + "SustainedClockSpeedInGhz": 3.2 + }, + "SupportedBootModes": [ + "legacy-bios", + "uefi" + ], + "SupportedRootDeviceTypes": [ + "ebs" + ], + "SupportedUsageClasses": [ + "on-demand", + "spot" + ], + "SupportedVirtualizationTypes": [ + "hvm" + ], + "VCpuInfo": { + "DefaultCores": 48, + "DefaultThreadsPerCore": 2, + "DefaultVCpus": 96, + "ValidCores": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48 + ], + "ValidThreadsPerCore": [ + 1, + 2 + ] + } + }, + "c7i.2xlarge": { + "AutoRecoverySupported": true, + "BareMetal": false, + "BurstablePerformanceSupported": false, + "CurrentGeneration": true, + "DedicatedHostsSupported": true, + "EbsInfo": { + "EbsOptimizedInfo": { + "BaselineBandwidthInMbps": 2500, + "BaselineIops": 12000, + "BaselineThroughputInMBps": 312.5, + "MaximumBandwidthInMbps": 10000, + "MaximumIops": 40000, + "MaximumThroughputInMBps": 1250.0 + }, + "EbsOptimizedSupport": "default", + "EncryptionSupport": "supported", + "NvmeSupport": "required" + }, + "FreeTierEligible": false, + "HibernationSupported": true, + "Hypervisor": "nitro", + "InstanceStorageSupported": false, + "InstanceType": "c7i.2xlarge", + "MemoryInfo": { + "SizeInMiB": 16384 + }, + "NetworkInfo": { + "DefaultNetworkCardIndex": 0, + "EfaSupported": false, + "EnaSrdSupported": false, + "EnaSupport": "required", + "EncryptionInTransitSupported": true, + "Ipv4AddressesPerInterface": 15, + "Ipv6AddressesPerInterface": 15, + "Ipv6Supported": true, + "MaximumNetworkCards": 1, + "MaximumNetworkInterfaces": 4, + "NetworkCards": [ + { + "BaselineBandwidthInGbps": 3.125, + "MaximumNetworkInterfaces": 4, + "NetworkCardIndex": 0, + "NetworkPerformance": "Up to 12.5 Gigabit", + "PeakBandwidthInGbps": 12.5 + } + ], + "NetworkPerformance": "Up to 12.5 Gigabit" + }, + "NitroEnclavesSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", + "PhcSupport": "unsupported", + "PlacementGroupInfo": { + "SupportedStrategies": [ + "cluster", + "partition", + "spread" + ] + }, + "ProcessorInfo": { + "Manufacturer": "Intel", + "SupportedArchitectures": [ + "x86_64" + ], + "SustainedClockSpeedInGhz": 3.2 + }, + "SupportedBootModes": [ + "legacy-bios", + "uefi" + ], + "SupportedRootDeviceTypes": [ + "ebs" + ], + "SupportedUsageClasses": [ + "on-demand", + "spot" + ], + "SupportedVirtualizationTypes": [ + "hvm" + ], + "VCpuInfo": { + "DefaultCores": 4, + "DefaultThreadsPerCore": 2, + "DefaultVCpus": 8, + "ValidCores": [ + 1, + 2, + 3, + 4 + ], + "ValidThreadsPerCore": [ + 1, + 2 + ] + } + }, + "c7i.48xlarge": { + "AutoRecoverySupported": true, + "BareMetal": false, + "BurstablePerformanceSupported": false, + "CurrentGeneration": true, + "DedicatedHostsSupported": false, + "EbsInfo": { + "EbsOptimizedInfo": { + "BaselineBandwidthInMbps": 40000, + "BaselineIops": 240000, + "BaselineThroughputInMBps": 5000.0, + "MaximumBandwidthInMbps": 40000, + "MaximumIops": 240000, + "MaximumThroughputInMBps": 5000.0 + }, + "EbsOptimizedSupport": "default", + "EncryptionSupport": "supported", + "NvmeSupport": "required" + }, + "FreeTierEligible": false, + "HibernationSupported": false, + "Hypervisor": "nitro", + "InstanceStorageSupported": false, + "InstanceType": "c7i.48xlarge", + "MemoryInfo": { + "SizeInMiB": 393216 + }, + "NetworkInfo": { + "DefaultNetworkCardIndex": 0, + "EfaInfo": { + "MaximumEfaInterfaces": 1 + }, + "EfaSupported": true, + "EnaSrdSupported": true, + "EnaSupport": "required", + "EncryptionInTransitSupported": true, + "Ipv4AddressesPerInterface": 50, + "Ipv6AddressesPerInterface": 50, + "Ipv6Supported": true, + "MaximumNetworkCards": 1, + "MaximumNetworkInterfaces": 15, + "NetworkCards": [ + { + "BaselineBandwidthInGbps": 50.0, + "MaximumNetworkInterfaces": 15, + "NetworkCardIndex": 0, + "NetworkPerformance": "50 Gigabit", + "PeakBandwidthInGbps": 50.0 + } + ], + "NetworkPerformance": "50 Gigabit" + }, + "NitroEnclavesSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", + "PhcSupport": "unsupported", + "PlacementGroupInfo": { + "SupportedStrategies": [ + "cluster", "partition", "spread" ] @@ -20881,7 +21392,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 19000, @@ -21741,7 +22252,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 850, @@ -21968,7 +22479,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 800, @@ -22325,7 +22836,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 400, @@ -32761,7 +33272,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 4750, @@ -37341,7 +37852,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 4750, @@ -38214,7 +38725,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 4750, @@ -56142,7 +56653,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 19000, @@ -56450,7 +56961,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": true, + "DedicatedHostsSupported": false, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 80000, @@ -59355,7 +59866,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 4750, @@ -60228,7 +60739,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 4750, @@ -64531,7 +65042,7 @@ "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": false, + "EnaSrdSupported": true, "EnaSupport": "required", "EncryptionInTransitSupported": true, "Ipv4AddressesPerInterface": 30, @@ -64638,7 +65149,7 @@ "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": false, + "EnaSrdSupported": true, "EnaSupport": "required", "EncryptionInTransitSupported": true, "Ipv4AddressesPerInterface": 50, @@ -64743,7 +65254,7 @@ "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": false, + "EnaSrdSupported": true, "EnaSupport": "required", "EncryptionInTransitSupported": true, "Ipv4AddressesPerInterface": 50, @@ -64953,7 +65464,7 @@ "NetworkInfo": { "DefaultNetworkCardIndex": 0, "EfaSupported": false, - "EnaSrdSupported": false, + "EnaSrdSupported": true, "EnaSupport": "required", "EncryptionInTransitSupported": true, "Ipv4AddressesPerInterface": 50, @@ -81944,7 +82455,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 19000, @@ -82053,7 +82564,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 2375, @@ -82157,7 +82668,7 @@ "BareMetal": false, "BurstablePerformanceSupported": false, "CurrentGeneration": true, - "DedicatedHostsSupported": false, + "DedicatedHostsSupported": true, "EbsInfo": { "EbsOptimizedInfo": { "BaselineBandwidthInMbps": 4750, @@ -84320,7 +84831,12 @@ "NetworkPerformance": "50 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -84440,7 +84956,12 @@ "NetworkPerformance": "75 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -84571,7 +85092,12 @@ "NetworkPerformance": "100 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -84806,7 +85332,12 @@ "NetworkPerformance": "50 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -84926,7 +85457,12 @@ "NetworkPerformance": "75 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -85054,7 +85590,12 @@ "NetworkPerformance": "Up to 25 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -85163,7 +85704,12 @@ "NetworkPerformance": "100 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -85299,7 +85845,12 @@ "NetworkPerformance": "Up to 25 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -85407,7 +85958,12 @@ "NetworkPerformance": "25 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -85618,7 +86174,12 @@ "NetworkPerformance": "Up to 25 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -85715,7 +86276,12 @@ "NetworkPerformance": "100 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -85819,7 +86385,12 @@ "NetworkPerformance": "Up to 25 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -85913,7 +86484,12 @@ "NetworkPerformance": "Up to 25 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -86009,7 +86585,12 @@ "NetworkPerformance": "50 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ @@ -86107,7 +86688,12 @@ "NetworkPerformance": "75 Gigabit" }, "NitroEnclavesSupport": "supported", - "NitroTpmSupport": "unsupported", + "NitroTpmInfo": { + "SupportedVersions": [ + "2.0" + ] + }, + "NitroTpmSupport": "supported", "PhcSupport": "unsupported", "PlacementGroupInfo": { "SupportedStrategies": [ diff --git a/moto/ec2/responses/instances.py b/moto/ec2/responses/instances.py index 337ef7351d87..299e49d93380 100644 --- a/moto/ec2/responses/instances.py +++ b/moto/ec2/responses/instances.py @@ -106,6 +106,7 @@ def run_instances(self) -> str: # Validate the profile exists, before we error_on_dryrun and run_instances filter_iam_instance_profiles( self.current_account, + partition=self.partition, iam_instance_profile_arn=iam_instance_profile_arn, iam_instance_profile_name=iam_instance_profile_name, ) diff --git a/moto/ec2/responses/launch_templates.py b/moto/ec2/responses/launch_templates.py index f9df39a7ab81..648c36dbf153 100644 --- a/moto/ec2/responses/launch_templates.py +++ b/moto/ec2/responses/launch_templates.py @@ -87,7 +87,7 @@ def create_launch_template(self) -> str: "launchTemplate", { "createTime": version.create_time, - "createdBy": f"arn:aws:iam::{self.current_account}:root", + "createdBy": f"arn:{self.partition}:iam::{self.current_account}:root", "defaultVersionNumber": template.default_version_number, "latestVersionNumber": version.number, "launchTemplateId": template.id, @@ -120,7 +120,7 @@ def create_launch_template_version(self) -> str: "launchTemplateVersion", { "createTime": version.create_time, - "createdBy": f"arn:aws:iam::{self.current_account}:root", + "createdBy": f"arn:{self.partition}:iam::{self.current_account}:root", "defaultVersion": template.is_default(version), "launchTemplateData": version.data, "launchTemplateId": template.id, @@ -214,7 +214,7 @@ def describe_launch_template_versions(self) -> str: "item", { "createTime": version.create_time, - "createdBy": f"arn:aws:iam::{self.current_account}:root", + "createdBy": f"arn:{self.partition}:iam::{self.current_account}:root", "defaultVersion": True, "launchTemplateData": version.data, "launchTemplateId": template.id, @@ -251,7 +251,7 @@ def describe_launch_templates(self) -> str: "item", { "createTime": template.create_time, - "createdBy": f"arn:aws:iam::{self.current_account}:root", + "createdBy": f"arn:{self.partition}:iam::{self.current_account}:root", "defaultVersionNumber": template.default_version_number, "latestVersionNumber": template.latest_version_number, "launchTemplateId": template.id, diff --git a/moto/ec2/utils.py b/moto/ec2/utils.py index 2ad9ea82065b..44d507c60eff 100644 --- a/moto/ec2/utils.py +++ b/moto/ec2/utils.py @@ -774,21 +774,23 @@ def filter_iam_instance_profile_associations( def filter_iam_instance_profiles( account_id: str, + partition: str, iam_instance_profile_arn: Optional[str], iam_instance_profile_name: Optional[str], ) -> Any: instance_profile = None instance_profile_by_name = None instance_profile_by_arn = None + backend = iam_backends[account_id][partition] if iam_instance_profile_name: - instance_profile_by_name = iam_backends[account_id][ - "global" - ].get_instance_profile(iam_instance_profile_name) + instance_profile_by_name = backend.get_instance_profile( + iam_instance_profile_name + ) instance_profile = instance_profile_by_name if iam_instance_profile_arn: - instance_profile_by_arn = iam_backends[account_id][ - "global" - ].get_instance_profile_by_arn(iam_instance_profile_arn) + instance_profile_by_arn = backend.get_instance_profile_by_arn( + iam_instance_profile_arn + ) instance_profile = instance_profile_by_arn # We would prefer instance profile that we found by arn if iam_instance_profile_arn and iam_instance_profile_name: diff --git a/moto/ecr/models.py b/moto/ecr/models.py index 4ede050f4172..71207497bc23 100644 --- a/moto/ecr/models.py +++ b/moto/ecr/models.py @@ -30,6 +30,7 @@ from moto.iam.policy_validation import IAMPolicyDocumentValidator from moto.moto_api._internal import mock_random as random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition ECR_REPOSITORY_ARN_PATTERN = "^arn:(?P[^:]+):ecr:(?P[^:]+):(?P[^:]+):repository/(?P.*)$" ECR_REPOSITORY_NAME_PATTERN = ( @@ -79,9 +80,7 @@ def __init__( self.account_id = account_id self.region_name = region_name self.registry_id = registry_id or account_id - self.arn = ( - f"arn:aws:ecr:{region_name}:{self.registry_id}:repository/{repository_name}" - ) + self.arn = f"arn:{get_partition(region_name)}:ecr:{region_name}:{self.registry_id}:repository/{repository_name}" self.name = repository_name self.created_at = utcnow() self.uri = ( @@ -110,7 +109,7 @@ def _determine_encryption_config( return {"encryptionType": "AES256"} if encryption_config == {"encryptionType": "KMS"}: encryption_config["kmsKey"] = ( - f"arn:aws:kms:{self.region_name}:{self.account_id}:key/{random.uuid4()}" + f"arn:{get_partition(self.region_name)}:kms:{self.region_name}:{self.account_id}:key/{random.uuid4()}" ) return encryption_config diff --git a/moto/ecs/models.py b/moto/ecs/models.py index adfc7b5ec02b..703eb99ff218 100644 --- a/moto/ecs/models.py +++ b/moto/ecs/models.py @@ -12,6 +12,7 @@ from moto.ec2 import ec2_backends from moto.moto_api._internal import mock_random from moto.moto_api._internal.managed_state_model import ManagedState +from moto.utilities.utils import ARN_PARTITION_REGEX, get_partition from ..ec2.utils import random_private_ip from .exceptions import ( @@ -73,7 +74,7 @@ def __init__( service_connect_defaults: Optional[Dict[str, str]] = None, ): self.active_services_count = 0 - self.arn = f"arn:aws:ecs:{region_name}:{account_id}:cluster/{cluster_name}" + self.arn = f"arn:{get_partition(region_name)}:ecs:{region_name}:{account_id}:cluster/{cluster_name}" self.name = cluster_name self.pending_tasks_count = 0 self.registered_container_instances_count = 0 @@ -189,7 +190,7 @@ def __init__( ): self.family = family self.revision = revision - self.arn = f"arn:aws:ecs:{region_name}:{account_id}:task-definition/{family}:{revision}" + self.arn = f"arn:{get_partition(region_name)}:ecs:{region_name}:{account_id}:task-definition/{family}:{revision}" default_container_definition = { "cpu": 0, @@ -433,8 +434,8 @@ def last_status(self, value: Optional[str]) -> None: @property def task_arn(self) -> str: if self._backend.enable_long_arn_for_name(name="taskLongArnFormat"): - return f"arn:aws:ecs:{self.region_name}:{self._account_id}:task/{self.cluster_name}/{self.id}" - return f"arn:aws:ecs:{self.region_name}:{self._account_id}:task/{self.id}" + return f"arn:{get_partition(self.region_name)}:ecs:{self.region_name}:{self._account_id}:task/{self.cluster_name}/{self.id}" + return f"arn:{get_partition(self.region_name)}:ecs:{self.region_name}:{self._account_id}:task/{self.id}" def response_object(self, include_tags: bool = True) -> Dict[str, Any]: # type: ignore response_object = self.gen_response_object() @@ -455,9 +456,7 @@ def __init__( tags: Optional[List[Dict[str, str]]], ): self._id = str(mock_random.uuid4()) - self.capacity_provider_arn = ( - f"arn:aws:ecs:{region_name}:{account_id}:capacity-provider/{name}" - ) + self.capacity_provider_arn = f"arn:{get_partition(region_name)}:ecs:{region_name}:{account_id}:capacity-provider/{name}" self.name = name self.status = "ACTIVE" self.auto_scaling_group_provider = self._prepare_asg_provider(asg_details) @@ -509,7 +508,7 @@ def update(self, asg_details: Dict[str, Any]) -> None: class CapacityProviderFailure(BaseObject): def __init__(self, reason: str, name: str, account_id: str, region_name: str): self.reason = reason - self.arn = f"arn:aws:ecs:{region_name}:{account_id}:capacity_provider/{name}" + self.arn = f"arn:{get_partition(region_name)}:ecs:{region_name}:{account_id}:capacity_provider/{name}" @property def response_object(self) -> Dict[str, Any]: # type: ignore[misc] @@ -593,8 +592,8 @@ def __init__( @property def arn(self) -> str: if self._backend.enable_long_arn_for_name(name="serviceLongArnFormat"): - return f"arn:aws:ecs:{self.region_name}:{self._account_id}:service/{self.cluster_name}/{self.name}" - return f"arn:aws:ecs:{self.region_name}:{self._account_id}:service/{self.name}" + return f"arn:{get_partition(self.region_name)}:ecs:{self.region_name}:{self._account_id}:service/{self.cluster_name}/{self.name}" + return f"arn:{get_partition(self.region_name)}:ecs:{self.region_name}:{self._account_id}:service/{self.name}" @property def physical_resource_id(self) -> str: @@ -828,8 +827,8 @@ def container_instance_arn(self) -> str: if self._backend.enable_long_arn_for_name( name="containerInstanceLongArnFormat" ): - return f"arn:aws:ecs:{self.region_name}:{self._account_id}:container-instance/{self.cluster_name}/{self.id}" - return f"arn:aws:ecs:{self.region_name}:{self._account_id}:container-instance/{self.id}" + return f"arn:{get_partition(self.region_name)}:ecs:{self.region_name}:{self._account_id}:container-instance/{self.cluster_name}/{self.id}" + return f"arn:{get_partition(self.region_name)}:ecs:{self.region_name}:{self._account_id}:container-instance/{self.id}" @property def response_object(self) -> Dict[str, Any]: # type: ignore[misc] @@ -857,7 +856,7 @@ def __init__( self, reason: str, cluster_name: str, account_id: str, region_name: str ): self.reason = reason - self.arn = f"arn:aws:ecs:{region_name}:{account_id}:cluster/{cluster_name}" + self.arn = f"arn:{get_partition(region_name)}:ecs:{region_name}:{account_id}:cluster/{cluster_name}" @property def response_object(self) -> Dict[str, Any]: # type: ignore[misc] @@ -872,7 +871,7 @@ def __init__( self, reason: str, container_instance_id: str, account_id: str, region_name: str ): self.reason = reason - self.arn = f"arn:aws:ecs:{region_name}:{account_id}:container-instance/{container_instance_id}" + self.arn = f"arn:{get_partition(region_name)}:ecs:{region_name}:{account_id}:container-instance/{container_instance_id}" @property def response_object(self) -> Dict[str, Any]: # type: ignore[misc] @@ -926,7 +925,7 @@ def __init__( cluster_name = self.cluster.split("/")[-1] service_name = self.service.split("/")[-1] - self.task_set_arn = f"arn:aws:ecs:{region_name}:{account_id}:task-set/{cluster_name}/{service_name}/{self.id}" + self.task_set_arn = f"arn:{get_partition(region_name)}:ecs:{region_name}:{account_id}:task-set/{cluster_name}/{service_name}/{self.id}" @property def response_object(self) -> Dict[str, Any]: # type: ignore[misc] @@ -1674,10 +1673,10 @@ def describe_services( if cluster_service_pair in self.services: result.append(self.services[cluster_service_pair]) else: - if name_or_arn.startswith("arn:aws:ecs"): + if re.match(ARN_PARTITION_REGEX + ":ecs", name_or_arn): missing_arn = name_or_arn else: - missing_arn = f"arn:aws:ecs:{self.region_name}:{self.account_id}:service/{name}" + missing_arn = f"arn:{get_partition(self.region_name)}:ecs:{self.region_name}:{self.account_id}:service/{name}" failures.append({"arn": missing_arn, "reason": "MISSING"}) return result, failures @@ -2041,9 +2040,12 @@ def list_task_definition_families( @staticmethod def _parse_resource_arn(resource_arn: str) -> Dict[str, str]: regexes = [ - "^arn:aws:ecs:(?P[^:]+):(?P[^:]+):(?P[^:]+)/(?P[^:]+)/(?P[^:]+)/ecs-svc/(?P.*)$", - "^arn:aws:ecs:(?P[^:]+):(?P[^:]+):(?P[^:]+)/(?P[^:]+)/(?P.*)$", - "^arn:aws:ecs:(?P[^:]+):(?P[^:]+):(?P[^:]+)/(?P.*)$", + ARN_PARTITION_REGEX + + ":ecs:(?P[^:]+):(?P[^:]+):(?P[^:]+)/(?P[^:]+)/(?P[^:]+)/ecs-svc/(?P.*)$", + ARN_PARTITION_REGEX + + ":ecs:(?P[^:]+):(?P[^:]+):(?P[^:]+)/(?P[^:]+)/(?P.*)$", + ARN_PARTITION_REGEX + + ":ecs:(?P[^:]+):(?P[^:]+):(?P[^:]+)/(?P.*)$", ] for regex in regexes: match = re.match(regex, resource_arn) diff --git a/moto/efs/models.py b/moto/efs/models.py index ce1419243a3c..9094f2eda5e6 100644 --- a/moto/efs/models.py +++ b/moto/efs/models.py @@ -31,7 +31,7 @@ ) from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService -from moto.utilities.utils import md5_hash +from moto.utilities.utils import get_partition, md5_hash def _lookup_az_id(account_id: str, az_name: str) -> Optional[str]: @@ -56,7 +56,7 @@ def __init__( context: "EFSBackend", ): self.access_point_id = f"fsap-{mock_random.get_random_hex(8)}" - self.access_point_arn = f"arn:aws:elasticfilesystem:{region_name}:{account_id}:access-point/{self.access_point_id}" + self.access_point_arn = f"arn:{get_partition(region_name)}:elasticfilesystem:{region_name}:{account_id}:access-point/{self.access_point_id}" self.client_token = client_token self.file_system_id = file_system_id self.name = name @@ -161,7 +161,7 @@ def __init__( # Generate AWS-assigned parameters self.file_system_id = file_system_id - self.file_system_arn = f"arn:aws:elasticfilesystem:{region_name}:{account_id}:file-system/{self.file_system_id}" + self.file_system_arn = f"arn:{get_partition(region_name)}:elasticfilesystem:{region_name}:{account_id}:file-system/{self.file_system_id}" self.creation_time = time.time() self.owner_id = account_id diff --git a/moto/eks/models.py b/moto/eks/models.py index 10203074258e..b09e81f8fe1c 100644 --- a/moto/eks/models.py +++ b/moto/eks/models.py @@ -4,6 +4,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.utils import iso_8601_datetime_without_milliseconds from moto.moto_api._internal import mock_random as random +from moto.utilities.utils import get_partition from .exceptions import ( InvalidParameterException, @@ -11,7 +12,7 @@ ResourceInUseException, ResourceNotFoundException, ) -from .utils import get_partition, validate_role_arn +from .utils import validate_role_arn # String Templates CLUSTER_ARN_TEMPLATE = "arn:{partition}:eks:{region}:{account_id}:cluster/{name}" diff --git a/moto/elasticache/models.py b/moto/elasticache/models.py index 8f470006a35f..ffade587504e 100644 --- a/moto/elasticache/models.py +++ b/moto/elasticache/models.py @@ -5,6 +5,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import utcnow from moto.utilities.paginator import paginate +from moto.utilities.utils import get_partition from ..moto_api._internal import mock_random from .exceptions import ( @@ -39,7 +40,7 @@ def __init__( self.minimum_engine_version = "6.0" self.usergroupids: List[str] = [] self.region = region - self.arn = f"arn:aws:elasticache:{self.region}:{account_id}:user:{self.id}" + self.arn = f"arn:{get_partition(self.region)}:elasticache:{self.region}:{account_id}:user:{self.id}" class CacheCluster(BaseModel): @@ -124,9 +125,7 @@ def __init__( self.cache_cluster_create_time = utcnow() self.auth_token_last_modified_date = utcnow() self.cache_cluster_status = "available" - self.arn = ( - f"arn:aws:elasticache:{region_name}:{account_id}:cluster:{cache_cluster_id}" - ) + self.arn = f"arn:{get_partition(region_name)}:elasticache:{region_name}:{account_id}:cluster:{cache_cluster_id}" self.cache_node_id = str(mock_random.uuid4()) def get_tags(self) -> List[Dict[str, str]]: diff --git a/moto/elasticbeanstalk/utils.py b/moto/elasticbeanstalk/utils.py index e3e2e0f6bc81..bfeb7b8615af 100644 --- a/moto/elasticbeanstalk/utils.py +++ b/moto/elasticbeanstalk/utils.py @@ -1,10 +1,12 @@ +from moto.utilities.utils import get_partition + + def make_arn( region: str, account_id: str, resource_type: str, resource_path: str ) -> str: - arn_template = ( - "arn:aws:elasticbeanstalk:{region}:{account_id}:{resource_type}/{resource_path}" - ) + arn_template = "arn:{partition}:elasticbeanstalk:{region}:{account_id}:{resource_type}/{resource_path}" arn = arn_template.format( + partition=get_partition(region), region=region, account_id=account_id, resource_type=resource_type, diff --git a/moto/elastictranscoder/models.py b/moto/elastictranscoder/models.py index 8997c3ca8d06..0eb5f749693c 100644 --- a/moto/elastictranscoder/models.py +++ b/moto/elastictranscoder/models.py @@ -4,6 +4,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.moto_api._internal import mock_random as random +from moto.utilities.utils import get_partition class Pipeline(BaseModel): @@ -22,7 +23,7 @@ def __init__( b = "".join(random.choice(string.ascii_lowercase) for _ in range(6)) self.id = f"{a}-{b}" self.name = name - self.arn = f"arn:aws:elastictranscoder:{region}:{account_id}:pipeline/{self.id}" + self.arn = f"arn:{get_partition(region)}:elastictranscoder:{region}:{account_id}:pipeline/{self.id}" self.status = "Active" self.input_bucket = input_bucket self.output_bucket = output_bucket or content_config["Bucket"] diff --git a/moto/elb/models.py b/moto/elb/models.py index fcf5632bb6f4..330bcc6b5151 100644 --- a/moto/elb/models.py +++ b/moto/elb/models.py @@ -1,4 +1,5 @@ import datetime +import re from collections import OrderedDict from typing import Any, Dict, Iterable, List, Optional @@ -7,6 +8,7 @@ from moto.ec2.exceptions import InvalidInstanceIdError from moto.ec2.models import ec2_backends from moto.moto_api._internal import mock_random +from moto.utilities.utils import ARN_PARTITION_REGEX from .exceptions import ( BadHealthCheckDefinition, @@ -113,9 +115,8 @@ def __init__( "ssl_certificate_id", port.get("SSLCertificateId") ), ) - if ( - listener.ssl_certificate_id - and not listener.ssl_certificate_id.startswith("arn:aws:iam:") + if listener.ssl_certificate_id and not re.search( + f"{ARN_PARTITION_REGEX}:iam:", listener.ssl_certificate_id ): elb_backend._register_certificate( listener.ssl_certificate_id, self.dns_name @@ -369,8 +370,8 @@ def create_load_balancer_listeners( raise DuplicateListenerError(name, lb_port) break else: - if ssl_certificate_id and not ssl_certificate_id.startswith( - "arn:aws:iam::" + if ssl_certificate_id and not re.search( + f"{ARN_PARTITION_REGEX}:iam::", ssl_certificate_id ): self._register_certificate( ssl_certificate_id, balancer.dns_name diff --git a/moto/elbv2/models.py b/moto/elbv2/models.py index 011b5592aabb..e7081d726e54 100644 --- a/moto/elbv2/models.py +++ b/moto/elbv2/models.py @@ -1875,7 +1875,7 @@ def _certificate_exists(self, certificate_arn: str) -> bool: from moto.iam import iam_backends - cert = iam_backends[self.account_id]["global"].get_certificate_by_arn( + cert = iam_backends[self.account_id][self.partition].get_certificate_by_arn( certificate_arn ) if cert is not None: diff --git a/moto/elbv2/utils.py b/moto/elbv2/utils.py index 32b647f1938c..5447f9dc872a 100644 --- a/moto/elbv2/utils.py +++ b/moto/elbv2/utils.py @@ -1,6 +1,9 @@ +from moto.utilities.utils import get_partition + + def make_arn_for_load_balancer(account_id: str, name: str, region_name: str) -> str: - return f"arn:aws:elasticloadbalancing:{region_name}:{account_id}:loadbalancer/app/{name}/50dc6c495c0c9188" + return f"arn:{get_partition(region_name)}:elasticloadbalancing:{region_name}:{account_id}:loadbalancer/app/{name}/50dc6c495c0c9188" def make_arn_for_target_group(account_id: str, name: str, region_name: str) -> str: - return f"arn:aws:elasticloadbalancing:{region_name}:{account_id}:targetgroup/{name}/50dc6c495c0c9188" + return f"arn:{get_partition(region_name)}:elasticloadbalancing:{region_name}:{account_id}:targetgroup/{name}/50dc6c495c0c9188" diff --git a/moto/emr/models.py b/moto/emr/models.py index 536a26d0d13c..1e13818787f5 100644 --- a/moto/emr/models.py +++ b/moto/emr/models.py @@ -10,6 +10,7 @@ ResourceNotFoundException, ValidationException, ) +from moto.utilities.utils import get_partition from .utils import ( CamelToUnderscoresWalker, @@ -322,7 +323,7 @@ def __init__( @property def arn(self) -> str: - return f"arn:aws:elasticmapreduce:{self.emr_backend.region_name}:{self.emr_backend.account_id}:cluster/{self.id}" + return f"arn:{get_partition(self.emr_backend.region_name)}:elasticmapreduce:{self.emr_backend.region_name}:{self.emr_backend.account_id}:cluster/{self.id}" @property def instance_groups(self) -> List[FakeInstanceGroup]: diff --git a/moto/emrcontainers/models.py b/moto/emrcontainers/models.py index aa3f6876e1d6..0ce175ae3a4e 100644 --- a/moto/emrcontainers/models.py +++ b/moto/emrcontainers/models.py @@ -7,10 +7,11 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.utils import iso_8601_datetime_without_milliseconds +from moto.utilities.utils import get_partition from ..config.exceptions import ValidationException from .exceptions import ResourceNotFoundException -from .utils import get_partition, paginated_list, random_cluster_id, random_job_id +from .utils import paginated_list, random_cluster_id, random_job_id VIRTUAL_CLUSTER_ARN_TEMPLATE = "arn:{partition}:emr-containers:{region}:{account_id}:/virtualclusters/{virtual_cluster_id}" diff --git a/moto/emrcontainers/utils.py b/moto/emrcontainers/utils.py index 5ab3f79f77f5..e21129d32184 100644 --- a/moto/emrcontainers/utils.py +++ b/moto/emrcontainers/utils.py @@ -5,21 +5,6 @@ from moto.moto_api._internal import mock_random as random -def get_partition(region: str) -> str: - valid_matches = [ - # (region prefix, aws partition) - ("cn-", "aws-cn"), - ("us-gov-", "aws-us-gov"), - ("us-gov-iso-", "aws-iso"), - ("us-gov-iso-b-", "aws-iso-b"), - ] - - for prefix, partition in valid_matches: - if region.startswith(prefix): - return partition - return "aws" - - def random_id(size: int = 13) -> str: chars = list(range(10)) + list(string.ascii_lowercase) return "".join(str(random.choice(chars)) for x in range(size)) diff --git a/moto/emrserverless/models.py b/moto/emrserverless/models.py index 493f08440ebb..3dd3d3e00246 100644 --- a/moto/emrserverless/models.py +++ b/moto/emrserverless/models.py @@ -8,7 +8,8 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.utils import iso_8601_datetime_without_milliseconds -from moto.emrcontainers.utils import get_partition, paginated_list +from moto.emrcontainers.utils import paginated_list +from moto.utilities.utils import get_partition from .exceptions import ( AccessDeniedException, diff --git a/moto/es/models.py b/moto/es/models.py index 56b557a55a5e..6c7631752548 100644 --- a/moto/es/models.py +++ b/moto/es/models.py @@ -3,6 +3,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition from .exceptions import DomainNotFound @@ -49,7 +50,7 @@ def __init__( @property def arn(self) -> str: - return f"arn:aws:es:{self.region_name}:domain/{self.domain_id}" + return f"arn:{get_partition(self.region_name)}:es:{self.region_name}:domain/{self.domain_id}" def to_json(self) -> Dict[str, Any]: return { diff --git a/moto/events/models.py b/moto/events/models.py index 72fbd859b22e..8bacd7bf8e96 100644 --- a/moto/events/models.py +++ b/moto/events/models.py @@ -33,6 +33,7 @@ from moto.utilities.arns import parse_arn from moto.utilities.paginator import paginate from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .utils import _BASE_EVENT_MESSAGE, PAGINATION_MODEL, EventMessageType @@ -74,7 +75,7 @@ def arn(self) -> str: "" if self.event_bus_name == "default" else f"{self.event_bus_name}/" ) - return f"arn:aws:events:{self.region_name}:{self.account_id}:rule/{event_bus_name}{self.name}" + return f"arn:{get_partition(self.region_name)}:events:{self.region_name}:{self.account_id}:rule/{event_bus_name}{self.name}" @property def physical_resource_id(self) -> str: @@ -342,7 +343,7 @@ def __init__( self.account_id = account_id self.region = region_name self.name = name - self.arn = f"arn:aws:events:{self.region}:{account_id}:event-bus/{name}" + self.arn = f"arn:{get_partition(self.region)}:events:{self.region}:{account_id}:event-bus/{name}" self.tags = tags or [] self._statements: Dict[str, EventBusPolicyStatement] = {} @@ -554,7 +555,7 @@ def __init__( self.event_pattern = EventPattern.load(event_pattern) self.retention = retention if retention else 0 - self.arn = f"arn:aws:events:{region_name}:{account_id}:archive/{name}" + self.arn = f"arn:{get_partition(region_name)}:events:{region_name}:{account_id}:archive/{name}" self.creation_time = unix_time() self.state = "ENABLED" self.uuid = str(random.uuid4()) @@ -702,7 +703,7 @@ def __init__( self.event_end_time = end_time self.destination = destination - self.arn = f"arn:aws:events:{region_name}:{account_id}:replay/{name}" + self.arn = f"arn:{get_partition(region_name)}:events:{region_name}:{account_id}:replay/{name}" self.state = ReplayState.STARTING self.start_time = unix_time() self.end_time: Optional[float] = None @@ -766,7 +767,7 @@ def __init__( self.creation_time = unix_time() self.state = "AUTHORIZED" - self.arn = f"arn:aws:events:{region_name}:{account_id}:connection/{self.name}/{self.uuid}" + self.arn = f"arn:{get_partition(region_name)}:events:{region_name}:{account_id}:connection/{self.name}/{self.uuid}" def describe_short(self) -> Dict[str, Any]: """ @@ -843,7 +844,7 @@ def __init__( self.creation_time = unix_time() self.http_method = http_method self.state = "ACTIVE" - self.arn = f"arn:aws:events:{region_name}:{account_id}:api-destination/{name}/{self.uuid}" + self.arn = f"arn:{get_partition(region_name)}:events:{region_name}:{account_id}:api-destination/{name}/{self.uuid}" def describe(self) -> Dict[str, Any]: return { @@ -975,7 +976,7 @@ def parse(self) -> Dict[str, Any]: class PartnerEventSource(BaseModel): def __init__(self, region: str, name: str): self.name = name - self.arn = f"arn:aws:events:{region}::event-source/aws.partner/{name}" + self.arn = f"arn:{get_partition(region)}:events:{region}::event-source/aws.partner/{name}" self.created_on = unix_time() self.accounts: List[str] = [] self.state = "ACTIVE" @@ -1436,7 +1437,9 @@ def _put_permission_from_params( "InvalidParameterValue", r"StatementId must match ^[a-zA-Z0-9-_]{1,64}$" ) - principal_arn = {"AWS": f"arn:aws:iam::{principal}:root"} + principal_arn = { + "AWS": f"arn:{get_partition(self.region_name)}:iam::{principal}:root" + } stmt_condition = self._condition_param_to_stmt_condition(condition) event_bus.add_permission(statement_id, action, principal_arn, stmt_condition) @@ -1621,7 +1624,7 @@ def create_archive( [ { "Id": rule.name, - "Arn": f"arn:aws:events:{self.region_name}:::", + "Arn": f"arn:{get_partition(self.region_name)}:events:{self.region_name}:::", "InputTransformer": { "InputPathsMap": {}, "InputTemplate": json.dumps( diff --git a/moto/events/notifications.py b/moto/events/notifications.py index dd110ff7c8c7..ba0dd360290c 100644 --- a/moto/events/notifications.py +++ b/moto/events/notifications.py @@ -1,6 +1,8 @@ import json from typing import Any +from moto.utilities.utils import get_partition + from .utils import EventMessageType _EVENT_S3_OBJECT_CREATED: EventMessageType = { @@ -54,7 +56,9 @@ def _send_safe_notification( applicable_targets.extend(rule.targets) for target in applicable_targets: - if target.get("Arn", "").startswith("arn:aws:lambda"): + if target.get("Arn", "").startswith( + f"arn:{get_partition(region)}:lambda" + ): _invoke_lambda(account_id, target.get("Arn"), event=event) # type: ignore[arg-type] diff --git a/moto/firehose/models.py b/moto/firehose/models.py index 7ec291b7ae91..232a2b410c94 100644 --- a/moto/firehose/models.py +++ b/moto/firehose/models.py @@ -37,6 +37,7 @@ from moto.moto_api._internal import mock_random from moto.s3.models import s3_backends from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition MAX_TAGS_PER_DELIVERY_STREAM = 50 @@ -160,7 +161,7 @@ def __init__( del self.destinations[0][destination_name][old] self.delivery_stream_status = "ACTIVE" - self.delivery_stream_arn = f"arn:aws:firehose:{region}:{account_id}:deliverystream/{delivery_stream_name}" + self.delivery_stream_arn = f"arn:{get_partition(region)}:firehose:{region}:{account_id}:deliverystream/{delivery_stream_name}" self.create_timestamp = datetime.now(timezone.utc).isoformat() self.version_id = "1" # Used to track updates of destination configs @@ -469,7 +470,7 @@ def put_s3_records( batched_data = b"".join([b64decode(r["Data"]) for r in records]) try: - s3_backends[self.account_id]["global"].put_object( + s3_backends[self.account_id][self.partition].put_object( bucket_name, object_path, batched_data ) except Exception as exc: diff --git a/moto/forecast/models.py b/moto/forecast/models.py index ca4a51b4556f..19707754af6a 100644 --- a/moto/forecast/models.py +++ b/moto/forecast/models.py @@ -4,6 +4,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.utils import iso_8601_datetime_without_milliseconds +from moto.utilities.utils import get_partition from .exceptions import ( InvalidInputException, @@ -38,7 +39,7 @@ def __init__( self.creation_date = iso_8601_datetime_without_milliseconds(datetime.now()) self.modified_date = self.creation_date - self.arn = f"arn:aws:forecast:{region_name}:{account_id}:dataset-group/{dataset_group_name}" + self.arn = f"arn:{get_partition(region_name)}:forecast:{region_name}:{account_id}:dataset-group/{dataset_group_name}" self.dataset_arns = dataset_arns if dataset_arns else [] self.dataset_group_name = dataset_group_name self.domain = domain diff --git a/moto/glacier/models.py b/moto/glacier/models.py index c7ed6b052652..4d21456f65c1 100644 --- a/moto/glacier/models.py +++ b/moto/glacier/models.py @@ -5,7 +5,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.exceptions import JsonRESTError -from moto.utilities.utils import md5_hash +from moto.utilities.utils import get_partition, md5_hash from .utils import get_job_id @@ -100,7 +100,7 @@ def __init__(self, vault_name: str, account_id: str, region: str): self.region = region self.archives: Dict[str, Dict[str, Any]] = {} self.jobs: Dict[str, Job] = {} - self.arn = f"arn:aws:glacier:{region}:{account_id}:vaults/{vault_name}" + self.arn = f"arn:{get_partition(region)}:glacier:{region}:{account_id}:vaults/{vault_name}" def to_dict(self) -> Dict[str, Any]: archives_size = 0 diff --git a/moto/glue/models.py b/moto/glue/models.py index e6780dbbc662..4b0724e06976 100644 --- a/moto/glue/models.py +++ b/moto/glue/models.py @@ -10,6 +10,7 @@ from moto.core.utils import unix_time, utcnow from moto.moto_api._internal import mock_random from moto.moto_api._internal.managed_state_model import ManagedState +from moto.utilities.utils import get_partition from ..utilities.paginator import paginate from ..utilities.tagging_service import TaggingService @@ -126,7 +127,7 @@ def create_database( database_name, database_input, catalog_id=self.account_id ) self.databases[database_name] = database - resource_arn = f"arn:aws:glue:{self.region_name}:{self.account_id}:database/{database_name}" + resource_arn = f"arn:{get_partition(self.region_name)}:glue:{self.region_name}:{self.account_id}:database/{database_name}" self.tag_resource(resource_arn, tags) return database @@ -1213,7 +1214,7 @@ def __init__( self.version = 1 self.crawl_elapsed_time = 0 self.last_crawl_info = None - self.arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:crawler/{self.name}" + self.arn = f"arn:{get_partition(backend.region_name)}:glue:{backend.region_name}:{backend.account_id}:crawler/{self.name}" self.backend = backend self.backend.tag_resource(self.arn, tags) @@ -1347,9 +1348,7 @@ def __init__( self.source_control_details = source_control_details self.created_on = utcnow() self.last_modified_on = utcnow() - self.arn = ( - f"arn:aws:glue:{backend.region_name}:{backend.account_id}:job/{self.name}" - ) + self.arn = f"arn:{get_partition(backend.region_name)}:glue:{backend.region_name}:{backend.account_id}:job/{self.name}" self.backend = backend self.backend.tag_resource(self.arn, tags) @@ -1476,7 +1475,7 @@ def __init__( self.created_time = utcnow() self.updated_time = utcnow() self.status = "AVAILABLE" - self.registry_arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:registry/{self.name}" + self.registry_arn = f"arn:{get_partition(backend.region_name)}:glue:{backend.region_name}:{backend.account_id}:registry/{self.name}" self.schemas: Dict[str, FakeSchema] = OrderedDict() def as_dict(self) -> Dict[str, Any]: @@ -1500,9 +1499,9 @@ def __init__( description: Optional[str] = None, ): self.registry_name = registry_name - self.registry_arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:registry/{self.registry_name}" + self.registry_arn = f"arn:{get_partition(backend.region_name)}:glue:{backend.region_name}:{backend.account_id}:registry/{self.registry_name}" self.schema_name = schema_name - self.schema_arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:schema/{self.registry_name}/{self.schema_name}" + self.schema_arn = f"arn:{get_partition(backend.region_name)}:glue:{backend.region_name}:{backend.account_id}:schema/{self.registry_name}/{self.schema_name}" self.description = description self.data_format = data_format self.compatibility = compatibility @@ -1554,7 +1553,7 @@ def __init__( ): self.registry_name = registry_name self.schema_name = schema_name - self.schema_arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:schema/{self.registry_name}/{self.schema_name}" + self.schema_arn = f"arn:{get_partition(backend.region_name)}:glue:{backend.region_name}:{backend.account_id}:schema/{self.registry_name}/{self.schema_name}" self.schema_definition = schema_definition self.schema_version_status = AVAILABLE_STATUS self.version_number = version_number @@ -1631,7 +1630,7 @@ def __init__( self.request_origin = request_origin self.creation_time = utcnow() self.last_updated = self.creation_time - self.arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:session/{self.session_id}" + self.arn = f"arn:{get_partition(backend.region_name)}:glue:{backend.region_name}:{backend.account_id}:session/{self.session_id}" self.backend = backend self.backend.tag_resource(self.arn, tags) self.state = "READY" @@ -1689,7 +1688,7 @@ def __init__( else: self.state = "CREATED" self.event_batching_condition = event_batching_condition - self.arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:trigger/{self.name}" + self.arn = f"arn:{get_partition(backend.region_name)}:glue:{backend.region_name}:{backend.account_id}:trigger/{self.name}" self.backend = backend self.backend.tag_resource(self.arn, tags) diff --git a/moto/greengrass/models.py b/moto/greengrass/models.py index c9162b8ee7d9..3dc15f04ed66 100644 --- a/moto/greengrass/models.py +++ b/moto/greengrass/models.py @@ -8,6 +8,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition from .exceptions import ( GreengrassClientError, @@ -25,7 +26,7 @@ def __init__(self, account_id: str, region_name: str, name: str): self.region_name = region_name self.name = name self.id = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/cores/{self.id}" + self.arn = f"arn:{get_partition(region_name)}:greengrass:{region_name}:{account_id}:greengrass/definition/cores/{self.id}" self.created_at_datetime = utcnow() self.latest_version = "" self.latest_version_arn = "" @@ -58,7 +59,7 @@ def __init__( self.core_definition_id = core_definition_id self.definition = definition self.version = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/cores/{self.core_definition_id}/versions/{self.version}" + self.arn = f"arn:{get_partition(region_name)}:greengrass:{region_name}:{account_id}:greengrass/definition/cores/{self.core_definition_id}/versions/{self.version}" self.created_at_datetime = utcnow() def to_dict(self, include_detail: bool = False) -> Dict[str, Any]: @@ -87,7 +88,7 @@ def __init__( ): self.region_name = region_name self.id = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/devices/{self.id}" + self.arn = f"arn:{get_partition(region_name)}:greengrass:{region_name}:{account_id}:greengrass/definition/devices/{self.id}" self.created_at_datetime = utcnow() self.update_at_datetime = utcnow() self.latest_version = "" @@ -125,7 +126,7 @@ def __init__( self.device_definition_id = device_definition_id self.devices = devices self.version = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/devices/{self.device_definition_id}/versions/{self.version}" + self.arn = f"arn:{get_partition(region_name)}:greengrass:{region_name}:{account_id}:greengrass/definition/devices/{self.device_definition_id}/versions/{self.version}" self.created_at_datetime = utcnow() def to_dict(self, include_detail: bool = False) -> Dict[str, Any]: @@ -154,7 +155,7 @@ def __init__( ): self.region_name = region_name self.id = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/resources/{self.id}" + self.arn = f"arn:{get_partition(region_name)}:greengrass:{region_name}:{account_id}:greengrass/definition/resources/{self.id}" self.created_at_datetime = utcnow() self.update_at_datetime = utcnow() self.latest_version = "" @@ -190,7 +191,7 @@ def __init__( self.resource_definition_id = resource_definition_id self.resources = resources self.version = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/resources/{self.resource_definition_id}/versions/{self.version}" + self.arn = f"arn:{get_partition(region_name)}:greengrass:{region_name}:{account_id}:greengrass/definition/resources/{self.resource_definition_id}/versions/{self.version}" self.created_at_datetime = utcnow() def to_dict(self) -> Dict[str, Any]: @@ -215,7 +216,7 @@ def __init__( ): self.region_name = region_name self.id = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/definition/functions/{self.id}" + self.arn = f"arn:{get_partition(self.region_name)}:greengrass:{self.region_name}:{account_id}:greengrass/definition/functions/{self.id}" self.created_at_datetime = utcnow() self.update_at_datetime = utcnow() self.latest_version = "" @@ -255,7 +256,7 @@ def __init__( self.functions = functions self.default_config = default_config self.version = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/definition/functions/{self.function_definition_id}/versions/{self.version}" + self.arn = f"arn:{get_partition(self.region_name)}:greengrass:{self.region_name}:{account_id}:greengrass/definition/functions/{self.function_definition_id}/versions/{self.version}" self.created_at_datetime = utcnow() def to_dict(self) -> Dict[str, Any]: @@ -280,7 +281,7 @@ def __init__( ): self.region_name = region_name self.id = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/definition/subscriptions/{self.id}" + self.arn = f"arn:{get_partition(self.region_name)}:greengrass:{self.region_name}:{account_id}:greengrass/definition/subscriptions/{self.id}" self.created_at_datetime = utcnow() self.update_at_datetime = utcnow() self.latest_version = "" @@ -316,7 +317,7 @@ def __init__( self.subscription_definition_id = subscription_definition_id self.subscriptions = subscriptions self.version = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/definition/subscriptions/{self.subscription_definition_id}/versions/{self.version}" + self.arn = f"arn:{get_partition(self.region_name)}:greengrass:{self.region_name}:{account_id}:greengrass/definition/subscriptions/{self.subscription_definition_id}/versions/{self.version}" self.created_at_datetime = utcnow() def to_dict(self) -> Dict[str, Any]: @@ -336,7 +337,7 @@ def __init__(self, account_id: str, region_name: str, name: str): self.region_name = region_name self.group_id = str(mock_random.uuid4()) self.name = name - self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/groups/{self.group_id}" + self.arn = f"arn:{get_partition(self.region_name)}:greengrass:{self.region_name}:{account_id}:greengrass/groups/{self.group_id}" self.created_at_datetime = utcnow() self.last_updated_datetime = utcnow() self.latest_version = "" @@ -374,7 +375,7 @@ def __init__( self.region_name = region_name self.group_id = group_id self.version = str(mock_random.uuid4()) - self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/groups/{self.group_id}/versions/{self.version}" + self.arn = f"arn:{get_partition(self.region_name)}:greengrass:{self.region_name}:{account_id}:greengrass/groups/{self.group_id}/versions/{self.version}" self.created_at_datetime = utcnow() self.core_definition_version_arn = core_definition_version_arn self.device_definition_version_arn = device_definition_version_arn @@ -439,7 +440,7 @@ def __init__( self.update_at_datetime = utcnow() self.deployment_status = "InProgress" self.deployment_type = deployment_type - self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:/greengrass/groups/{self.group_id}/deployments/{self.id}" + self.arn = f"arn:{get_partition(self.region_name)}:greengrass:{self.region_name}:{account_id}:/greengrass/groups/{self.group_id}/deployments/{self.id}" def to_dict(self, include_detail: bool = False) -> Dict[str, Any]: obj = {"DeploymentId": self.id, "DeploymentArn": self.arn} diff --git a/moto/guardduty/models.py b/moto/guardduty/models.py index 8e02b95fbfac..e3174b98a5f5 100644 --- a/moto/guardduty/models.py +++ b/moto/guardduty/models.py @@ -4,6 +4,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition from .exceptions import DetectorNotFoundException, FilterNotFoundException @@ -30,6 +31,7 @@ def create_detector( detector = Detector( account_id=self.account_id, + region_name=self.region_name, created_at=datetime.now(), finding_publish_freq=finding_publishing_frequency, enabled=enable, @@ -160,6 +162,7 @@ class Detector(BaseModel): def __init__( self, account_id: str, + region_name: str, created_at: datetime, finding_publish_freq: str, enabled: bool, @@ -169,7 +172,7 @@ def __init__( self.id = mock_random.get_random_hex(length=32) self.created_at = created_at self.finding_publish_freq = finding_publish_freq - self.service_role = f"arn:aws:iam::{account_id}:role/aws-service-role/guardduty.amazonaws.com/AWSServiceRoleForAmazonGuardDuty" + self.service_role = f"arn:{get_partition(region_name)}:iam::{account_id}:role/aws-service-role/guardduty.amazonaws.com/AWSServiceRoleForAmazonGuardDuty" self.enabled = enabled self.updated_at = created_at self.datasources = datasources or {} diff --git a/moto/iam/access_control.py b/moto/iam/access_control.py index c7eb0c2d0066..c74c2bd492ae 100644 --- a/moto/iam/access_control.py +++ b/moto/iam/access_control.py @@ -40,6 +40,7 @@ S3SignatureDoesNotMatchError, ) from moto.sts.models import sts_backends +from moto.utilities.utils import get_partition from .models import IAMBackend, Policy, iam_backends @@ -47,21 +48,38 @@ def create_access_key( - account_id: str, access_key_id: str, headers: Dict[str, str] + account_id: str, partition: str, access_key_id: str, headers: Dict[str, str] ) -> Union["IAMUserAccessKey", "AssumedRoleAccessKey"]: if access_key_id.startswith("AKIA") or "X-Amz-Security-Token" not in headers: - return IAMUserAccessKey(account_id, access_key_id, headers) + return IAMUserAccessKey( + account_id=account_id, + partition=partition, + access_key_id=access_key_id, + headers=headers, + ) else: - return AssumedRoleAccessKey(account_id, access_key_id, headers) + return AssumedRoleAccessKey( + account_id=account_id, + partition=partition, + access_key_id=access_key_id, + headers=headers, + ) class IAMUserAccessKey: @property def backend(self) -> IAMBackend: - return iam_backends[self.account_id]["global"] + return iam_backends[self.account_id][self.partition] - def __init__(self, account_id: str, access_key_id: str, headers: Dict[str, str]): + def __init__( + self, + account_id: str, + partition: str, + access_key_id: str, + headers: Dict[str, str], + ): self.account_id = account_id + self.partition = partition iam_users = self.backend.list_users("/", None, None) for iam_user in iam_users: @@ -77,7 +95,9 @@ def __init__(self, account_id: str, access_key_id: str, headers: Dict[str, str]) @property def arn(self) -> str: - return f"arn:aws:iam::{self.account_id}:user/{self._owner_user_name}" + return ( + f"arn:{self.partition}:iam::{self.account_id}:user/{self._owner_user_name}" + ) def create_credentials(self) -> Credentials: return Credentials(self._access_key_id, self._secret_access_key) @@ -119,11 +139,18 @@ def collect_policies(self) -> List[Dict[str, str]]: class AssumedRoleAccessKey: @property def backend(self) -> IAMBackend: - return iam_backends[self.account_id]["global"] + return iam_backends[self.account_id][self.partition] - def __init__(self, account_id: str, access_key_id: str, headers: Dict[str, str]): + def __init__( + self, + account_id: str, + partition: str, + access_key_id: str, + headers: Dict[str, str], + ): self.account_id = account_id - for assumed_role in sts_backends[account_id]["global"].assumed_roles: + self.partition = partition + for assumed_role in sts_backends[account_id][partition].assumed_roles: if assumed_role.access_key_id == access_key_id: self._access_key_id = access_key_id self._secret_access_key = assumed_role.secret_access_key @@ -137,7 +164,7 @@ def __init__(self, account_id: str, access_key_id: str, headers: Dict[str, str]) @property def arn(self) -> str: - return f"arn:aws:sts::{self.account_id}:assumed-role/{self._owner_role_name}/{self._session_name}" + return f"arn:{self.partition}:sts::{self.account_id}:assumed-role/{self._owner_role_name}/{self._session_name}" def create_credentials(self) -> Credentials: return Credentials( @@ -206,6 +233,7 @@ def __init__( try: self._access_key = create_access_key( account_id=self.account_id, + partition=get_partition(self._region), access_key_id=credential_data[0], headers=headers, ) diff --git a/moto/iam/config.py b/moto/iam/config.py index 7443097c1494..3d1b58759a3e 100644 --- a/moto/iam/config.py +++ b/moto/iam/config.py @@ -1,4 +1,5 @@ import json +import re from typing import Any, Dict, List, Optional, Tuple import boto3 @@ -6,12 +7,14 @@ from moto.core.common_models import ConfigQueryModel from moto.core.exceptions import InvalidNextTokenException from moto.iam.models import IAMBackend, iam_backends +from moto.utilities.utils import ARN_PARTITION_REGEX class RoleConfigQuery(ConfigQueryModel[IAMBackend]): def list_config_service_resources( self, account_id: str, + partition: str, resource_ids: Optional[List[str]], resource_name: Optional[str], limit: int, @@ -26,7 +29,7 @@ def list_config_service_resources( # Stored in moto backend with the AWS-assigned random string like "AROA0BSVNSZKXVHS00SBJ" # Grab roles from backend; need the full values since names and id's are different - role_list = list(self.backends[account_id]["global"].roles.values()) + role_list = list(self.backends[account_id][partition].roles.values()) if not role_list: return [], None @@ -133,12 +136,13 @@ def list_config_service_resources( def get_config_resource( self, account_id: str, + partition: str, resource_id: str, resource_name: Optional[str] = None, backend_region: Optional[str] = None, resource_region: Optional[str] = None, ) -> Optional[Dict[str, Any]]: - role = self.backends[account_id]["global"].roles.get(resource_id) + role = self.backends[account_id][partition].roles.get(resource_id) if not role: return None @@ -164,6 +168,7 @@ class PolicyConfigQuery(ConfigQueryModel[IAMBackend]): def list_config_service_resources( self, account_id: str, + partition: str, resource_ids: Optional[List[str]], resource_name: Optional[str], limit: int, @@ -178,7 +183,7 @@ def list_config_service_resources( # Stored in moto backend with the arn like "arn:aws:iam::123456789012:policy/my-development-policy" policy_list = list( - self.backends[account_id]["global"].managed_policies.values() + self.backends[account_id][partition].managed_policies.values() ) # We don't want to include AWS Managed Policies. This technically needs to @@ -187,7 +192,9 @@ def list_config_service_resources( # custom configuration recorders, we'll just behave as default. policy_list = list( filter( - lambda policy: not policy.arn.startswith("arn:aws:iam::aws"), + lambda policy: not re.match( + ARN_PARTITION_REGEX + ":iam::aws", policy.arn + ), policy_list, ) ) @@ -305,6 +312,7 @@ def list_config_service_resources( def get_config_resource( self, account_id: str, + partition: str, resource_id: str, resource_name: Optional[str] = None, backend_region: Optional[str] = None, @@ -313,8 +321,10 @@ def get_config_resource( # policies are listed in the backend as arns, but we have to accept the PolicyID as the resource_id # we'll make a really crude search for it policy = None - for arn in self.backends[account_id]["global"].managed_policies.keys(): - policy_candidate = self.backends[account_id]["global"].managed_policies[arn] + for arn in self.backends[account_id][partition].managed_policies.keys(): + policy_candidate = self.backends[account_id][partition].managed_policies[ + arn + ] if policy_candidate.id == resource_id: policy = policy_candidate break diff --git a/moto/iam/models.py b/moto/iam/models.py index cf12506c428d..b052aa4aa7a1 100644 --- a/moto/iam/models.py +++ b/moto/iam/models.py @@ -16,7 +16,6 @@ from moto.core.common_models import BaseModel, CloudFormationModel from moto.core.exceptions import RESTError from moto.core.utils import ( - get_partition_from_region, iso_8601_datetime_with_milliseconds, iso_8601_datetime_without_milliseconds, unix_time, @@ -28,7 +27,12 @@ ) from moto.moto_api._internal import mock_random as random from moto.settings import load_iam_aws_managed_policies -from moto.utilities.utils import md5_hash +from moto.utilities.utils import ( + ARN_PARTITION_REGEX, + PARTITION_NAMES, + get_partition, + md5_hash, +) from ..utilities.tagging_service import TaggingService from .aws_managed_policies import aws_managed_policies_data @@ -69,23 +73,25 @@ def get_account_id_from(access_key: str) -> str: # wrapped in a list() to avoid thread pooling problems (issue #5881) for account_id, account in list(iam_backends.items()): - if access_key in account["global"].access_keys: - return account_id + for partition in PARTITION_NAMES: + if access_key in account[partition].access_keys: + return account_id return DEFAULT_ACCOUNT_ID def mark_account_as_visited( account_id: str, access_key: str, service: str, region: str ) -> None: + partition = get_partition(region) account = iam_backends[account_id] - if access_key in account["global"].access_keys: - key = account["global"].access_keys[access_key] + if access_key in account[partition].access_keys: + key = account[partition].access_keys[access_key] key.last_used = AccessKeyLastUsed( timestamp=utcnow(), service=service, region=region ) if key.role_arn: try: - role = account["global"].get_role_by_arn(key.role_arn) + role = account[partition].get_role_by_arn(key.role_arn) role.last_used = utcnow() except IAMNotFoundException: # User assumes a non-existing role @@ -115,8 +121,10 @@ def enabled_iso_8601(self) -> str: class VirtualMfaDevice: - def __init__(self, account_id: str, device_name: str): - self.serial_number = f"arn:aws:iam::{account_id}:mfa{device_name}" + def __init__(self, account_id: str, region_name: str, device_name: str): + self.serial_number = ( + f"arn:{get_partition(region_name)}:iam::{account_id}:mfa{device_name}" + ) random_base32_string = "".join( random.choice(string.ascii_uppercase + "234567") for _ in range(64) @@ -149,6 +157,7 @@ def __init__( self, name: str, account_id: str, + region: str, default_version_id: Optional[str] = None, description: Optional[str] = None, document: Optional[str] = None, @@ -164,6 +173,7 @@ def __init__( self.id = random_policy_id() self.path = path or "/" self.tags = tags or {} + self.partition = get_partition(region) if default_version_id: self.default_version_id = default_version_id @@ -206,21 +216,27 @@ def get_tags(self) -> List[Dict[str, str]]: class SAMLProvider(BaseModel): def __init__( - self, account_id: str, name: str, saml_metadata_document: Optional[str] = None + self, + account_id: str, + region_name: str, + name: str, + saml_metadata_document: Optional[str] = None, ): self.account_id = account_id + self.region_name = region_name self.name = name self.saml_metadata_document = saml_metadata_document @property def arn(self) -> str: - return f"arn:aws:iam::{self.account_id}:saml-provider/{self.name}" + return f"arn:{get_partition(self.region_name)}:iam::{self.account_id}:saml-provider/{self.name}" class OpenIDConnectProvider(BaseModel): def __init__( self, account_id: str, + region_name: str, url: str, thumbprint_list: List[str], client_id_list: List[str], @@ -230,6 +246,7 @@ def __init__( self._validate(url, thumbprint_list, client_id_list) self.account_id = account_id + self.region_name = region_name parsed_url = parse.urlparse(url) self.url = parsed_url.netloc + parsed_url.path self.thumbprint_list = thumbprint_list @@ -239,7 +256,7 @@ def __init__( @property def arn(self) -> str: - return f"arn:aws:iam::{self.account_id}:oidc-provider/{self.url}" + return f"arn:{get_partition(self.region_name)}:iam::{self.account_id}:oidc-provider/{self.url}" @property def created_iso_8601(self) -> str: @@ -337,7 +354,7 @@ class ManagedPolicy(Policy, CloudFormationModel): @property def backend(self) -> "IAMBackend": - return iam_backends[self.account_id]["global"] + return iam_backends[self.account_id][self.partition] is_attachable = True @@ -351,7 +368,9 @@ def detach_from(self, obj: Union["Role", "Group", "User"]) -> None: @property def arn(self) -> str: - return f"arn:aws:iam::{self.account_id}:policy{self.path}{self.name}" + return ( + f"arn:{self.partition}:iam::{self.account_id}:policy{self.path}{self.name}" + ) def to_config_dict(self) -> Dict[str, Any]: return { @@ -359,7 +378,7 @@ def to_config_dict(self) -> Dict[str, Any]: "configurationItemCaptureTime": str(self.create_date), "configurationItemStatus": "OK", "configurationStateId": str(int(unix_time())), - "arn": f"arn:aws:iam::{self.account_id}:policy/{self.name}", + "arn": f"arn:{self.partition}:iam::{self.account_id}:policy/{self.name}", "resourceType": "AWS::IAM::Policy", "resourceId": self.id, "resourceName": self.name, @@ -370,7 +389,7 @@ def to_config_dict(self) -> Dict[str, Any]: "configuration": { "policyName": self.name, "policyId": self.id, - "arn": f"arn:aws:iam::{self.account_id}:policy/{self.name}", + "arn": f"arn:{self.partition}:iam::{self.account_id}:policy/{self.name}", "path": self.path, "defaultVersionId": self.default_version_id, "attachmentCount": self.attachment_count, @@ -427,7 +446,8 @@ def create_from_cloudformation_json( # type: ignore[misc] role_names = properties.get("Roles", []) tags = properties.get("Tags", {}) - policy = iam_backends[account_id]["global"].create_policy( + partition = get_partition(region_name) + policy = iam_backends[account_id][partition].create_policy( description=description, path=path, policy_document=policy_document, @@ -435,15 +455,15 @@ def create_from_cloudformation_json( # type: ignore[misc] tags=tags, ) for group_name in group_names: - iam_backends[account_id]["global"].attach_group_policy( + iam_backends[account_id][partition].attach_group_policy( group_name=group_name, policy_arn=policy.arn ) for user_name in user_names: - iam_backends[account_id]["global"].attach_user_policy( + iam_backends[account_id][partition].attach_user_policy( user_name=user_name, policy_arn=policy.arn ) for role_name in role_names: - iam_backends[account_id]["global"].attach_role_policy( + iam_backends[account_id][partition].attach_role_policy( role_name=role_name, policy_arn=policy.arn ) return policy @@ -464,11 +484,12 @@ class AWSManagedPolicy(ManagedPolicy): @classmethod def from_data( # type: ignore[misc] - cls, name: str, account_id: str, data: Dict[str, Any] + cls, name: str, account_id: str, region_name: str, data: Dict[str, Any] ) -> "AWSManagedPolicy": return cls( name, account_id=account_id, + region=region_name, default_version_id=data.get("DefaultVersionId"), path=data.get("Path"), document=json.dumps(data.get("Document")), @@ -478,7 +499,7 @@ def from_data( # type: ignore[misc] @property def arn(self) -> str: - return f"arn:aws:iam::aws:policy{self.path}{self.name}" + return f"arn:{self.partition}:iam::aws:policy{self.path}{self.name}" class InlinePolicy(CloudFormationModel): @@ -542,7 +563,9 @@ def create_from_cloudformation_json( # type: ignore[misc] role_names = properties.get("Roles") group_names = properties.get("Groups") - return iam_backends[account_id]["global"].create_inline_policy( + return iam_backends[account_id][ + get_partition(region_name) + ].create_inline_policy( resource_name, policy_name, policy_document, @@ -586,7 +609,9 @@ def update_from_cloudformation_json( # type: ignore[misc] role_names = properties.get("Roles") group_names = properties.get("Groups") - return iam_backends[account_id]["global"].update_inline_policy( + return iam_backends[account_id][ + get_partition(region_name) + ].update_inline_policy( original_resource.name, policy_name, policy_document, @@ -603,7 +628,9 @@ def delete_from_cloudformation_json( # type: ignore[misc] account_id: str, region_name: str, ) -> None: - iam_backends[account_id]["global"].delete_inline_policy(resource_name) + iam_backends[account_id][get_partition(region_name)].delete_inline_policy( + resource_name + ) @staticmethod def is_replacement_update(properties: List[str]) -> bool: @@ -652,6 +679,7 @@ class Role(CloudFormationModel): def __init__( self, account_id: str, + partition: str, role_id: str, name: str, assume_role_policy_document: str, @@ -663,6 +691,7 @@ def __init__( linked_service: Optional[str] = None, ): self.account_id = account_id + self.partition = partition self.id = role_id self.name = name self.assume_role_policy_document = assume_role_policy_document @@ -711,7 +740,7 @@ def create_from_cloudformation_json( # type: ignore[misc] properties = cloudformation_json["Properties"] role_name = properties.get("RoleName", resource_name) - iam_backend = iam_backends[account_id]["global"] + iam_backend = iam_backends[account_id][get_partition(region_name)] role = iam_backend.create_role( role_name=role_name, assume_role_policy_document=properties["AssumeRolePolicyDocument"], @@ -738,7 +767,7 @@ def delete_from_cloudformation_json( # type: ignore[misc] account_id: str, region_name: str, ) -> None: - backend = iam_backends[account_id]["global"] + backend = iam_backends[account_id][get_partition(region_name)] for profile in backend.instance_profiles.values(): profile.delete_role(role_name=resource_name) @@ -751,8 +780,8 @@ def delete_from_cloudformation_json( # type: ignore[misc] @property def arn(self) -> str: if self._linked_service: - return f"arn:aws:iam::{self.account_id}:role/aws-service-role/{self._linked_service}/{self.name}" - return f"arn:aws:iam::{self.account_id}:role{self.path}{self.name}" + return f"arn:{self.partition}:iam::{self.account_id}:role/aws-service-role/{self._linked_service}/{self.name}" + return f"arn:{self.partition}:iam::{self.account_id}:role{self.path}{self.name}" def to_config_dict(self) -> Dict[str, Any]: _managed_policies = [] @@ -760,7 +789,7 @@ def to_config_dict(self) -> Dict[str, Any]: _managed_policies.append( { "policyArn": key, - "policyName": iam_backends[self.account_id]["global"] + "policyName": iam_backends[self.account_id][self.partition] .managed_policies[key] .name, } @@ -773,9 +802,8 @@ def to_config_dict(self) -> Dict[str, Any]: ) _instance_profiles = [] - for key, instance_profile in iam_backends[self.account_id][ - "global" - ].instance_profiles.items(): + backend = iam_backends[self.account_id][self.partition] + for key, instance_profile in backend.instance_profiles.items(): for _ in instance_profile.roles: _instance_profiles.append(instance_profile.to_embedded_config_dict()) break @@ -785,7 +813,7 @@ def to_config_dict(self) -> Dict[str, Any]: "configurationItemCaptureTime": str(self.create_date), "configurationItemStatus": "ResourceDiscovered", "configurationStateId": str(int(unix_time())), - "arn": f"arn:aws:iam::{self.account_id}:role/{self.name}", + "arn": f"arn:{self.partition}:iam::{self.account_id}:role/{self.name}", "resourceType": "AWS::IAM::Role", "resourceId": self.name, "resourceName": self.name, @@ -799,7 +827,7 @@ def to_config_dict(self) -> Dict[str, Any]: "path": self.path, "roleName": self.name, "roleId": self.id, - "arn": f"arn:aws:iam::{self.account_id}:role/{self.name}", + "arn": f"arn:{self.partition}:iam::{self.account_id}:role/{self.name}", "assumeRolePolicyDocument": parse.quote( self.assume_role_policy_document ) @@ -907,6 +935,7 @@ class InstanceProfile(CloudFormationModel): def __init__( self, account_id: str, + region_name: str, instance_profile_id: str, name: str, path: str, @@ -915,6 +944,7 @@ def __init__( ): self.id = instance_profile_id self.account_id = account_id + self.partition = get_partition(region_name) self.name = name self.path = path or "/" self.roles = roles if roles else [] @@ -946,7 +976,9 @@ def create_from_cloudformation_json( # type: ignore[misc] properties = cloudformation_json["Properties"] role_names = properties["Roles"] - return iam_backends[account_id]["global"].create_instance_profile( + return iam_backends[account_id][ + get_partition(region_name) + ].create_instance_profile( name=resource_name, path=properties.get("Path", "/"), role_names=role_names, @@ -960,7 +992,7 @@ def delete_from_cloudformation_json( # type: ignore[misc] account_id: str, region_name: str, ) -> None: - iam_backends[account_id]["global"].delete_instance_profile( + iam_backends[account_id][get_partition(region_name)].delete_instance_profile( resource_name, ignore_attached_roles=True ) @@ -969,7 +1001,7 @@ def delete_role(self, role_name: str) -> None: @property def arn(self) -> str: - return f"arn:aws:iam::{self.account_id}:instance-profile{self.path}{self.name}" + return f"arn:{self.partition}:iam::{self.account_id}:instance-profile{self.path}{self.name}" @property def physical_resource_id(self) -> str: @@ -996,7 +1028,7 @@ def to_embedded_config_dict(self) -> Dict[str, Any]: "path": role.path, "roleName": role.name, "roleId": role.id, - "arn": f"arn:aws:iam::{self.account_id}:role/{role.name}", + "arn": f"arn:{self.partition}:iam::{self.account_id}:role/{role.name}", "createDate": str(role.create_date), "assumeRolePolicyDocument": parse.quote( role.assume_role_policy_document @@ -1018,7 +1050,7 @@ def to_embedded_config_dict(self) -> Dict[str, Any]: "path": self.path, "instanceProfileName": self.name, "instanceProfileId": self.id, - "arn": f"arn:aws:iam::{self.account_id}:instance-profile/{role.name}", # pylint: disable=W0631 + "arn": f"arn:{self.partition}:iam::{self.account_id}:instance-profile/{role.name}", # pylint: disable=W0631 "createDate": str(self.create_date), "roles": roles, } @@ -1028,6 +1060,7 @@ class Certificate(BaseModel): def __init__( self, account_id: str, + region_name: str, cert_name: str, cert_body: str, private_key: str, @@ -1035,6 +1068,7 @@ def __init__( path: Optional[str] = None, ): self.account_id = account_id + self.partition = get_partition(region_name) self.cert_name = cert_name if cert_body: cert_body = cert_body.rstrip() @@ -1049,7 +1083,7 @@ def physical_resource_id(self) -> str: @property def arn(self) -> str: - return f"arn:aws:iam::{self.account_id}:server-certificate{self.path}{self.cert_name}" + return f"arn:{self.partition}:iam::{self.account_id}:server-certificate{self.path}{self.cert_name}" class SigningCertificate(BaseModel): @@ -1141,7 +1175,7 @@ def create_from_cloudformation_json( # type: ignore[misc] user_name = properties.get("UserName") status = properties.get("Status", "Active") - return iam_backends[account_id]["global"].create_access_key( + return iam_backends[account_id][get_partition(region_name)].create_access_key( user_name, status=status ) @@ -1171,7 +1205,9 @@ def update_from_cloudformation_json( # type: ignore[misc] else: # No Interruption properties = cloudformation_json.get("Properties", {}) status = properties.get("Status") - return iam_backends[account_id]["global"].update_access_key( + return iam_backends[account_id][ + get_partition(region_name) + ].update_access_key( original_resource.user_name, # type: ignore[arg-type] original_resource.access_key_id, status, @@ -1185,7 +1221,9 @@ def delete_from_cloudformation_json( # type: ignore[misc] account_id: str, region_name: str, ) -> None: - iam_backends[account_id]["global"].delete_access_key_by_name(resource_name) + iam_backends[account_id][get_partition(region_name)].delete_access_key_by_name( + resource_name + ) @staticmethod def is_replacement_update(properties: List[str]) -> bool: @@ -1217,8 +1255,9 @@ def uploaded_iso_8601(self) -> str: class Group(BaseModel): - def __init__(self, account_id: str, name: str, path: str = "/"): + def __init__(self, account_id: str, region_name: str, name: str, path: str = "/"): self.account_id = account_id + self.partition = get_partition(region_name) self.name = name self.id = random_resource_id() self.path = path @@ -1246,10 +1285,10 @@ def get_cfn_attribute(self, attribute_name: str) -> None: @property def arn(self) -> str: if self.path == "/": - return f"arn:aws:iam::{self.account_id}:group/{self.name}" + return f"arn:{self.partition}:iam::{self.account_id}:group/{self.name}" else: # The path must by definition end and start with a forward slash. So we don't have to add more slashes to the ARN - return f"arn:aws:iam::{self.account_id}:group{self.path}{self.name}" + return f"arn:{self.partition}:iam::{self.account_id}:group{self.path}{self.name}" def get_policy(self, policy_name: str) -> Dict[str, str]: try: @@ -1300,7 +1339,7 @@ def __init__( @property def arn(self) -> str: - partition = get_partition_from_region(self.region_name) + partition = get_partition(self.region_name) return f"arn:{partition}:iam::{self.account_id}:user{self.path}{self.name}" @property @@ -1525,7 +1564,7 @@ def create_from_cloudformation_json( # type: ignore[misc] ) -> "User": properties = cloudformation_json.get("Properties", {}) path = properties.get("Path") - user, _ = iam_backends[account_id]["global"].create_user( + user, _ = iam_backends[account_id][get_partition(region_name)].create_user( region_name=region_name, user_name=resource_name, path=path ) return user @@ -1570,7 +1609,7 @@ def delete_from_cloudformation_json( # type: ignore[misc] account_id: str, region_name: str, ) -> None: - iam_backends[account_id]["global"].delete_user(resource_name) + iam_backends[account_id][get_partition(region_name)].delete_user(resource_name) @staticmethod def is_replacement_update(properties: List[str]) -> bool: @@ -1764,7 +1803,7 @@ def _policies(self) -> int: customer_policies = [ policy for policy in self._iam_backend.managed_policies - if not policy.startswith("arn:aws:iam::aws:policy") + if not re.match(ARN_PARTITION_REGEX + ":iam::aws:policy", policy) ] return len(customer_policies) @@ -1816,7 +1855,9 @@ def __init__(self, region_name: str, account_id: str): self.account_aliases: List[str] = [] self.saml_providers: Dict[str, SAMLProvider] = {} self.open_id_providers: Dict[str, OpenIDConnectProvider] = {} - self.policy_arn_regex = re.compile(r"^arn:aws:iam::(aws|[0-9]*):policy/.*$") + self.policy_arn_regex = re.compile( + ARN_PARTITION_REGEX + r":iam::(aws|[0-9]*):policy/.*$" + ) self.virtual_mfa_devices: Dict[str, VirtualMfaDevice] = {} self.account_password_policy: Optional[AccountPasswordPolicy] = None self.account_summary = AccountSummary(self) @@ -1834,7 +1875,7 @@ def _init_aws_policies(self) -> List[ManagedPolicy]: # we periodically import them via `make aws_managed_policies` aws_managed_policies_data_parsed = json.loads(aws_managed_policies_data) return [ - AWSManagedPolicy.from_data(name, self.account_id, d) + AWSManagedPolicy.from_data(name, self.account_id, self.region_name, d) for name, d in aws_managed_policies_data_parsed.items() ] @@ -1958,6 +1999,7 @@ def create_policy( policy = ManagedPolicy( policy_name, account_id=self.account_id, + region=self.region_name, description=description, document=policy_document, path=path, @@ -2088,15 +2130,16 @@ def create_role( clean_tags = self._tag_verification(tags) role = Role( - self.account_id, - role_id, - role_name, - assume_role_policy_document, - path, - permissions_boundary, - description, - clean_tags, - max_session_duration, + account_id=self.account_id, + partition=self.partition, + role_id=role_id, + name=role_name, + assume_role_policy_document=assume_role_policy_document, + path=path, + permissions_boundary=permissions_boundary, + description=description, + tags=clean_tags, + max_session_duration=max_session_duration, linked_service=linked_service, ) self.roles[role_id] = role @@ -2370,7 +2413,13 @@ def create_instance_profile( roles = [self.get_role(role_name) for role_name in role_names] instance_profile = InstanceProfile( - self.account_id, instance_profile_id, name, path, roles, tags + account_id=self.account_id, + region_name=self.region_name, + instance_profile_id=instance_profile_id, + name=name, + path=path, + roles=roles, + tags=tags, ) self.instance_profiles[name] = instance_profile return instance_profile @@ -2446,7 +2495,13 @@ def upload_server_certificate( ) -> Certificate: certificate_id = random_resource_id() cert = Certificate( - self.account_id, cert_name, cert_body, private_key, cert_chain, path + account_id=self.account_id, + region_name=self.region_name, + cert_name=cert_name, + cert_body=cert_body, + private_key=private_key, + cert_chain=cert_chain, + path=path, ) self.certificates[certificate_id] = cert return cert @@ -2484,7 +2539,7 @@ def create_group(self, group_name: str, path: str = "/") -> Group: if group_name in self.groups: raise IAMConflictException(f"Group {group_name} already exists") - group = Group(self.account_id, group_name, path) + group = Group(self.account_id, self.region_name, group_name, path) self.groups[group_name] = group return group @@ -2811,8 +2866,8 @@ def get_access_key_last_used(self, access_key_id: str) -> Dict[str, Any]: def get_all_access_keys_for_all_users(self) -> List[AccessKey]: access_keys_list = [] for account in iam_backends.values(): - for user_name in account["global"].users: - access_keys_list += account["global"].list_access_keys(user_name) + for user_name in account[self.partition].users: + access_keys_list += account[self.partition].list_access_keys(user_name) return access_keys_list def list_access_keys(self, user_name: str) -> List[AccessKey]: @@ -2939,7 +2994,11 @@ def create_virtual_mfa_device( "Member must have length less than or equal to 512" ) - device = VirtualMfaDevice(self.account_id, path + device_name) + device = VirtualMfaDevice( + self.account_id, + region_name=self.region_name, + device_name=path + device_name, + ) if device.serial_number in self.virtual_mfa_devices: raise EntityAlreadyExists( @@ -3055,7 +3114,12 @@ def get_account_authorization_details( def create_saml_provider( self, name: str, saml_metadata_document: str ) -> SAMLProvider: - saml_provider = SAMLProvider(self.account_id, name, saml_metadata_document) + saml_provider = SAMLProvider( + account_id=self.account_id, + region_name=self.region_name, + name=name, + saml_metadata_document=saml_metadata_document, + ) self.saml_providers[name] = saml_provider return saml_provider @@ -3100,7 +3164,12 @@ def create_open_id_connect_provider( ) -> OpenIDConnectProvider: clean_tags = self._tag_verification(tags) open_id_provider = OpenIDConnectProvider( - self.account_id, url, thumbprint_list, client_id_list, clean_tags + account_id=self.account_id, + region_name=self.region_name, + url=url, + thumbprint_list=thumbprint_list, + client_id_list=client_id_list, + tags=clean_tags, ) if open_id_provider.arn in self.open_id_providers: @@ -3338,5 +3407,5 @@ def untag_instance_profile( iam_backends = BackendDict( - IAMBackend, "iam", use_boto3_regions=False, additional_regions=["global"] + IAMBackend, "iam", use_boto3_regions=False, additional_regions=PARTITION_NAMES ) diff --git a/moto/iam/policy_validation.py b/moto/iam/policy_validation.py index 5d47994a79a5..01e92f782efb 100644 --- a/moto/iam/policy_validation.py +++ b/moto/iam/policy_validation.py @@ -3,6 +3,7 @@ from typing import Any, Dict, List from moto.iam.exceptions import MalformedPolicyDocument +from moto.utilities.utils import PARTITION_NAMES VALID_TOP_ELEMENTS = ["Version", "Id", "Statement", "Conditions"] @@ -349,7 +350,10 @@ def _validate_resource_format(self, resource: str) -> None: return resource_partitions = resource_partitions[2].partition(":") - if resource_partitions[0] not in ["aws", "*"]: + if ( + resource_partitions[0] != "*" + and resource_partitions[0] not in PARTITION_NAMES + ): remaining_resource_parts = resource_partitions[2].split(":") arn1 = ( diff --git a/moto/iam/responses.py b/moto/iam/responses.py index 8008fa95e49f..562dd2b1e9d0 100644 --- a/moto/iam/responses.py +++ b/moto/iam/responses.py @@ -9,7 +9,7 @@ def __init__(self) -> None: @property def backend(self) -> IAMBackend: - return iam_backends[self.current_account]["global"] + return iam_backends[self.current_account][self.partition] def attach_role_policy(self) -> str: policy_arn = self._get_param("PolicyArn") diff --git a/moto/inspector2/models.py b/moto/inspector2/models.py index f2e797e11c33..814308005de5 100644 --- a/moto/inspector2/models.py +++ b/moto/inspector2/models.py @@ -6,6 +6,7 @@ from moto.core.utils import unix_time from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition class FilterResource(BaseModel): @@ -22,7 +23,7 @@ def __init__( ): filter_id = mock_random.get_random_hex(10) self.owner_id = account_id - self.arn = f"arn:aws:inspector2:{region}:{account_id}:owner/{self.owner_id}/filter/{filter_id}" + self.arn = f"arn:{get_partition(region)}:inspector2:{region}:{account_id}:owner/{self.owner_id}/filter/{filter_id}" self.name = name self.reason = reason self.action = action diff --git a/moto/instance_metadata/models.py b/moto/instance_metadata/models.py index 5a3d82c1763b..b329ac067fec 100644 --- a/moto/instance_metadata/models.py +++ b/moto/instance_metadata/models.py @@ -1,4 +1,5 @@ from moto.core.base_backend import BackendDict, BaseBackend +from moto.utilities.utils import PARTITION_NAMES class InstanceMetadataBackend(BaseBackend): @@ -9,5 +10,5 @@ class InstanceMetadataBackend(BaseBackend): InstanceMetadataBackend, "instance_metadata", use_boto3_regions=False, - additional_regions=["global"], + additional_regions=PARTITION_NAMES, ) diff --git a/moto/iot/models.py b/moto/iot/models.py index 2f96e55a80fd..fe2d0ba9df62 100644 --- a/moto/iot/models.py +++ b/moto/iot/models.py @@ -16,6 +16,7 @@ from moto.core.utils import utcnow from moto.moto_api._internal import mock_random as random from moto.utilities.paginator import paginate +from moto.utilities.utils import get_partition from .exceptions import ( CertificateStateException, @@ -48,7 +49,7 @@ def __init__( self.thing_name = thing_name self.thing_type = thing_type self.attributes = attributes - self.arn = f"arn:aws:iot:{region_name}:{account_id}:thing/{thing_name}" + self.arn = f"arn:{get_partition(region_name)}:iot:{region_name}:{account_id}:thing/{thing_name}" self.version = 1 # TODO: we need to handle "version"? @@ -112,7 +113,7 @@ def __init__( self.thing_type_id = str(random.uuid4()) # I don't know the rule of id t = time.time() self.metadata = {"deprecated": False, "creationDate": int(t * 1000) / 1000.0} - self.arn = f"arn:aws:iot:{self.region_name}:{self.account_id}:thingtype/{thing_type_name}" + self.arn = f"arn:{get_partition(self.region_name)}:iot:{self.region_name}:{self.account_id}:thingtype/{thing_type_name}" def to_dict(self) -> Dict[str, Any]: return { @@ -168,7 +169,7 @@ def __init__( } ] ) - self.arn = f"arn:aws:iot:{self.region_name}:{self.account_id}:thinggroup/{thing_group_name}" + self.arn = f"arn:{get_partition(self.region_name)}:iot:{self.region_name}:{self.account_id}:thinggroup/{thing_group_name}" self.things: Dict[str, FakeThing] = OrderedDict() def to_dict(self) -> Dict[str, Any]: @@ -194,7 +195,7 @@ def __init__( m = hashlib.sha256() m.update(certificate_pem.encode("utf-8")) self.certificate_id = m.hexdigest() - self.arn = f"arn:aws:iot:{region_name}:{account_id}:cert/{self.certificate_id}" + self.arn = f"arn:{get_partition(region_name)}:iot:{region_name}:{account_id}:cert/{self.certificate_id}" self.certificate_pem = certificate_pem self.status = status @@ -267,7 +268,7 @@ def __init__( ): self.name = name self.document = document - self.arn = f"arn:aws:iot:{region_name}:{account_id}:policy/{name}" + self.arn = f"arn:{get_partition(region_name)}:iot:{region_name}:{account_id}:policy/{name}" self.default_version_id = default_version_id self.versions = [ FakePolicyVersion(self.name, document, True, account_id, region_name) @@ -305,7 +306,7 @@ def __init__( version_id: int = 1, ): self.name = policy_name - self.arn = f"arn:aws:iot:{region_name}:{account_id}:policy/{policy_name}" + self.arn = f"arn:{get_partition(region_name)}:iot:{region_name}:{account_id}:policy/{policy_name}" self.document = document or {} self.is_default = is_default self._version_id = version_id @@ -369,7 +370,7 @@ def __init__( self.account_id = account_id self.region_name = region_name self.job_id = job_id - self.job_arn = f"arn:aws:iot:{self.region_name}:{self.account_id}:job/{job_id}" + self.job_arn = f"arn:{get_partition(self.region_name)}:iot:{self.region_name}:{self.account_id}:job/{job_id}" self.targets = targets self.document_source = document_source self.document = document @@ -539,7 +540,7 @@ def __init__( self.error_action = error_action or {} self.sql = sql self.aws_iot_sql_version = aws_iot_sql_version or "2016-03-23" - self.arn = f"arn:aws:iot:{self.region_name}:{self.account_id}:rule/{rule_name}" + self.arn = f"arn:{get_partition(self.region_name)}:iot:{self.region_name}:{self.account_id}:rule/{rule_name}" def to_get_dict(self) -> Dict[str, Any]: return { @@ -585,7 +586,7 @@ def __init__( f"operation: Service type {service_type} not recognized." ) self.domain_configuration_name = domain_configuration_name - self.domain_configuration_arn = f"arn:aws:iot:{region_name}:{account_id}:domainconfiguration/{domain_configuration_name}/{random.get_random_string(length=5)}" + self.domain_configuration_arn = f"arn:{get_partition(region_name)}:iot:{region_name}:{account_id}:domainconfiguration/{domain_configuration_name}/{random.get_random_string(length=5)}" self.domain_name = domain_name self.server_certificates = [] if server_certificate_arns: diff --git a/moto/ivs/models.py b/moto/ivs/models.py index dbea7b2780f9..f5a430f10de7 100644 --- a/moto/ivs/models.py +++ b/moto/ivs/models.py @@ -6,6 +6,7 @@ from moto.ivs.exceptions import ResourceNotFoundException from moto.moto_api._internal import mock_random from moto.utilities.paginator import paginate +from moto.utilities.utils import get_partition class IVSBackend(BaseBackend): @@ -36,9 +37,7 @@ def create_channel( channel_type: str, ) -> Tuple[Dict[str, Any], Dict[str, Any]]: channel_id = mock_random.get_random_string(12) - channel_arn = ( - f"arn:aws:ivs:{self.region_name}:{self.account_id}:channel/{channel_id}" - ) + channel_arn = f"arn:{get_partition(self.region_name)}:ivs:{self.region_name}:{self.account_id}:channel/{channel_id}" channel = { "arn": channel_arn, "authorized": authorized, @@ -54,7 +53,7 @@ def create_channel( } self.channels.append(channel) stream_key_id = mock_random.get_random_string(12) - stream_key_arn = f"arn:aws:ivs:{self.region_name}:{self.account_id}:stream-key/{stream_key_id}" + stream_key_arn = f"arn:{get_partition(self.region_name)}:ivs:{self.region_name}:{self.account_id}:stream-key/{stream_key_id}" stream_key = { "arn": stream_key_arn, "channelArn": channel_arn, diff --git a/moto/kinesis/models.py b/moto/kinesis/models.py index c683e30b4ced..51a4a21e0b1c 100644 --- a/moto/kinesis/models.py +++ b/moto/kinesis/models.py @@ -14,7 +14,7 @@ from moto.core.utils import unix_time, utcnow from moto.moto_api._internal import mock_random as random from moto.utilities.paginator import paginate -from moto.utilities.utils import md5_hash +from moto.utilities.utils import get_partition, md5_hash from .exceptions import ( ConsumerNotFound, @@ -51,7 +51,7 @@ def __init__( self.created = unix_time() self.stream_arn = stream_arn stream_name = stream_arn.split("/")[-1] - self.consumer_arn = f"arn:aws:kinesis:{region_name}:{account_id}:stream/{stream_name}/consumer/{consumer_name}" + self.consumer_arn = f"arn:{get_partition(region_name)}:kinesis:{region_name}:{account_id}:stream/{stream_name}/consumer/{consumer_name}" def to_json(self, include_stream_arn: bool = False) -> Dict[str, Any]: resp = { @@ -207,7 +207,7 @@ def __init__( ) self.region = region_name self.account_id = account_id - self.arn = f"arn:aws:kinesis:{region_name}:{account_id}:stream/{stream_name}" + self.arn = f"arn:{get_partition(region_name)}:kinesis:{region_name}:{account_id}:stream/{stream_name}" self.shards: Dict[str, Shard] = {} self.tags: Dict[str, str] = {} self.status = "ACTIVE" diff --git a/moto/kinesisvideo/models.py b/moto/kinesisvideo/models.py index d93d69b66237..9b35d961ca2b 100644 --- a/moto/kinesisvideo/models.py +++ b/moto/kinesisvideo/models.py @@ -4,6 +4,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import utcnow from moto.moto_api._internal import mock_random as random +from moto.utilities.utils import get_partition from .exceptions import ResourceInUseException, ResourceNotFoundException @@ -30,7 +31,7 @@ def __init__( self.status = "ACTIVE" self.version = random.get_random_string(include_digits=False, lower_case=True) self.creation_time = utcnow() - stream_arn = f"arn:aws:kinesisvideo:{region_name}:{account_id}:stream/{stream_name}/1598784211076" + stream_arn = f"arn:{get_partition(region_name)}:kinesisvideo:{region_name}:{account_id}:stream/{stream_name}/1598784211076" self.data_endpoint_number = random.get_random_hex() self.arn = stream_arn diff --git a/moto/kms/models.py b/moto/kms/models.py index 8f8c50f32013..43d78940f857 100644 --- a/moto/kms/models.py +++ b/moto/kms/models.py @@ -11,6 +11,7 @@ from moto.core.utils import unix_time from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ValidationException from .utils import ( @@ -70,12 +71,12 @@ def __init__( self.id = generate_key_id(multi_region) self.creation_date = unix_time() self.account_id = account_id + self.region = region self.policy = policy or self.generate_default_policy() self.key_usage = key_usage self.key_state = "Enabled" self.description = description or "" self.enabled = True - self.region = region self.multi_region = multi_region self.key_rotation_status = False self.deletion_date: Optional[datetime] = None @@ -84,7 +85,9 @@ def __init__( self.key_manager = "CUSTOMER" self.key_spec = key_spec or "SYMMETRIC_DEFAULT" self.private_key = generate_private_key(self.key_spec) - self.arn = f"arn:aws:kms:{region}:{account_id}:key/{self.id}" + self.arn = ( + f"arn:{get_partition(region)}:kms:{region}:{account_id}:key/{self.id}" + ) self.grants: Dict[str, Grant] = dict() @@ -141,7 +144,9 @@ def generate_default_policy(self) -> str: { "Sid": "Enable IAM User Permissions", "Effect": "Allow", - "Principal": {"AWS": f"arn:aws:iam::{self.account_id}:root"}, + "Principal": { + "AWS": f"arn:{get_partition(self.region)}:iam::{self.account_id}:root" + }, "Action": "kms:*", "Resource": "*", } diff --git a/moto/kms/responses.py b/moto/kms/responses.py index 4630fbead3b7..506a9404f5e9 100644 --- a/moto/kms/responses.py +++ b/moto/kms/responses.py @@ -6,6 +6,7 @@ from moto.core.responses import BaseResponse from moto.kms.utils import RESERVED_ALIASE_TARGET_KEY_IDS, RESERVED_ALIASES +from moto.utilities.utils import get_partition from .exceptions import ( AlreadyExistsException, @@ -43,7 +44,7 @@ def _display_arn(self, key_id: str) -> str: else: id_type = "key/" - return f"arn:aws:kms:{self.region}:{self.current_account}:{id_type}{key_id}" + return f"arn:{get_partition(self.region)}:kms:{self.region}:{self.current_account}:{id_type}{key_id}" def _validate_cmk_id(self, key_id: str) -> None: """Determine whether a CMK ID exists. @@ -278,7 +279,7 @@ def list_aliases(self) -> str: # TODO: add creation date and last updated in response_aliases response_aliases.append( { - "AliasArn": f"arn:aws:kms:{region}:{self.current_account}:{alias_name}", + "AliasArn": f"arn:{get_partition(region)}:kms:{region}:{self.current_account}:{alias_name}", "AliasName": alias_name, "TargetKeyId": target_key_id, } @@ -288,7 +289,7 @@ def list_aliases(self) -> str: a for a in response_aliases if a["AliasName"] == reserved_alias ] if not exsisting: - arn = f"arn:aws:kms:{region}:{self.current_account}:{reserved_alias}" + arn = f"arn:{get_partition(region)}:kms:{region}:{self.current_account}:{reserved_alias}" response_aliases.append( { "TargetKeyId": target_key_id, diff --git a/moto/logs/models.py b/moto/logs/models.py index 63d70027f639..c2666af675f4 100644 --- a/moto/logs/models.py +++ b/moto/logs/models.py @@ -17,6 +17,7 @@ from moto.s3.models import MissingBucket, s3_backends from moto.utilities.paginator import paginate from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .utils import PAGINATION_MODEL, EventMessageFilter @@ -34,7 +35,7 @@ def __init__( access_policy: Optional[str] = None, ): self.access_policy = access_policy - self.arn = f"arn:aws:logs:{region}:{account_id}:destination:{destination_name}" + self.arn = f"arn:{get_partition(region)}:logs:{region}:{account_id}:destination:{destination_name}" self.creation_time = int(unix_time_millis()) self.destination_name = destination_name self.role_arn = role_arn @@ -126,7 +127,7 @@ def __init__(self, log_group: "LogGroup", name: str): self.account_id = log_group.account_id self.region = log_group.region self.log_group = log_group - self.arn = f"arn:aws:logs:{self.region}:{self.account_id}:log-group:{log_group.name}:log-stream:{name}" + self.arn = f"arn:{get_partition(self.region)}:logs:{self.region}:{self.account_id}:log-group:{log_group.name}:log-stream:{name}" self.creation_time = int(unix_time_millis()) self.first_event_timestamp = None self.last_event_timestamp = None @@ -380,7 +381,9 @@ def __init__( self.name = name self.account_id = account_id self.region = region - self.arn = f"arn:aws:logs:{region}:{account_id}:log-group:{name}" + self.arn = ( + f"arn:{get_partition(region)}:logs:{region}:{account_id}:log-group:{name}" + ) self.creation_time = int(unix_time_millis()) self.streams: Dict[str, LogStream] = dict() # {name: LogStream} # AWS defaults to Never Expire for log group retention @@ -1240,7 +1243,7 @@ def create_export_task( to: int, ) -> str: try: - s3_backends[self.account_id]["global"].get_bucket(destination) + s3_backends[self.account_id][self.partition].get_bucket(destination) except MissingBucket: raise InvalidParameterException( "The given bucket does not exist. Please make sure the bucket is valid." @@ -1258,7 +1261,7 @@ def create_export_task( to, ) - s3_backends[self.account_id]["global"].put_object( + s3_backends[self.account_id][self.partition].put_object( bucket_name=destination, key_name="aws-logs-write-test", value=b"Permission Check Successful", @@ -1284,7 +1287,7 @@ def create_export_task( ) folder = str(mock_random.uuid4()) + "/" + stream_name.replace("/", "-") key_name = f"{destinationPrefix}/{folder}/000000.gz" - s3_backends[self.account_id]["global"].put_object( + s3_backends[self.account_id][self.partition].put_object( bucket_name=destination, key_name=key_name, value=gzip_compress(raw_logs.encode("utf-8")), diff --git a/moto/mediaconnect/models.py b/moto/mediaconnect/models.py index 59b7ecf2bf01..bbb34e72cdcd 100644 --- a/moto/mediaconnect/models.py +++ b/moto/mediaconnect/models.py @@ -6,6 +6,7 @@ from moto.mediaconnect.exceptions import NotFoundException from moto.moto_api._internal import mock_random as random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition class Flow(BaseModel): @@ -24,7 +25,7 @@ def __init__(self, account_id: str, region_name: str, **kwargs: Any): ) self._previous_status: Optional[str] = None self.description = "A Moto test flow" - self.flow_arn = f"arn:aws:mediaconnect:{region_name}:{account_id}:flow:{self.id}:{self.name}" + self.flow_arn = f"arn:{get_partition(region_name)}:mediaconnect:{region_name}:{account_id}:flow:{self.id}:{self.name}" self.egress_ip = "127.0.0.1" if self.source and not self.sources: self.sources = [ @@ -77,7 +78,7 @@ def _add_source_details( ) -> None: if source: source["sourceArn"] = ( - f"arn:aws:mediaconnect:{self.region_name}:{self.account_id}:source" + f"arn:{get_partition(self.region_name)}:mediaconnect:{self.region_name}:{self.account_id}:source" f":{flow_id}:{source['name']}" ) if not source.get("entitlementArn"): @@ -88,7 +89,7 @@ def _add_entitlement_details( ) -> None: if entitlement: entitlement["entitlementArn"] = ( - f"arn:aws:mediaconnect:{self.region_name}" + f"arn:{get_partition(self.region_name)}:mediaconnect:{self.region_name}" f":{self.account_id}:entitlement:{entitlement_id}" f":{entitlement['name']}" ) @@ -102,7 +103,7 @@ def _create_flow_add_details(self, flow: Flow) -> None: output["listenerAddress"] = f"{index}.0.0.0" output_id = random.uuid4().hex arn = ( - f"arn:aws:mediaconnect:{self.region_name}" + f"arn:{get_partition(self.region_name)}:mediaconnect:{self.region_name}" f":{self.account_id}:output:{output_id}:{output['name']}" ) output["outputArn"] = arn @@ -286,7 +287,7 @@ def add_flow_sources( for source in sources: source_id = random.uuid4().hex name = source["name"] - arn = f"arn:aws:mediaconnect:{self.region_name}:{self.account_id}:source:{source_id}:{name}" + arn = f"arn:{get_partition(self.region_name)}:mediaconnect:{self.region_name}:{self.account_id}:source:{source_id}:{name}" source["sourceArn"] = arn flow.sources = sources return sources @@ -351,7 +352,7 @@ def grant_flow_entitlements( for entitlement in entitlements: entitlement_id = random.uuid4().hex name = entitlement["name"] - arn = f"arn:aws:mediaconnect:{self.region_name}:{self.account_id}:entitlement:{entitlement_id}:{name}" + arn = f"arn:{get_partition(self.region_name)}:mediaconnect:{self.region_name}:{self.account_id}:entitlement:{entitlement_id}:{name}" entitlement["entitlementArn"] = arn flow.entitlements += entitlements diff --git a/moto/medialive/models.py b/moto/medialive/models.py index 434623b2956d..a5dd85a9c9f9 100644 --- a/moto/medialive/models.py +++ b/moto/medialive/models.py @@ -4,6 +4,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition class Input(BaseModel): @@ -135,7 +136,7 @@ def create_channel( The RequestID and Reserved parameters are not yet implemented """ channel_id = mock_random.uuid4().hex - arn = f"arn:aws:medialive:channel:{channel_id}" + arn = f"arn:{get_partition(self.region_name)}:medialive:channel:{channel_id}" channel = Channel( arn=arn, cdi_input_specification=cdi_input_specification, @@ -231,7 +232,7 @@ def create_input( The VPC and RequestId parameters are not yet implemented """ input_id = mock_random.uuid4().hex - arn = f"arn:aws:medialive:input:{input_id}" + arn = f"arn:{get_partition(self.region_name)}:medialive:input:{input_id}" a_input = Input( arn=arn, input_id=input_id, diff --git a/moto/mediapackage/models.py b/moto/mediapackage/models.py index 5c228069e9c5..ba05c1da4400 100644 --- a/moto/mediapackage/models.py +++ b/moto/mediapackage/models.py @@ -3,6 +3,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel +from moto.utilities.utils import get_partition from .exceptions import ClientError @@ -72,7 +73,7 @@ def __init__(self, region_name: str, account_id: str): def create_channel( self, description: str, channel_id: str, tags: Dict[str, str] ) -> Channel: - arn = f"arn:aws:mediapackage:channel:{channel_id}" + arn = f"arn:{get_partition(self.region_name)}:mediapackage:channel:{channel_id}" channel = Channel( arn=arn, description=description, @@ -117,7 +118,7 @@ def create_origin_endpoint( time_delay_seconds: int, whitelist: List[str], ) -> OriginEndpoint: - arn = f"arn:aws:mediapackage:origin_endpoint:{endpoint_id}" + arn = f"arn:{get_partition(self.region_name)}:mediapackage:origin_endpoint:{endpoint_id}" url = f"https://origin-endpoint.mediapackage.{self.region_name}.amazonaws.com/{endpoint_id}" origin_endpoint = OriginEndpoint( arn=arn, diff --git a/moto/mediastore/models.py b/moto/mediastore/models.py index 4502d2d952ac..55473c7d2a95 100644 --- a/moto/mediastore/models.py +++ b/moto/mediastore/models.py @@ -4,6 +4,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel +from moto.utilities.utils import get_partition from .exceptions import ( ContainerNotFoundException, @@ -45,7 +46,7 @@ def __init__(self, region_name: str, account_id: str): self._containers: Dict[str, Container] = OrderedDict() def create_container(self, name: str, tags: Dict[str, str]) -> Container: - arn = f"arn:aws:mediastore:container:{name}" + arn = f"arn:{get_partition(self.region_name)}:mediastore:container:{name}" container = Container( arn=arn, name=name, diff --git a/moto/moto_proxy/proxy3.py b/moto/moto_proxy/proxy3.py index 8af307daae62..6b20f8c557eb 100644 --- a/moto/moto_proxy/proxy3.py +++ b/moto/moto_proxy/proxy3.py @@ -16,6 +16,7 @@ from moto.core import DEFAULT_ACCOUNT_ID from moto.core.base_backend import BackendDict from moto.core.exceptions import RESTError +from moto.core.utils import get_equivalent_url_in_aws_domain from moto.moto_api._internal.models import moto_api_backend from . import debug, error, info, with_color @@ -34,8 +35,13 @@ def get_backend_for_host(self, host: str) -> Any: if host == f"http://localhost:{self.port}": return "moto_api" + # Handle non-standard AWS endpoint hostnames from ISO regions or custom S3 endpoints. + parsed_url, _ = get_equivalent_url_in_aws_domain(host) + # Remove the querystring from the URL, as we'll never match on that + clean_url = f"{parsed_url.scheme}://{parsed_url.netloc}{parsed_url.path}" + for backend, pattern in backend_url_patterns: - if pattern.match(host): + if pattern.match(clean_url): return backend def get_handler_for_host(self, host: str, path: str) -> Any: @@ -52,7 +58,7 @@ def get_handler_for_host(self, host: str, path: str) -> Any: if "us-east-1" in backend_dict[DEFAULT_ACCOUNT_ID]: backend = backend_dict[DEFAULT_ACCOUNT_ID]["us-east-1"] else: - backend = backend_dict[DEFAULT_ACCOUNT_ID]["global"] + backend = backend_dict[DEFAULT_ACCOUNT_ID]["aws"] else: backend = backend_dict["global"] diff --git a/moto/moto_server/werkzeug_app.py b/moto/moto_server/werkzeug_app.py index 951fd762248f..3449955be743 100644 --- a/moto/moto_server/werkzeug_app.py +++ b/moto/moto_server/werkzeug_app.py @@ -284,7 +284,7 @@ def create_backend_app(service: backends.SERVICE_NAMES) -> Flask: if "us-east-1" in backend_dict[DEFAULT_ACCOUNT_ID]: backend = backend_dict[DEFAULT_ACCOUNT_ID]["us-east-1"] else: - backend = backend_dict[DEFAULT_ACCOUNT_ID]["global"] + backend = backend_dict[DEFAULT_ACCOUNT_ID]["aws"] else: backend = backend_dict["global"] diff --git a/moto/mq/models.py b/moto/mq/models.py index 9f3afe1956ae..f0463e7cc89b 100644 --- a/moto/mq/models.py +++ b/moto/mq/models.py @@ -8,6 +8,7 @@ from moto.core.utils import unix_time from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .configuration import DEFAULT_CONFIGURATION_DATA from .exceptions import ( @@ -75,7 +76,7 @@ def __init__( engine_version: str, ): self.id = f"c-{mock_random.get_random_hex(6)}" - self.arn = f"arn:aws:mq:{region}:{account_id}:configuration:{self.id}" + self.arn = f"arn:{get_partition(region)}:mq:{region}:{account_id}:configuration:{self.id}" self.created = unix_time() self.name = name @@ -185,7 +186,9 @@ def __init__( ): self.name = name self.id = mock_random.get_random_hex(6) - self.arn = f"arn:aws:mq:{region}:{account_id}:broker:{self.id}" + self.arn = ( + f"arn:{get_partition(region)}:mq:{region}:{account_id}:broker:{self.id}" + ) self.state = "RUNNING" self.created = unix_time() diff --git a/moto/neptune/models.py b/moto/neptune/models.py index 0023cf7bde2c..ee11a5686ffe 100644 --- a/moto/neptune/models.py +++ b/moto/neptune/models.py @@ -8,7 +8,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import iso_8601_datetime_with_milliseconds from moto.moto_api._internal import mock_random as random -from moto.utilities.utils import load_resource +from moto.utilities.utils import get_partition, load_resource from .exceptions import DBClusterNotFoundError @@ -17,6 +17,7 @@ class GlobalCluster(BaseModel): def __init__( self, account_id: str, + region_name: str, global_cluster_identifier: str, engine: Optional[str], engine_version: Optional[str], @@ -25,9 +26,7 @@ def __init__( ): self.global_cluster_identifier = global_cluster_identifier self.global_cluster_resource_id = "cluster-" + random.get_random_hex(8) - self.global_cluster_arn = ( - f"arn:aws:rds::{account_id}:global-cluster:{global_cluster_identifier}" - ) + self.global_cluster_arn = f"arn:{get_partition(region_name)}:rds::{account_id}:global-cluster:{global_cluster_identifier}" self.engine = engine or "neptune" self.engine_version = engine_version or "1.2.0.0" self.storage_encrypted = ( @@ -111,7 +110,7 @@ def __init__( @property def db_cluster_arn(self) -> str: - return f"arn:aws:rds:{self.region_name}:{self.account_id}:cluster:{self.db_cluster_identifier}" + return f"arn:{get_partition(self.region_name)}:rds:{self.region_name}:{self.account_id}:cluster:{self.db_cluster_identifier}" def get_tags(self) -> List[Dict[str, str]]: return self.tags @@ -298,6 +297,7 @@ def create_global_cluster( ) -> GlobalCluster: cluster = GlobalCluster( account_id=self.account_id, + region_name=self.region_name, global_cluster_identifier=global_cluster_identifier, engine=engine, engine_version=engine_version, diff --git a/moto/networkmanager/exceptions.py b/moto/networkmanager/exceptions.py index 1780cb570937..301e39ff47ec 100644 --- a/moto/networkmanager/exceptions.py +++ b/moto/networkmanager/exceptions.py @@ -1 +1,13 @@ """Exceptions raised by the networkmanager service.""" + +from moto.core.exceptions import JsonRESTError + + +class ValidationError(JsonRESTError): + def __init__(self, message: str): + super().__init__("ValidationException", message) + + +class ResourceNotFound(JsonRESTError): + def __init__(self, message: str): + super().__init__(__class__.__name__, message) # type: ignore diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 8608ccdfe431..3c3dddc5d516 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -1,24 +1,50 @@ """NetworkManagerBackend class with methods for supported APIs.""" -from typing import Dict, List, Optional +import random +from datetime import datetime, timezone +from typing import Any, Dict, List, Optional from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel -from moto.utilities.tagging_service import TaggingService +from moto.ec2.utils import HEX_CHARS +from moto.utilities.paginator import paginate +from moto.utilities.utils import PARTITION_NAMES + +from .exceptions import ResourceNotFound, ValidationError + +PAGINATION_MODEL = { + "describe_global_networks": { + "input_token": "next_token", + "limit_key": "max_results", + "limit_default": 100, + "unique_attribute": "global_network_arn", + }, + "list_core_networks": { + "input_token": "next_token", + "limit_key": "max_results", + "limit_default": 100, + "unique_attribute": "core_network_arn", + }, +} class GlobalNetwork(BaseModel): def __init__( - self, description: Optional[str], tags: Optional[List[Dict[str, str]]] + self, + account_id: str, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], ): self.description = description - self.tags = tags - self.global_network_id = "global-network-1" - self.global_network_arn = "arn:aws:networkmanager:us-west-2:123456789012:global-network/global-network-1" - self.created_at = "2021-07-15T12:34:56Z" + self.tags = tags or [] + self.global_network_id = "global-network-" + "".join( + random.choice(HEX_CHARS) for _ in range(18) + ) + self.global_network_arn = f"arn:aws:networkmanager:{account_id}:global-network/{self.global_network_id}" + self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" - def to_dict(self): + def to_dict(self) -> Dict[str, Any]: return { "GlobalNetworkId": self.global_network_id, "GlobalNetworkArn": self.global_network_arn, @@ -29,27 +55,154 @@ def to_dict(self): } +class CoreNetwork(BaseModel): + def __init__( + self, + account_id: str, + global_network_id: str, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], + policy_document: str, + client_token: str, + ): + self.global_network_id = global_network_id + self.description = description + self.tags = tags or [] + self.policy_document = policy_document + self.client_token = client_token + self.core_network_id = "core-network-" + "".join( + random.choice(HEX_CHARS) for _ in range(18) + ) + self.core_network_arn = ( + f"arn:aws:networkmanager:{account_id}:core-network/{self.core_network_id}" + ) + + self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") + self.state = "PENDING" + + def to_dict(self) -> Dict[str, Any]: + return { + "CoreNetworkId": self.core_network_id, + "CoreNetworkArn": self.core_network_arn, + "GlobalNetworkId": self.global_network_id, + "Description": self.description, + "Tags": self.tags, + "PolicyDocument": self.policy_document, + "State": self.state, + "CreatedAt": self.created_at, + } + + class NetworkManagerBackend(BaseBackend): """Implementation of NetworkManager APIs.""" - def __init__(self, region_name, account_id): + def __init__(self, region_name: str, account_id: str) -> None: super().__init__(region_name, account_id) self.global_networks: Dict[str, GlobalNetwork] = {} - self.tags: TaggingService = TaggingService() + self.core_networks: Dict[str, CoreNetwork] = {} # add methods from here - def create_global_network(self, description, tags): - global_network = GlobalNetwork(description, tags) + def create_global_network( + self, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], + ) -> GlobalNetwork: + global_network = GlobalNetwork( + description=description, + tags=tags, + account_id=self.account_id, + ) gnw_id = global_network.global_network_id self.global_networks[gnw_id] = global_network - self.tags.tag_resource(gnw_id, tags) return global_network + def create_core_network( + self, + global_network_id: str, + description: Optional[str], + tags: Optional[List[Dict[str, str]]], + policy_document: str, + client_token: str, + ) -> CoreNetwork: + # check if global network exists + if global_network_id not in self.global_networks: + raise ResourceNotFound("Resource not found.") + + core_network = CoreNetwork( + global_network_id=global_network_id, + description=description, + tags=tags, + policy_document=policy_document, + client_token=client_token, + account_id=self.account_id, + ) + cnw_id = core_network.core_network_id + self.core_networks[cnw_id] = core_network + return core_network + + def delete_core_network(self, core_network_id: str) -> CoreNetwork: + # Check if core network exists + if core_network_id not in self.core_networks: + raise ResourceNotFound("Resource not found.") + core_network = self.core_networks.pop(core_network_id) + core_network.state = "DELETING" + return core_network + + def tag_resource(self, resource_arn: str, tags: List[Dict[str, Any]]) -> None: + resource = self._get_resource_from_arn(resource_arn) + resource.tags.extend(tags) + + def untag_resource(self, resource_arn: str, tag_keys: Optional[List[str]]) -> None: + resource = self._get_resource_from_arn(resource_arn) + if tag_keys: + resource.tags = [tag for tag in resource.tags if tag["Key"] not in tag_keys] + + @paginate(pagination_model=PAGINATION_MODEL) + def list_core_networks(self) -> List[CoreNetwork]: + return list(self.core_networks.values()) + + def get_core_network(self, core_network_id: str) -> CoreNetwork: + if core_network_id not in self.core_networks: + raise ResourceNotFound("Resource not found.") + core_network = self.core_networks[core_network_id] + return core_network + + def _get_resource_from_arn(self, arn: str) -> Any: + resources = { + "core-network": self.core_networks, + "global-network": self.global_networks, + } + target_resource, target_name = arn.split(":")[-1].split("/") + try: + resource = resources.get(target_resource).get(target_name) # type: ignore + except KeyError: + message = f"Could not find {target_resource} with name {target_name}" + raise ValidationError(message=message) + return resource + + @paginate(pagination_model=PAGINATION_MODEL) + def describe_global_networks( + self, global_network_ids: List[str] + ) -> List[GlobalNetwork]: + queried_global_networks = [] + if not global_network_ids: + queried_global_networks = list(self.global_networks.values()) + elif isinstance(global_network_ids, str): + if global_network_ids not in self.global_networks: + raise ResourceNotFound + queried_global_networks.append(self.global_networks[global_network_ids]) + else: + for id in global_network_ids: + if id in self.global_networks: + global_network = self.global_networks[id] + queried_global_networks.append(global_network) + return queried_global_networks + networkmanager_backends = BackendDict( NetworkManagerBackend, "networkmanager", use_boto3_regions=False, - additional_regions=["global"], + additional_regions=PARTITION_NAMES, ) diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index 2bdcf16cb7c5..bf79fc411dfe 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -1,29 +1,27 @@ """Handles incoming networkmanager requests, invokes methods, returns responses.""" import json +from urllib.parse import unquote +from moto.core.common_types import TYPE_RESPONSE from moto.core.responses import BaseResponse -from .models import networkmanager_backends +from .models import NetworkManagerBackend, networkmanager_backends class NetworkManagerResponse(BaseResponse): """Handler for NetworkManager requests and responses.""" - def __init__(self): + def __init__(self) -> None: super().__init__(service_name="networkmanager") @property - def networkmanager_backend(self): - """Return backend instance specific for this region.""" - # TODO - # networkmanager_backends is not yet typed - # Please modify moto/backends.py to add the appropriate type annotations for this service - return networkmanager_backends[self.current_account]["global"] + def networkmanager_backend(self) -> NetworkManagerBackend: + return networkmanager_backends[self.current_account][self.partition] # add methods from here - def create_global_network(self): + def create_global_network(self) -> str: params = json.loads(self.body) description = params.get("Description") tags = params.get("Tags") @@ -33,5 +31,83 @@ def create_global_network(self): ) return json.dumps(dict(GlobalNetwork=global_network.to_dict())) + def create_core_network(self) -> str: + params = json.loads(self.body) + global_network_id = params.get("GlobalNetworkId") + description = params.get("Description") + tags = params.get("Tags") + policy_document = params.get("PolicyDocument") + client_token = params.get("ClientToken") + core_network = self.networkmanager_backend.create_core_network( + global_network_id=global_network_id, + description=description, + tags=tags, + policy_document=policy_document, + client_token=client_token, + ) + return json.dumps(dict(CoreNetwork=core_network.to_dict())) + + def delete_core_network(self) -> str: + core_network_id = unquote(self.path.split("/")[-1]) + core_network = self.networkmanager_backend.delete_core_network( + core_network_id=core_network_id, + ) + return json.dumps(dict(CoreNetwork=core_network.to_dict())) + + def tag_resource(self) -> TYPE_RESPONSE: + params = json.loads(self.body) + tags = params.get("Tags") + resource_arn = unquote(self.path.split("/")[-1]) -# add templates from here + self.networkmanager_backend.tag_resource( + resource_arn=resource_arn, + tags=tags, + ) + return 200, {}, json.dumps({}) + + def untag_resource(self) -> TYPE_RESPONSE: + params = self._get_params() + tag_keys = params.get("tagKeys") + resource_arn = unquote(self.path.split("/")[-1]) + self.networkmanager_backend.untag_resource( + resource_arn=resource_arn, + tag_keys=tag_keys, + ) + return 200, {}, json.dumps({}) + + def list_core_networks(self) -> str: + params = self._get_params() + max_results = params.get("maxResults") + next_token = params.get("nextToken") + core_networks, next_token = self.networkmanager_backend.list_core_networks( + max_results=max_results, + next_token=next_token, + ) + list_core_networks = [core_network.to_dict() for core_network in core_networks] + return json.dumps(dict(CoreNetworks=list_core_networks, NextToken=next_token)) + + def get_core_network(self) -> str: + core_network_id = unquote(self.path.split("/")[-1]) + core_network = self.networkmanager_backend.get_core_network( + core_network_id=core_network_id, + ) + return json.dumps(dict(CoreNetwork=core_network.to_dict())) + + def describe_global_networks(self) -> str: + params = self._get_params() + global_network_ids = params.get("globalNetworkIds") + max_results = params.get("maxResults") + next_token = params.get("nextToken") + global_networks, next_token = ( + self.networkmanager_backend.describe_global_networks( + global_network_ids=global_network_ids, + max_results=max_results, + next_token=next_token, + ) + ) + list_global_networks = [ + global_network.to_dict() for global_network in global_networks + ] + return json.dumps( + dict(GlobalNetworks=list_global_networks, nextToken=next_token) + ) diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index 6371a6568d4e..861742ed4b97 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -7,6 +7,10 @@ ] url_paths = { - "0/.*$": NetworkManagerResponse.dispatch, + "{0}/$": NetworkManagerResponse.dispatch, "{0}/global-networks$": NetworkManagerResponse.dispatch, + "{0}/core-networks$": NetworkManagerResponse.dispatch, + "{0}/core-networks/(?P[^/.]+)$": NetworkManagerResponse.dispatch, + "{0}/global-networks/(?P[^/.]+)$": NetworkManagerResponse.dispatch, + "{0}/tags/(?P[^/.]+)$": NetworkManagerResponse.dispatch, } diff --git a/moto/opensearch/models.py b/moto/opensearch/models.py index 1b58b218340d..5032e0adc359 100644 --- a/moto/opensearch/models.py +++ b/moto/opensearch/models.py @@ -3,6 +3,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .data import compatible_versions from .exceptions import EngineTypeNotFoundException, ResourceNotFoundException @@ -66,7 +67,9 @@ def __init__( ): self.domain_id = f"{account_id}/{domain_name}" self.domain_name = domain_name - self.arn = f"arn:aws:es:{region}:{account_id}:domain/{domain_name}" + self.arn = ( + f"arn:{get_partition(region)}:es:{region}:{account_id}:domain/{domain_name}" + ) self.engine_version = engine_version or "OpenSearch 2.5" self.cluster_config = cluster_config or {} self.ebs_options = ebs_options or {"EBSEnabled": False} diff --git a/moto/opsworks/models.py b/moto/opsworks/models.py index 913c1b492613..1add8b275e84 100644 --- a/moto/opsworks/models.py +++ b/moto/opsworks/models.py @@ -5,6 +5,7 @@ from moto.core.utils import utcnow from moto.ec2 import ec2_backends from moto.moto_api._internal import mock_random as random +from moto.utilities.utils import get_partition from .exceptions import ResourceNotFoundException, ValidationException @@ -362,7 +363,7 @@ def generate_hostname(self) -> str: @property def arn(self) -> str: - return f"arn:aws:opsworks:{self.region}:{self.account_number}:stack/{self.id}" + return f"arn:{get_partition(self.region)}:opsworks:{self.region}:{self.account_number}:stack/{self.id}" def to_dict(self) -> Dict[str, Any]: response = { diff --git a/moto/organizations/models.py b/moto/organizations/models.py index 080caedd6a62..eacdcdee60e3 100644 --- a/moto/organizations/models.py +++ b/moto/organizations/models.py @@ -23,12 +23,13 @@ TargetNotFoundException, ) from moto.utilities.paginator import paginate +from moto.utilities.utils import PARTITION_NAMES, get_partition from .utils import PAGINATION_MODEL class FakeOrganization(BaseModel): - def __init__(self, account_id: str, feature_set: str): + def __init__(self, account_id: str, region_name: str, feature_set: str): self.id = utils.make_random_org_id() self.root_id = utils.make_random_root_id() self.feature_set = feature_set @@ -40,14 +41,21 @@ def __init__(self, account_id: str, feature_set: str): # This field is deprecated in AWS, but we'll return it for old time's sake {"Type": "SERVICE_CONTROL_POLICY", "Status": "ENABLED"} ] + self.region = region_name @property def arn(self) -> str: - return utils.ORGANIZATION_ARN_FORMAT.format(self.master_account_id, self.id) + partition = get_partition(self.region) + return utils.ORGANIZATION_ARN_FORMAT.format( + partition, self.master_account_id, self.id + ) @property def master_account_arn(self) -> str: - return utils.MASTER_ACCOUNT_ARN_FORMAT.format(self.master_account_id, self.id) + partition = get_partition(self.region) + return utils.MASTER_ACCOUNT_ARN_FORMAT.format( + partition, self.master_account_id, self.id + ) def describe(self) -> Dict[str, Any]: return { @@ -66,6 +74,7 @@ def describe(self) -> Dict[str, Any]: class FakeAccount(BaseModel): def __init__(self, organization: FakeOrganization, **kwargs: Any): self.type = "ACCOUNT" + self.region = organization.region self.organization_id = organization.id self.master_account_id = organization.master_account_id self.create_account_status_id = utils.make_random_create_account_status_id() @@ -81,8 +90,9 @@ def __init__(self, organization: FakeOrganization, **kwargs: Any): @property def arn(self) -> str: + partition = get_partition(self.region) return utils.ACCOUNT_ARN_FORMAT.format( - self.master_account_id, self.organization_id, self.id + partition, self.master_account_id, self.organization_id, self.id ) @property @@ -118,6 +128,7 @@ def close(self) -> None: class FakeOrganizationalUnit(BaseModel): def __init__(self, organization: FakeOrganization, **kwargs: Any): self.type = "ORGANIZATIONAL_UNIT" + self.region = organization.region self.organization_id = organization.id self.master_account_id = organization.master_account_id self.id = utils.make_random_ou_id(organization.root_id) @@ -129,8 +140,9 @@ def __init__(self, organization: FakeOrganization, **kwargs: Any): @property def arn(self) -> str: + partition = get_partition(self.region) return self._arn_format.format( - self.master_account_id, self.organization_id, self.id + partition, self.master_account_id, self.organization_id, self.id ) def describe(self) -> Dict[str, Dict[str, Any]]: @@ -199,6 +211,7 @@ def __init__(self, organization: FakeOrganization, **kwargs: Any): self.type = kwargs.get("Type", "") self.id = utils.make_random_policy_id() self.aws_managed = False + self.region = organization.region self.organization_id = organization.id self.master_account_id = organization.master_account_id self.attachments: List[Any] = [] @@ -217,8 +230,9 @@ def __init__(self, organization: FakeOrganization, **kwargs: Any): @property def arn(self) -> str: + partition = get_partition(self.region) return self._arn_format.format( - self.master_account_id, self.organization_id, self.id + partition, self.master_account_id, self.organization_id, self.id ) def describe(self) -> Dict[str, Any]: @@ -375,8 +389,12 @@ def _get_root_by_id(self, root_id: str) -> FakeRoot: return root # type: ignore[return-value] - def create_organization(self, **kwargs: Any) -> Dict[str, Any]: - self.org = FakeOrganization(self.account_id, kwargs.get("FeatureSet") or "ALL") + def create_organization(self, region: str, **kwargs: Any) -> Dict[str, Any]: + self.org = FakeOrganization( + self.account_id, + region_name=region, + feature_set=kwargs.get("FeatureSet") or "ALL", + ) root_ou = FakeRoot(self.org) self.ou.append(root_ou) master_account = FakeAccount( @@ -940,5 +958,5 @@ def remove_account_from_organization(self, **kwargs: str) -> None: OrganizationsBackend, "organizations", use_boto3_regions=False, - additional_regions=["global"], + additional_regions=PARTITION_NAMES, ) diff --git a/moto/organizations/responses.py b/moto/organizations/responses.py index 1f970caed0a5..60b3456618e0 100644 --- a/moto/organizations/responses.py +++ b/moto/organizations/responses.py @@ -12,7 +12,7 @@ def __init__(self) -> None: @property def organizations_backend(self) -> OrganizationsBackend: - return organizations_backends[self.current_account]["global"] + return organizations_backends[self.current_account][self.partition] @property def request_params(self) -> Dict[str, Any]: # type: ignore[misc] @@ -26,7 +26,9 @@ def _get_param(self, param_name: str, if_none: Any = None) -> Any: def create_organization(self) -> str: return json.dumps( - self.organizations_backend.create_organization(**self.request_params) + self.organizations_backend.create_organization( + region=self.region, **self.request_params + ) ) def describe_organization(self) -> str: diff --git a/moto/organizations/utils.py b/moto/organizations/utils.py index b21d25bc0d97..903449c88771 100644 --- a/moto/organizations/utils.py +++ b/moto/organizations/utils.py @@ -6,14 +6,14 @@ MASTER_ACCOUNT_EMAIL = "master@example.com" DEFAULT_POLICY_ID = "p-FullAWSAccess" -ORGANIZATION_ARN_FORMAT = "arn:aws:organizations::{0}:organization/{1}" -MASTER_ACCOUNT_ARN_FORMAT = "arn:aws:organizations::{0}:account/{1}/{0}" -ACCOUNT_ARN_FORMAT = "arn:aws:organizations::{0}:account/{1}/{2}" -ROOT_ARN_FORMAT = "arn:aws:organizations::{0}:root/{1}/{2}" -OU_ARN_FORMAT = "arn:aws:organizations::{0}:ou/{1}/{2}" -SCP_ARN_FORMAT = "arn:aws:organizations::{0}:policy/{1}/service_control_policy/{2}" +ORGANIZATION_ARN_FORMAT = "arn:{0}:organizations::{1}:organization/{2}" +MASTER_ACCOUNT_ARN_FORMAT = "arn:{0}:organizations::{1}:account/{2}/{1}" +ACCOUNT_ARN_FORMAT = "arn:{0}:organizations::{1}:account/{2}/{3}" +ROOT_ARN_FORMAT = "arn:{0}:organizations::{1}:root/{2}/{3}" +OU_ARN_FORMAT = "arn:{0}:organizations::{1}:ou/{2}/{3}" +SCP_ARN_FORMAT = "arn:{0}:organizations::{1}:policy/{2}/service_control_policy/{3}" AI_POLICY_ARN_FORMAT = ( - "arn:aws:organizations::{0}:policy/{1}/aiservices_opt_out_policy/{2}" + "arn:{0}:organizations::{1}:policy/{2}/aiservices_opt_out_policy/{3}" ) CHARSET = string.ascii_lowercase + string.digits diff --git a/moto/panorama/utils.py b/moto/panorama/utils.py index d5c676d6323c..8118a4a243a5 100644 --- a/moto/panorama/utils.py +++ b/moto/panorama/utils.py @@ -3,6 +3,8 @@ from datetime import datetime from typing import Any +from moto.utilities.utils import get_partition + def deep_convert_datetime_to_isoformat(obj: Any) -> Any: if isinstance(obj, datetime): @@ -31,4 +33,4 @@ def generate_package_id(name: str) -> str: def arn_formatter(_type: str, _id: str, account_id: str, region_name: str) -> str: - return f"arn:aws:panorama:{region_name}:{account_id}:{_type}/{_id}" + return f"arn:{get_partition(region_name)}:panorama:{region_name}:{account_id}:{_type}/{_id}" diff --git a/moto/personalize/models.py b/moto/personalize/models.py index 8936fb296173..8f5edf08b997 100644 --- a/moto/personalize/models.py +++ b/moto/personalize/models.py @@ -3,6 +3,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.utils import unix_time +from moto.utilities.utils import get_partition from .exceptions import ResourceNotFoundException @@ -19,7 +20,7 @@ def __init__( self.name = name self.schema = schema self.domain = domain - self.arn = f"arn:aws:personalize:{region}:{account_id}:schema/{name}" + self.arn = f"arn:{get_partition(region)}:personalize:{region}:{account_id}:schema/{name}" self.created = unix_time() def to_dict(self, full: bool = True) -> Dict[str, Any]: diff --git a/moto/pinpoint/models.py b/moto/pinpoint/models.py index c83189b60039..69053ce476dd 100644 --- a/moto/pinpoint/models.py +++ b/moto/pinpoint/models.py @@ -6,16 +6,15 @@ from moto.core.utils import unix_time from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ApplicationNotFound, EventStreamNotFound class App(BaseModel): - def __init__(self, account_id: str, name: str): + def __init__(self, account_id: str, region_name: str, name: str): self.application_id = str(mock_random.uuid4()).replace("-", "") - self.arn = ( - f"arn:aws:mobiletargeting:us-east-1:{account_id}:apps/{self.application_id}" - ) + self.arn = f"arn:{get_partition(region_name)}:mobiletargeting:us-east-1:{account_id}:apps/{self.application_id}" self.name = name self.created = unix_time() self.settings = AppSettings() @@ -95,7 +94,7 @@ def __init__(self, region_name: str, account_id: str): self.tagger = TaggingService() def create_app(self, name: str, tags: Dict[str, str]) -> App: - app = App(self.account_id, name) + app = App(self.account_id, self.region_name, name) self.apps[app.application_id] = app tag_list = self.tagger.convert_dict_to_tags_input(tags) self.tagger.tag_resource(app.arn, tag_list) diff --git a/moto/polly/utils.py b/moto/polly/utils.py index e946674b2d93..3c10a04b9ab7 100644 --- a/moto/polly/utils.py +++ b/moto/polly/utils.py @@ -1,2 +1,5 @@ +from moto.utilities.utils import get_partition + + def make_arn_for_lexicon(account_id: str, name: str, region_name: str) -> str: - return f"arn:aws:polly:{region_name}:{account_id}:lexicon/{name}" + return f"arn:{get_partition(region_name)}:polly:{region_name}:{account_id}:lexicon/{name}" diff --git a/moto/quicksight/models.py b/moto/quicksight/models.py index 76fd74e62b35..e7f0f8b980be 100644 --- a/moto/quicksight/models.py +++ b/moto/quicksight/models.py @@ -3,6 +3,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.moto_api._internal import mock_random as random +from moto.utilities.utils import get_partition from .exceptions import ResourceNotFoundException @@ -13,7 +14,7 @@ def _create_id(aws_account_id: str, namespace: str, _id: str) -> str: class QuicksightDataSet(BaseModel): def __init__(self, account_id: str, region: str, _id: str, name: str): - self.arn = f"arn:aws:quicksight:{region}:{account_id}:data-set/{_id}" + self.arn = f"arn:{get_partition(region)}:quicksight:{region}:{account_id}:data-set/{_id}" self._id = _id self.name = name self.region = region @@ -23,7 +24,7 @@ def to_json(self) -> Dict[str, Any]: return { "Arn": self.arn, "DataSetId": self._id, - "IngestionArn": f"arn:aws:quicksight:{self.region}:{self.account_id}:ingestion/tbd", + "IngestionArn": f"arn:{get_partition(self.region)}:quicksight:{self.region}:{self.account_id}:ingestion/tbd", } @@ -31,7 +32,7 @@ class QuicksightIngestion(BaseModel): def __init__( self, account_id: str, region: str, data_set_id: str, ingestion_id: str ): - self.arn = f"arn:aws:quicksight:{region}:{account_id}:data-set/{data_set_id}/ingestions/{ingestion_id}" + self.arn = f"arn:{get_partition(region)}:quicksight:{region}:{account_id}:data-set/{data_set_id}/ingestions/{ingestion_id}" self.ingestion_id = ingestion_id def to_json(self) -> Dict[str, Any]: @@ -46,9 +47,7 @@ class QuicksightMembership(BaseModel): def __init__(self, account_id: str, region: str, group: str, user: str): self.group = group self.user = user - self.arn = ( - f"arn:aws:quicksight:{region}:{account_id}:group/default/{group}/{user}" - ) + self.arn = f"arn:{get_partition(region)}:quicksight:{region}:{account_id}:group/default/{group}/{user}" def to_json(self) -> Dict[str, str]: return {"Arn": self.arn, "MemberName": self.user} @@ -63,9 +62,7 @@ def __init__( aws_account_id: str, namespace: str, ): - self.arn = ( - f"arn:aws:quicksight:{region}:{aws_account_id}:group/default/{group_name}" - ) + self.arn = f"arn:{get_partition(region)}:quicksight:{region}:{aws_account_id}:group/default/{group_name}" self.group_name = group_name self.description = description self.aws_account_id = aws_account_id @@ -110,7 +107,7 @@ def __init__( username: str, user_role: str, ): - self.arn = f"arn:aws:quicksight:{region}:{account_id}:user/default/{username}" + self.arn = f"arn:{get_partition(region)}:quicksight:{region}:{account_id}:user/default/{username}" self.email = email self.identity_type = identity_type self.username = username diff --git a/moto/ram/models.py b/moto/ram/models.py index 7499dd43e50c..98060fc24eab 100644 --- a/moto/ram/models.py +++ b/moto/ram/models.py @@ -13,6 +13,7 @@ OperationNotPermittedException, UnknownResourceException, ) +from moto.utilities.utils import get_partition def random_resource_id(size: int) -> str: @@ -41,11 +42,10 @@ class ResourceShare(BaseModel): def __init__(self, account_id: str, region: str, **kwargs: Any): self.account_id = account_id self.region = region + self.partition = get_partition(region) self.allow_external_principals = kwargs.get("allowExternalPrincipals", True) - self.arn = ( - f"arn:aws:ram:{self.region}:{account_id}:resource-share/{random.uuid4()}" - ) + self.arn = f"arn:{get_partition(self.region)}:ram:{self.region}:{account_id}:resource-share/{random.uuid4()}" self.creation_time = utcnow() self.feature_set = "STANDARD" self.last_updated_time = utcnow() @@ -57,7 +57,7 @@ def __init__(self, account_id: str, region: str, **kwargs: Any): @property def organizations_backend(self) -> OrganizationsBackend: - return organizations_backends[self.account_id]["global"] + return organizations_backends[self.account_id][self.partition] def add_principals(self, principals: List[str]) -> None: for principal in principals: @@ -158,7 +158,7 @@ def __init__(self, region_name: str, account_id: str): @property def organizations_backend(self) -> OrganizationsBackend: - return organizations_backends[self.account_id]["global"] + return organizations_backends[self.account_id][self.partition] def create_resource_share(self, **kwargs: Any) -> Dict[str, Any]: resource = ResourceShare(self.account_id, self.region_name, **kwargs) diff --git a/moto/rds/models.py b/moto/rds/models.py index 3eccad7f2c69..82b475acf15a 100644 --- a/moto/rds/models.py +++ b/moto/rds/models.py @@ -14,7 +14,7 @@ from moto.ec2.models import ec2_backends from moto.moto_api._internal import mock_random as random from moto.neptune.models import NeptuneBackend, neptune_backends -from moto.utilities.utils import load_resource +from moto.utilities.utils import ARN_PARTITION_REGEX, get_partition, load_resource from .exceptions import ( DBClusterNotFoundError, @@ -73,6 +73,7 @@ class GlobalCluster(BaseModel): def __init__( self, account_id: str, + region_name: str, global_cluster_identifier: str, engine: str, engine_version: Optional[str], @@ -81,9 +82,7 @@ def __init__( ): self.global_cluster_identifier = global_cluster_identifier self.global_cluster_resource_id = "cluster-" + random.get_random_hex(8) - self.global_cluster_arn = ( - f"arn:aws:rds::{account_id}:global-cluster:{global_cluster_identifier}" - ) + self.global_cluster_arn = f"arn:{get_partition(region_name)}:rds::{account_id}:global-cluster:{global_cluster_identifier}" self.engine = engine self.engine_version = engine_version or "5.7.mysql_aurora.2.11.2" self.storage_encrypted = ( @@ -160,7 +159,7 @@ def __init__(self, **kwargs: Any): self.network_type = kwargs.get("network_type") or "IPV4" self.status = "active" self.account_id = kwargs.get("account_id") - self.region_name = kwargs.get("region") + self.region_name = kwargs["region"] self.cluster_create_time = iso_8601_datetime_with_milliseconds() self.copy_tags_to_snapshot = kwargs.get("copy_tags_to_snapshot") if self.copy_tags_to_snapshot is None: @@ -259,7 +258,7 @@ def arn(self) -> str: @property def db_cluster_arn(self) -> str: - return f"arn:aws:rds:{self.region_name}:{self.account_id}:cluster:{self.db_cluster_identifier}" + return f"arn:{get_partition(self.region_name)}:rds:{self.region_name}:{self.account_id}:cluster:{self.db_cluster_identifier}" @property def master_user_password(self) -> str: @@ -510,7 +509,7 @@ def arn(self) -> str: @property def snapshot_arn(self) -> str: - return f"arn:aws:rds:{self.cluster.region_name}:{self.cluster.account_id}:cluster-snapshot:{self.snapshot_id}" + return f"arn:{get_partition(self.cluster.region_name)}:rds:{self.cluster.region_name}:{self.cluster.account_id}:cluster-snapshot:{self.snapshot_id}" def to_xml(self) -> str: template = Template( @@ -699,7 +698,7 @@ def arn(self) -> str: @property def db_instance_arn(self) -> str: - return f"arn:aws:rds:{self.region_name}:{self.account_id}:db:{self.db_instance_identifier}" + return f"arn:{get_partition(self.region_name)}:rds:{self.region_name}:{self.account_id}:db:{self.db_instance_identifier}" @property def physical_resource_id(self) -> Optional[str]: @@ -1148,7 +1147,7 @@ def arn(self) -> str: @property def snapshot_arn(self) -> str: - return f"arn:aws:rds:{self.database.region_name}:{self.database.account_id}:snapshot:{self.snapshot_id}" + return f"arn:{get_partition(self.database.region_name)}:rds:{self.database.region_name}:{self.database.account_id}:snapshot:{self.snapshot_id}" def to_xml(self) -> str: template = Template( @@ -1281,7 +1280,7 @@ def __init__(self, kwargs: Dict[str, Any]): @property def es_arn(self) -> str: - return f"arn:aws:rds:{self.region_name}:{self.customer_aws_id}:es:{self.subscription_name}" + return f"arn:{get_partition(self.region_name)}:rds:{self.region_name}:{self.customer_aws_id}:es:{self.subscription_name}" def to_xml(self) -> str: template = Template( @@ -1476,7 +1475,7 @@ def __init__( @property def sg_arn(self) -> str: - return f"arn:aws:rds:{self.region}:{self.account_id}:subgrp:{self.subnet_name}" + return f"arn:{get_partition(self.region)}:rds:{self.region}:{self.account_id}:subgrp:{self.subnet_name}" def to_xml(self) -> str: template = Template( @@ -1620,7 +1619,7 @@ def __init__( self.tags = tags self.region_name = region_name self.account_id = account_id - self.db_proxy_arn = f"arn:aws:rds:{self.region_name}:{self.account_id}:db-proxy:{self.db_proxy_name}" + self.db_proxy_arn = f"arn:{get_partition(self.region_name)}:rds:{self.region_name}:{self.account_id}:db-proxy:{self.db_proxy_name}" self.arn = self.db_proxy_arn ec2_backend = ec2_backends[self.account_id][self.region_name] subnets = ec2_backend.describe_subnets(subnet_ids=self.vpc_subnet_ids) @@ -1698,7 +1697,8 @@ class RDSBackend(BaseBackend): def __init__(self, region_name: str, account_id: str): super().__init__(region_name, account_id) self.arn_regex = re_compile( - r"^arn:aws:rds:.*:[0-9]*:(db|cluster|es|og|pg|ri|secgrp|snapshot|cluster-snapshot|subgrp|db-proxy):.*$" + ARN_PARTITION_REGEX + + r":rds:.*:[0-9]*:(db|cluster|es|og|pg|ri|secgrp|snapshot|cluster-snapshot|subgrp|db-proxy):.*$" ) self.clusters: Dict[str, Cluster] = OrderedDict() self.global_clusters: Dict[str, GlobalCluster] = OrderedDict() @@ -2892,7 +2892,7 @@ def create_global_cluster( source_cluster = None if source_db_cluster_identifier is not None: # validate our source cluster exists - if not source_db_cluster_identifier.startswith("arn:aws:rds"): + if not re.match(ARN_PARTITION_REGEX + ":rds", source_db_cluster_identifier): raise InvalidParameterValue("Malformed db cluster arn dbci") source_cluster = self.describe_db_clusters( cluster_identifier=source_db_cluster_identifier @@ -2910,6 +2910,7 @@ def create_global_cluster( ) global_cluster = GlobalCluster( account_id=self.account_id, + region_name=self.region_name, global_cluster_identifier=global_cluster_identifier, engine=engine, # type: ignore engine_version=engine_version, @@ -3107,7 +3108,7 @@ def __init__( self.options: Dict[str, Any] = {} self.vpcId = "null" self.tags: List[Dict[str, str]] = [] - self.arn = f"arn:aws:rds:{region}:{account_id}:og:{name}" + self.arn = f"arn:{get_partition(region)}:rds:{region}:{account_id}:og:{name}" def to_json(self) -> str: template = Template( @@ -3182,7 +3183,7 @@ def __init__( self.family = family self.tags = tags self.parameters: Dict[str, Any] = defaultdict(dict) - self.arn = f"arn:aws:rds:{region}:{account_id}:pg:{name}" + self.arn = f"arn:{get_partition(region)}:rds:{region}:{account_id}:pg:{name}" def to_xml(self) -> str: template = Template( @@ -3266,7 +3267,7 @@ def __init__( self.description = description self.family = family self.parameters: Dict[str, Any] = defaultdict(dict) - self.arn = f"arn:aws:rds:{region}:{account_id}:cpg:{name}" + self.arn = f"arn:{get_partition(region)}:rds:{region}:{account_id}:cpg:{name}" def to_xml(self) -> str: template = Template( diff --git a/moto/redshift/models.py b/moto/redshift/models.py index a885b1145335..13530dedbd2f 100644 --- a/moto/redshift/models.py +++ b/moto/redshift/models.py @@ -11,6 +11,7 @@ from moto.ec2 import ec2_backends from moto.ec2.models.security_groups import SecurityGroup as EC2SecurityGroup from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition from .exceptions import ( ClusterAlreadyExistsFaultError, @@ -51,10 +52,7 @@ def resource_id(self) -> str: @property def arn(self) -> str: - return ( - f"arn:aws:redshift:{self.region}:{self.account_id}" - f":{self.resource_type}:{self.resource_id}" - ) + return f"arn:{get_partition(self.region)}:redshift:{self.region}:{self.account_id}:{self.resource_type}:{self.resource_id}" def create_tags(self, tags: List[Dict[str, str]]) -> List[Dict[str, str]]: new_keys = [tag_set["Key"] for tag_set in tags] diff --git a/moto/resiliencehub/models.py b/moto/resiliencehub/models.py index d6ec83ab868d..b74f22be1c6f 100644 --- a/moto/resiliencehub/models.py +++ b/moto/resiliencehub/models.py @@ -6,6 +6,7 @@ from moto.moto_api._internal import mock_random from moto.utilities.paginator import paginate from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import AppNotFound, AppVersionNotFound, ResiliencyPolicyNotFound @@ -51,7 +52,7 @@ def __init__( policy_arn: str, ): self.backend = backend - self.arn = f"arn:aws:resiliencehub:{backend.region_name}:{backend.account_id}:app/{mock_random.uuid4()}" + self.arn = f"arn:{get_partition(backend.region_name)}:resiliencehub:{backend.region_name}:{backend.account_id}:app/{mock_random.uuid4()}" self.assessment_schedule = assessment_schedule or "Disabled" self.compliance_status = "NotAssessed" self.description = description @@ -154,7 +155,7 @@ def __init__( policy_description: str, tier: str, ): - self.arn = f"arn:aws:resiliencehub:{backend.region_name}:{backend.account_id}:resiliency-policy/{mock_random.uuid4()}" + self.arn = f"arn:{get_partition(backend.region_name)}:resiliencehub:{backend.region_name}:{backend.account_id}:resiliency-policy/{mock_random.uuid4()}" self.backend = backend self.data_location_constraint = data_location_constraint self.creation_time = unix_time() diff --git a/moto/resourcegroups/models.py b/moto/resourcegroups/models.py index 1e05ce80d93a..d3f97c0c8113 100644 --- a/moto/resourcegroups/models.py +++ b/moto/resourcegroups/models.py @@ -4,6 +4,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel +from moto.utilities.utils import get_partition from .exceptions import BadRequestException @@ -12,6 +13,7 @@ class FakeResourceGroup(BaseModel): def __init__( self, account_id: str, + region_name: str, name: str, resource_query: Dict[str, str], description: Optional[str] = None, @@ -30,7 +32,7 @@ def __init__( if self._validate_tags(value=tags): self._tags = tags self._raise_errors() - self.arn = f"arn:aws:resource-groups:us-west-1:{account_id}:{name}" + self.arn = f"arn:{get_partition(region_name)}:resource-groups:us-west-1:{account_id}:{name}" self.configuration = configuration @staticmethod @@ -311,6 +313,7 @@ def create_group( tags = tags or {} group = FakeResourceGroup( account_id=self.account_id, + region_name=self.region_name, name=name, resource_query=resource_query, description=description, diff --git a/moto/resourcegroupstaggingapi/models.py b/moto/resourcegroupstaggingapi/models.py index 07c08d087b39..3c2efb9d3135 100644 --- a/moto/resourcegroupstaggingapi/models.py +++ b/moto/resourcegroupstaggingapi/models.py @@ -24,6 +24,7 @@ from moto.sqs.models import SQSBackend, sqs_backends from moto.ssm.models import SimpleSystemManagerBackend, ssm_backends from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from moto.workspaces.models import WorkSpacesBackend, workspaces_backends # Left: EC2 ElastiCache RDS ELB CloudFront Lambda EMR Glacier Kinesis Redshift Route53 @@ -43,7 +44,7 @@ def __init__(self, region_name: str, account_id: str): @property def s3_backend(self) -> S3Backend: - return s3_backends[self.account_id]["global"] + return s3_backends[self.account_id][self.partition] @property def ec2_backend(self) -> Any: # type: ignore[misc] @@ -212,7 +213,7 @@ def format_tag_keys( tags ): # Skip if no tags, or invalid filter continue - yield {"ResourceARN": "arn:aws:s3:::" + bucket.name, "Tags": tags} + yield {"ResourceARN": bucket.arn, "Tags": tags} # CloudFormation if not resource_type_filters or "cloudformation:stack" in resource_type_filters: @@ -266,7 +267,7 @@ def format_tag_keys( # Skip if no tags, or invalid filter continue yield { - "ResourceARN": f"arn:aws:ec2:{self.region_name}::image/{ami.id}", + "ResourceARN": f"arn:{self.partition}:ec2:{self.region_name}::image/{ami.id}", "Tags": tags, } @@ -284,7 +285,7 @@ def format_tag_keys( # Skip if no tags, or invalid filter continue yield { - "ResourceARN": f"arn:aws:ec2:{self.region_name}::instance/{instance.id}", + "ResourceARN": f"arn:{self.partition}:ec2:{self.region_name}::instance/{instance.id}", "Tags": tags, } @@ -301,7 +302,7 @@ def format_tag_keys( # Skip if no tags, or invalid filter continue yield { - "ResourceARN": f"arn:aws:ec2:{self.region_name}::network-interface/{eni.id}", + "ResourceARN": f"arn:{self.partition}:ec2:{self.region_name}::network-interface/{eni.id}", "Tags": tags, } @@ -321,7 +322,7 @@ def format_tag_keys( # Skip if no tags, or invalid filter continue yield { - "ResourceARN": f"arn:aws:ec2:{self.region_name}::security-group/{sg.id}", + "ResourceARN": f"arn:{self.partition}:ec2:{self.region_name}::security-group/{sg.id}", "Tags": tags, } @@ -338,7 +339,7 @@ def format_tag_keys( # Skip if no tags, or invalid filter continue yield { - "ResourceARN": f"arn:aws:ec2:{self.region_name}::snapshot/{snapshot.id}", + "ResourceARN": f"arn:{self.partition}:ec2:{self.region_name}::snapshot/{snapshot.id}", "Tags": tags, } @@ -358,7 +359,7 @@ def format_tag_keys( ): # Skip if no tags, or invalid filter continue yield { - "ResourceARN": f"arn:aws:ec2:{self.region_name}::volume/{volume.id}", + "ResourceARN": f"arn:{self.partition}:ec2:{self.region_name}::volume/{volume.id}", "Tags": tags, } @@ -376,7 +377,7 @@ def format_tag_keys( continue yield { - "ResourceARN": f"arn:aws:elasticloadbalancing:{self.region_name}:{self.account_id}:loadbalancer/{elb.name}", + "ResourceARN": f"arn:{get_partition(self.region_name)}:elasticloadbalancing:{self.region_name}:{self.account_id}:loadbalancer/{elb.name}", "Tags": tags, } @@ -421,7 +422,7 @@ def format_tag_keys( ): if not resource_type_filters or "glue" in resource_type_filters: arns_starting_with = [ - f"arn:aws:glue:{self.region_name}:{self.account_id}:" + f"arn:{get_partition(self.region_name)}:glue:{self.region_name}:{self.account_id}:" ] else: arns_starting_with = [] @@ -429,7 +430,7 @@ def format_tag_keys( if resource_type.startswith("glue:"): glue_type = resource_type.split(":")[-1] arns_starting_with.append( - f"arn:aws:glue:{self.region_name}:{self.account_id}:{glue_type}" + f"arn:{get_partition(self.region_name)}:glue:{self.region_name}:{self.account_id}:{glue_type}" ) for glue_arn in self.glue_backend.tagger.tags.keys(): if any(glue_arn.startswith(arn) for arn in arns_starting_with): @@ -535,7 +536,7 @@ def format_tag_keys( ): # Skip if no tags, or invalid filter continue yield { - "ResourceARN": f"arn:aws:ssm:{self.region_name}:{self.account_id}:document/{doc_name}", + "ResourceARN": f"arn:{get_partition(self.region_name)}:ssm:{self.region_name}:{self.account_id}:document/{doc_name}", "Tags": tags, } @@ -551,7 +552,7 @@ def format_tag_keys( continue yield { - "ResourceARN": f"arn:aws:workspaces:{self.region_name}:{self.account_id}:workspace/{ws.workspace_id}", + "ResourceARN": f"arn:{get_partition(self.region_name)}:workspaces:{self.region_name}:{self.account_id}:workspace/{ws.workspace_id}", "Tags": tags, } @@ -567,7 +568,7 @@ def format_tag_keys( continue yield { - "ResourceARN": f"arn:aws:workspaces:{self.region_name}:{self.account_id}:directory/{wd.directory_id}", + "ResourceARN": f"arn:{get_partition(self.region_name)}:workspaces:{self.region_name}:{self.account_id}:directory/{wd.directory_id}", "Tags": tags, } @@ -583,7 +584,7 @@ def format_tag_keys( continue yield { - "ResourceARN": f"arn:aws:workspaces:{self.region_name}:{self.account_id}:workspaceimage/{wi.image_id}", + "ResourceARN": f"arn:{get_partition(self.region_name)}:workspaces:{self.region_name}:{self.account_id}:workspaceimage/{wi.image_id}", "Tags": tags, } @@ -600,7 +601,7 @@ def format_tag_keys( ): # Skip if no tags, or invalid filter continue yield { - "ResourceARN": f"arn:aws:ec2:{self.region_name}:{self.account_id}:vpc/{vpc.id}", + "ResourceARN": f"arn:{self.partition}:ec2:{self.region_name}:{self.account_id}:vpc/{vpc.id}", "Tags": tags, } # VPC Customer Gateway @@ -939,18 +940,20 @@ def tag_resources( "ErrorMessage": "Service not yet supported", } for arn in resource_arns: - if arn.startswith("arn:aws:rds:") or arn.startswith("arn:aws:snapshot:"): + if arn.startswith( + f"arn:{get_partition(self.region_name)}:rds:" + ) or arn.startswith(f"arn:{get_partition(self.region_name)}:snapshot:"): self.rds_backend.add_tags_to_resource( arn, TaggingService.convert_dict_to_tags_input(tags) ) - elif arn.startswith("arn:aws:workspaces:"): + elif arn.startswith(f"arn:{get_partition(self.region_name)}:workspaces:"): resource_id = arn.split("/")[-1] self.workspaces_backend.create_tags( # type: ignore[union-attr] resource_id, TaggingService.convert_dict_to_tags_input(tags) ) - elif arn.startswith("arn:aws:logs:"): + elif arn.startswith(f"arn:{get_partition(self.region_name)}:logs:"): self.logs_backend.tag_resource(arn, tags) - elif arn.startswith("arn:aws:dynamodb"): + elif arn.startswith(f"arn:{get_partition(self.region_name)}:dynamodb"): self.dynamodb_backend.tag_resource( arn, TaggingService.convert_dict_to_tags_input(tags) ) diff --git a/moto/robomaker/models.py b/moto/robomaker/models.py index f1feacc9417e..bb51184df42e 100644 --- a/moto/robomaker/models.py +++ b/moto/robomaker/models.py @@ -3,6 +3,7 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.utils import unix_time +from moto.utilities.utils import get_partition class RobotApplication(BaseModel): @@ -23,7 +24,7 @@ def __init__( @property def arn(self) -> str: - return f"arn:aws:robomaker:{self.region}:{self.account_id}:robot-application/{self.name}/{self.created_on}" + return f"arn:{get_partition(self.region)}:robomaker:{self.region}:{self.account_id}:robot-application/{self.name}/{self.created_on}" def to_dict(self) -> Dict[str, Any]: return { diff --git a/moto/route53/models.py b/moto/route53/models.py index cdea39895cc6..ec2b8b8161cd 100644 --- a/moto/route53/models.py +++ b/moto/route53/models.py @@ -31,6 +31,7 @@ ResourceRecordAlreadyExists, ) from moto.utilities.paginator import paginate +from moto.utilities.utils import PARTITION_NAMES, get_partition from .utils import PAGINATION_MODEL @@ -138,7 +139,7 @@ def create_from_cloudformation_json( # type: ignore[misc] "request_interval": properties.get("RequestInterval"), "failure_threshold": properties.get("FailureThreshold"), } - backend = route53_backends[account_id]["global"] + backend = route53_backends[account_id][get_partition(region_name)] health_check = backend.create_health_check( caller_reference=resource_name, health_check_args=health_check_args ) @@ -234,7 +235,7 @@ def create_from_cloudformation_json( # type: ignore[misc] properties = cloudformation_json["Properties"] zone_name = properties.get("HostedZoneName") - backend = route53_backends[account_id]["global"] + backend = route53_backends[account_id][get_partition(region_name)] hosted_zone = backend.get_hosted_zone_by_name(zone_name) if zone_name else None if hosted_zone is None: hosted_zone = backend.get_hosted_zone(properties["HostedZoneId"]) @@ -270,7 +271,7 @@ def delete_from_cloudformation_json( # type: ignore[misc] properties = cloudformation_json["Properties"] zone_name = properties.get("HostedZoneName") - backend = route53_backends[account_id]["global"] + backend = route53_backends[account_id][get_partition(region_name)] hosted_zone = backend.get_hosted_zone_by_name(zone_name) if zone_name else None if hosted_zone is None: hosted_zone = backend.get_hosted_zone(properties["HostedZoneId"]) @@ -284,13 +285,9 @@ def delete_from_cloudformation_json( # type: ignore[misc] def physical_resource_id(self) -> str: return self.name - def delete( - self, - account_id: str, - region: str, # pylint: disable=unused-argument - ) -> None: + def delete(self, account_id: str, region: str) -> None: """Not exposed as part of the Route 53 API - used for CloudFormation""" - backend = route53_backends[account_id]["global"] + backend = route53_backends[account_id][get_partition(region)] hosted_zone = ( backend.get_hosted_zone_by_name(self.hosted_zone_name) if self.hosted_zone_name @@ -453,20 +450,21 @@ def create_from_cloudformation_json( # type: ignore[misc] region_name: str, **kwargs: Any, ) -> "FakeZone": - hosted_zone = route53_backends[account_id]["global"].create_hosted_zone( - resource_name, private_zone=False - ) + hosted_zone = route53_backends[account_id][ + get_partition(region_name) + ].create_hosted_zone(resource_name, private_zone=False) return hosted_zone class RecordSetGroup(CloudFormationModel): - def __init__(self, hosted_zone_id: str, record_sets: List[str]): + def __init__(self, region_name: str, hosted_zone_id: str, record_sets: List[str]): + self.region_name = region_name self.hosted_zone_id = hosted_zone_id self.record_sets = record_sets @property def physical_resource_id(self) -> str: - return f"arn:aws:route53:::hostedzone/{self.hosted_zone_id}" + return f"arn:{get_partition(self.region_name)}:route53:::hostedzone/{self.hosted_zone_id}" @staticmethod def cloudformation_name_type() -> str: @@ -489,7 +487,7 @@ def create_from_cloudformation_json( # type: ignore[misc] properties = cloudformation_json["Properties"] zone_name = properties.get("HostedZoneName") - backend = route53_backends[account_id]["global"] + backend = route53_backends[account_id][get_partition(region_name)] hosted_zone = backend.get_hosted_zone_by_name(zone_name) if zone_name else None if hosted_zone is None: hosted_zone = backend.get_hosted_zone(properties["HostedZoneId"]) @@ -497,7 +495,7 @@ def create_from_cloudformation_json( # type: ignore[misc] for record_set in record_sets: hosted_zone.add_rrset(record_set) - return RecordSetGroup(hosted_zone.id, record_sets) + return RecordSetGroup(region_name, hosted_zone.id, record_sets) class QueryLoggingConfig(BaseModel): @@ -866,7 +864,9 @@ def get_health_check_status(self) -> None: @staticmethod def _validate_arn(region: str, arn: str) -> None: - match = re.match(rf"arn:aws:logs:{region}:\d{{12}}:log-group:.+", arn) + match = re.match( + rf"arn:{get_partition(region)}:logs:{region}:\d{{12}}:log-group:.+", arn + ) if not arn or not match: raise InvalidCloudWatchArn() @@ -984,5 +984,8 @@ def get_reusable_delegation_set(self, delegation_set_id: str) -> DelegationSet: route53_backends = BackendDict( - Route53Backend, "route53", use_boto3_regions=False, additional_regions=["global"] + Route53Backend, + "route53", + use_boto3_regions=False, + additional_regions=PARTITION_NAMES, ) diff --git a/moto/route53/responses.py b/moto/route53/responses.py index 62ae5b754e68..90e8b0917cd1 100644 --- a/moto/route53/responses.py +++ b/moto/route53/responses.py @@ -34,7 +34,7 @@ def _convert_to_bool(bool_str: Any) -> bool: # type: ignore[misc] @property def backend(self) -> Route53Backend: - return route53_backends[self.current_account]["global"] + return route53_backends[self.current_account][self.partition] def create_hosted_zone(self) -> TYPE_RESPONSE: vpcid = None diff --git a/moto/route53domains/models.py b/moto/route53domains/models.py index 9c33ccb096f9..3bb36cc86782 100644 --- a/moto/route53domains/models.py +++ b/moto/route53domains/models.py @@ -5,6 +5,7 @@ from moto.route53 import route53_backends from moto.route53.models import Route53Backend from moto.utilities.paginator import paginate +from moto.utilities.utils import PARTITION_NAMES from .exceptions import ( DomainLimitExceededException, @@ -47,7 +48,9 @@ class Route53DomainsBackend(BaseBackend): def __init__(self, region_name: str, account_id: str): super().__init__(region_name, account_id) - self.__route53_backend: Route53Backend = route53_backends[account_id]["global"] + self.__route53_backend: Route53Backend = route53_backends[account_id][ + self.partition + ] self.__domains: Dict[str, Route53Domain] = {} self.__operations: Dict[str, Route53DomainsOperation] = {} @@ -296,5 +299,5 @@ def update_domain_nameservers( Route53DomainsBackend, "route53domains", use_boto3_regions=False, - additional_regions=["global"], + additional_regions=PARTITION_NAMES, ) diff --git a/moto/route53domains/responses.py b/moto/route53domains/responses.py index 78287c7bc2af..0e48158d2989 100644 --- a/moto/route53domains/responses.py +++ b/moto/route53domains/responses.py @@ -12,7 +12,7 @@ def __init__(self) -> None: @property def route53domains_backend(self) -> Route53DomainsBackend: - return route53domains_backends[self.current_account]["global"] + return route53domains_backends[self.current_account][self.partition] def register_domain(self) -> str: domain_name = self._get_param("DomainName") diff --git a/moto/route53resolver/models.py b/moto/route53resolver/models.py index 3f02147a9ef6..a4e41fe4591f 100644 --- a/moto/route53resolver/models.py +++ b/moto/route53resolver/models.py @@ -24,6 +24,7 @@ from moto.route53resolver.validations import validate_args from moto.utilities.paginator import paginate from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition CAMEL_TO_SNAKE_PATTERN = re.compile(r"(? str: - """Return ARN for this resolver rule.""" - return f"arn:aws:route53resolver:{self.region}:{self.account_id}:resolver-rule/{self.id}" + return f"arn:{get_partition(self.region)}:route53resolver:{self.region}:{self.account_id}:resolver-rule/{self.id}" def description(self) -> Dict[str, Any]: """Return a dictionary of relevant info for this resolver rule.""" @@ -213,8 +213,7 @@ def __init__( @property def arn(self) -> str: - """Return ARN for this resolver endpoint.""" - return f"arn:aws:route53resolver:{self.region}:{self.account_id}:resolver-endpoint/{self.id}" + return f"arn:{get_partition(self.region)}:route53resolver:{self.region}:{self.account_id}:resolver-endpoint/{self.id}" def _vpc_id_from_subnet(self) -> str: """Return VPC Id associated with the subnet. diff --git a/moto/s3/config.py b/moto/s3/config.py index 0db38da5fc5b..33a2a4fd49b8 100644 --- a/moto/s3/config.py +++ b/moto/s3/config.py @@ -11,6 +11,7 @@ class S3ConfigQuery(ConfigQueryModel[S3Backend]): def list_config_service_resources( self, account_id: str, + partition: str, resource_ids: Optional[List[str]], resource_name: Optional[str], limit: int, @@ -31,14 +32,14 @@ def list_config_service_resources( # If no filter was passed in for resource names/ids then return them all: if not resource_ids and not resource_name: - bucket_list = list(self.backends[account_id]["global"].buckets.keys()) + bucket_list = list(self.backends[account_id][partition].buckets.keys()) else: # Match the resource name / ID: bucket_list = [] filter_buckets = [resource_name] if resource_name else resource_ids - for bucket in self.backends[account_id]["global"].buckets.keys(): + for bucket in self.backends[account_id][partition].buckets.keys(): if bucket in filter_buckets: # type: ignore bucket_list.append(bucket) @@ -49,7 +50,7 @@ def list_config_service_resources( for bucket in bucket_list: if ( - self.backends[account_id]["global"].buckets[bucket].region_name + self.backends[account_id][partition].buckets[bucket].region_name == region_filter ): region_buckets.append(bucket) @@ -86,7 +87,7 @@ def list_config_service_resources( "type": "AWS::S3::Bucket", "id": bucket, "name": bucket, - "region": self.backends[account_id]["global"] + "region": self.backends[account_id][partition] .buckets[bucket] .region_name, } @@ -98,13 +99,14 @@ def list_config_service_resources( def get_config_resource( self, account_id: str, + partition: str, resource_id: str, resource_name: Optional[str] = None, backend_region: Optional[str] = None, resource_region: Optional[str] = None, ) -> Optional[Dict[str, Any]]: # Get the bucket: - bucket = self.backends[account_id]["global"].buckets.get(resource_id) + bucket = self.backends[account_id][partition].buckets.get(resource_id) if not bucket: return None diff --git a/moto/s3/models.py b/moto/s3/models.py index 1d23ca294331..5ee42576ef41 100644 --- a/moto/s3/models.py +++ b/moto/s3/models.py @@ -62,7 +62,7 @@ ObjectLockConfigurationNotFoundError, ) from moto.utilities.tagging_service import TaggingService -from moto.utilities.utils import LowercaseDict, md5_hash +from moto.utilities.utils import PARTITION_NAMES, LowercaseDict, get_partition, md5_hash from ..events.notifications import send_notification as events_send_notification from ..settings import ( @@ -111,6 +111,7 @@ def __init__( name: str, value: bytes, account_id: str, + region_name: str, storage: Optional[str] = "STANDARD", etag: Optional[str] = None, is_versioned: bool = False, @@ -136,6 +137,8 @@ def __init__( ) self.name = name self.account_id = account_id + self.region_name = region_name + self.partition = get_partition(region_name) self.last_modified = utcnow() self.acl: Optional[FakeAcl] = get_canned_acl("private") self.website_redirect_location: Optional[str] = None @@ -189,7 +192,7 @@ def value(self) -> bytes: @property def arn(self) -> str: # S3 Objects don't have an ARN, but we do need something unique when creating tags against this resource - return f"arn:aws:s3:::{self.bucket_name}/{self.name}/{self.version_id}" + return f"arn:{self.partition}:s3:::{self.bucket_name}/{self.name}/{self.version_id}" @value.setter # type: ignore def value(self, new_value: bytes) -> None: @@ -208,7 +211,7 @@ def status(self) -> Optional[str]: previous = self._status new_status = super().status if previous != "RESTORED" and new_status == "RESTORED": - s3_backend = s3_backends[self.account_id]["global"] + s3_backend = s3_backends[self.account_id][self.partition] bucket = s3_backend.get_bucket(self.bucket_name) # type: ignore notifications.send_event( self.account_id, @@ -240,7 +243,7 @@ def set_acl(self, acl: Optional["FakeAcl"]) -> None: def restore(self, days: int) -> None: self._expiry = utcnow() + datetime.timedelta(days) - s3_backend = s3_backends[self.account_id]["global"] + s3_backend = s3_backends[self.account_id][self.partition] bucket = s3_backend.get_bucket(self.bucket_name) # type: ignore notifications.send_event( self.account_id, @@ -321,9 +324,9 @@ def response_dict(self) -> Dict[str, Any]: # type: ignore[misc] res["x-amz-object-lock-retain-until-date"] = self.lock_until if self.lock_mode: res["x-amz-object-lock-mode"] = self.lock_mode - tags = s3_backends[self.account_id]["global"].tagger.get_tag_dict_for_resource( - self.arn - ) + + backend = s3_backends[self.account_id][self.partition] + tags = backend.tagger.get_tag_dict_for_resource(self.arn) if tags: res["x-amz-tagging-count"] = str(len(tags.keys())) @@ -414,6 +417,7 @@ def __init__( key_name: str, metadata: CaseInsensitiveDict, # type: ignore account_id: str, + region_name: str, storage: Optional[str] = None, tags: Optional[Dict[str, str]] = None, acl: Optional["FakeAcl"] = None, @@ -423,6 +427,7 @@ def __init__( self.key_name = key_name self.metadata = metadata self.account_id = account_id + self.region_name = region_name self.storage = storage self.tags = tags self.acl = acl @@ -484,6 +489,7 @@ def set_part(self, part_id: int, value: bytes) -> FakeKey: part_id, # type: ignore value, account_id=self.account_id, + region_name=self.region_name, encryption=self.sse_encryption, kms_key_id=self.kms_key_id, ) @@ -1035,6 +1041,7 @@ def __init__(self, name: str, account_id: str, region_name: str): self.name = name self.account_id = account_id self.region_name = region_name + self.partition = get_partition(region_name) self.keys = _VersionedKeyStore() self.multiparts = MultipartDict() self.versioning_status: Optional[str] = None @@ -1292,9 +1299,11 @@ def _log_permissions_enabled_policy( continue if ( stmt.get("Resource") - != f"arn:aws:s3:::{target_bucket.name}/{target_prefix if target_prefix else ''}*" - and stmt.get("Resource") != f"arn:aws:s3:::{target_bucket.name}/*" - and stmt.get("Resource") != f"arn:aws:s3:::{target_bucket.name}" + != f"arn:{target_bucket.partition}:s3:::{target_bucket.name}/{target_prefix if target_prefix else ''}*" + and stmt.get("Resource") + != f"arn:{target_bucket.partition}:s3:::{target_bucket.name}/*" + and stmt.get("Resource") + != f"arn:{target_bucket.partition}:s3:::{target_bucket.name}" ): continue return True @@ -1418,7 +1427,7 @@ def set_acl(self, acl: Optional[FakeAcl]) -> None: @property def arn(self) -> str: - return f"arn:aws:s3:::{self.name}" + return f"arn:{self.partition}:s3:::{self.name}" @property def domain_name(self) -> str: @@ -1458,15 +1467,15 @@ def create_from_cloudformation_json( # type: ignore[misc] region_name: str, **kwargs: Any, ) -> "FakeBucket": - bucket = s3_backends[account_id]["global"].create_bucket( - resource_name, region_name - ) + partition = get_partition(region_name) + backend = s3_backends[account_id][partition] + bucket = backend.create_bucket(resource_name, region_name) properties = cloudformation_json.get("Properties", {}) if "BucketEncryption" in properties: bucket_encryption = cfn_to_api_encryption(properties["BucketEncryption"]) - s3_backends[account_id]["global"].put_bucket_encryption( + backend.put_bucket_encryption( bucket_name=resource_name, encryption=bucket_encryption ) @@ -1504,7 +1513,9 @@ def update_from_cloudformation_json( # type: ignore[misc] bucket_encryption = cfn_to_api_encryption( properties["BucketEncryption"] ) - s3_backends[account_id]["global"].put_bucket_encryption( + s3_backends[account_id][ + get_partition(region_name) + ].put_bucket_encryption( bucket_name=original_resource.name, encryption=bucket_encryption ) return original_resource @@ -1517,7 +1528,7 @@ def delete_from_cloudformation_json( # type: ignore[misc] account_id: str, region_name: str, ) -> None: - s3_backends[account_id]["global"].delete_bucket(resource_name) + s3_backends[account_id][get_partition(region_name)].delete_bucket(resource_name) def to_config_dict(self) -> Dict[str, Any]: """Return the AWS Config JSON format of this S3 bucket. @@ -1525,6 +1536,7 @@ def to_config_dict(self) -> Dict[str, Any]: Note: The following features are not implemented and will need to be if you care about them: - Bucket Accelerate Configuration """ + backend = s3_backends[self.account_id][get_partition(self.region_name)] config_dict: Dict[str, Any] = { "version": "1.3", "configurationItemCaptureTime": str(self.creation_date), @@ -1540,9 +1552,7 @@ def to_config_dict(self) -> Dict[str, Any]: "resourceCreationTime": str(self.creation_date), "relatedEvents": [], "relationships": [], - "tags": s3_backends[self.account_id][ - "global" - ].tagger.get_tag_dict_for_resource(self.arn), + "tags": backend.tagger.get_tag_dict_for_resource(self.arn), "configuration": { "name": self.name, "owner": {"id": OWNER}, @@ -1758,9 +1768,11 @@ def default_vpc_endpoint_service( ) @classmethod - def get_cloudwatch_metrics(cls, account_id: str) -> List[MetricDatum]: + def get_cloudwatch_metrics(cls, account_id: str, region: str) -> List[MetricDatum]: metrics = [] - for name, bucket in s3_backends[account_id]["global"].buckets.items(): + for name, bucket in s3_backends[account_id][ + get_partition(region) + ].buckets.items(): metrics.append( MetricDatum( namespace="AWS/S3", @@ -1816,7 +1828,7 @@ def create_bucket(self, bucket_name: str, region_name: str) -> FakeBucket: source="aws.s3", event_name="CreateBucket", region=region_name, - resources=[f"arn:aws:s3:::{bucket_name}"], + resources=[f"arn:{new_bucket.partition}:s3:::{bucket_name}"], detail=notification_detail, ) @@ -1833,7 +1845,7 @@ def get_bucket(self, bucket_name: str) -> FakeBucket: if not s3_allow_crossdomain_access(): raise AccessDeniedByLock account_id = s3_backends.bucket_accounts[bucket_name] - return s3_backends[account_id]["global"].get_bucket(bucket_name) + return s3_backends[account_id][self.partition].get_bucket(bucket_name) raise MissingBucket(bucket=bucket_name) @@ -2115,6 +2127,7 @@ def put_object( bucket_name=bucket_name, value=value, account_id=self.account_id, + region_name=self.region_name, storage=storage, etag=etag, is_versioned=bucket.is_versioned, @@ -2463,6 +2476,7 @@ def create_multipart_upload( key_name, metadata, account_id=self.account_id, + region_name=self.region_name, storage=storage_type, tags=tags, acl=acl, @@ -2988,5 +3002,8 @@ def __init__( s3_backends = S3BackendDict( - S3Backend, service_name="s3", use_boto3_regions=False, additional_regions=["global"] + S3Backend, + service_name="s3", + use_boto3_regions=False, + additional_regions=PARTITION_NAMES, ) diff --git a/moto/s3/notifications.py b/moto/s3/notifications.py index bc9208695ea8..9f935a8f2f60 100644 --- a/moto/s3/notifications.py +++ b/moto/s3/notifications.py @@ -2,10 +2,13 @@ import json from datetime import datetime from enum import Enum -from typing import Any, Dict, List +from typing import TYPE_CHECKING, Any, Dict, List from moto.core.utils import unix_time +if TYPE_CHECKING: + from moto.s3.models import FakeBucket + _EVENT_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%f" @@ -64,7 +67,7 @@ def is_event_valid(self, event_name: str) -> bool: def _get_s3_event( - event_name: str, bucket: Any, key: Any, notification_id: str + event_name: str, bucket: "FakeBucket", key: Any, notification_id: str ) -> Dict[str, List[Dict[str, Any]]]: etag = key.etag.replace('"', "") # s3:ObjectCreated:Put --> ObjectCreated:Put @@ -83,7 +86,7 @@ def _get_s3_event( "configurationId": notification_id, "bucket": { "name": bucket.name, - "arn": f"arn:aws:s3:::{bucket.name}", + "arn": bucket.arn, }, "object": {"key": key.name, "size": key.size, "eTag": etag}, }, @@ -165,7 +168,7 @@ def _send_sns_message( def _send_event_bridge_message( account_id: str, - bucket: Any, + bucket: "FakeBucket", event_name: str, key: Any, ) -> None: @@ -179,7 +182,7 @@ def _send_event_bridge_message( event["account"] = account_id event["time"] = unix_time() event["region"] = bucket.region_name - event["resources"] = [f"arn:aws:s3:::{bucket.name}"] + event["resources"] = [bucket.arn] event["detail"] = { "version": "0", "bucket": {"name": bucket.name}, diff --git a/moto/s3/responses.py b/moto/s3/responses.py index ae6899b0c65b..dd9e9c91c068 100644 --- a/moto/s3/responses.py +++ b/moto/s3/responses.py @@ -11,6 +11,7 @@ from moto.core.common_types import TYPE_RESPONSE from moto.core.responses import BaseResponse from moto.core.utils import ( + ALT_DOMAIN_SUFFIXES, extract_region_from_aws_authorization, path_url, str_to_rfc_1123_datetime, @@ -21,6 +22,7 @@ from moto.s3bucket_path.utils import ( parse_key_name as bucketpath_parse_key_name, ) +from moto.utilities.utils import PARTITION_NAMES, get_partition from .exceptions import ( AccessForbidden, @@ -174,7 +176,7 @@ def is_access_point(self) -> bool: @property def backend(self) -> S3Backend: - return s3_backends[self.current_account]["global"] + return s3_backends[self.current_account][get_partition(self.region)] @property def should_autoescape(self) -> bool: @@ -236,8 +238,13 @@ def subdomain_based_buckets(self, request: Any) -> bool: if match: return False - path_based = host == "s3.amazonaws.com" or re.match( - r"s3[\.\-]([^.]*)\.amazonaws\.com", host + path_based = ( + host == "s3.amazonaws.com" + or re.match(r"s3[\.\-]([^.]*)\.amazonaws\.com", host) + or any( + re.match(r"s3[\.\-]([^.]*)\." + suffix, host) + for suffix in ALT_DOMAIN_SUFFIXES + ) ) return not path_based @@ -257,9 +264,9 @@ def parse_bucket_name_from_url(self, request: Any, url: str) -> str: from moto.s3control import s3control_backends ap_name = bucket_name[: -(len(self.current_account) + 1)] - ap = s3control_backends[self.current_account]["global"].get_access_point( - self.current_account, ap_name - ) + ap = s3control_backends[self.current_account][ + self.partition + ].get_access_point(self.current_account, ap_name) bucket_name = ap.bucket return bucket_name @@ -1287,7 +1294,7 @@ def _key_response( except S3ClientError: key = bucket = None if key: - resource = f"arn:aws:s3:::{bucket_name}/{key_name}" + resource = f"arn:{bucket.partition}:s3:::{bucket_name}/{key_name}" # type: ignore[union-attr] # Authorization Workflow # https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-auth-workflow-object-operation.html @@ -2124,7 +2131,10 @@ def _notification_config_from_body(self) -> Dict[str, Any]: ] = [the_notification] for n in the_notification: - if not n[name].startswith(f"arn:aws:{arn_string}:"): + if not any( + n[name].startswith(f"arn:{p}:{arn_string}:") + for p in PARTITION_NAMES + ): raise InvalidNotificationARN() # 2nd, verify that the Events list is correct: diff --git a/moto/s3control/config.py b/moto/s3control/config.py index 63487436c278..60a52b1b2fdb 100644 --- a/moto/s3control/config.py +++ b/moto/s3control/config.py @@ -14,6 +14,7 @@ class S3AccountPublicAccessBlockConfigQuery(ConfigQueryModel[S3ControlBackend]): def list_config_service_resources( self, account_id: str, + partition: str, resource_ids: Optional[List[str]], resource_name: Optional[str], limit: int, @@ -36,12 +37,12 @@ def list_config_service_resources( if resource_ids: for resource_id in resource_ids: if account_id == resource_id: - pab = self.backends[account_id]["global"].public_access_block + pab = self.backends[account_id][partition].public_access_block break # Otherwise, just grab the one from the backend: if not resource_ids: - pab = self.backends[account_id]["global"].public_access_block + pab = self.backends[account_id][partition].public_access_block # If it's not present, then return nothing if not pab: @@ -97,13 +98,14 @@ def list_config_service_resources( def get_config_resource( self, account_id: str, + partition: str, resource_id: str, resource_name: Optional[str] = None, backend_region: Optional[str] = None, resource_region: Optional[str] = None, ) -> Optional[Dict[str, Any]]: # Do we even have this defined? - backend = self.backends[account_id]["global"] + backend = self.backends[account_id][partition] if not backend.public_access_block: return None diff --git a/moto/s3control/models.py b/moto/s3control/models.py index 19ccd1ad279b..381eb745e171 100644 --- a/moto/s3control/models.py +++ b/moto/s3control/models.py @@ -11,6 +11,7 @@ WrongPublicAccessBlockAccountIdError, ) from moto.s3.models import PublicAccessBlock +from moto.utilities.utils import PARTITION_NAMES, get_partition from .exceptions import AccessPointNotFound, AccessPointPolicyNotFound @@ -19,6 +20,7 @@ class AccessPoint(BaseModel): def __init__( self, account_id: str, + region_name: str, name: str, bucket: str, vpc_configuration: Dict[str, Any], @@ -28,7 +30,7 @@ def __init__( self.alias = f"{name}-{mock_random.get_random_hex(34)}-s3alias" self.bucket = bucket self.created = datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f") - self.arn = f"arn:aws:s3:us-east-1:{account_id}:accesspoint/{name}" + self.arn = f"arn:{get_partition(region_name)}:s3:us-east-1:{account_id}:accesspoint/{name}" self.policy: Optional[str] = None self.network_origin = "VPC" if vpc_configuration else "Internet" self.vpc_id = (vpc_configuration or {}).get("VpcId") @@ -100,10 +102,11 @@ def create_access_point( ) -> AccessPoint: access_point = AccessPoint( account_id, - name, - bucket, - vpc_configuration, - public_access_block_configuration, + region_name=self.region_name, + name=name, + bucket=bucket, + vpc_configuration=vpc_configuration, + public_access_block_configuration=public_access_block_configuration, ) self.access_points[account_id][name] = access_point return access_point @@ -142,5 +145,5 @@ def get_access_point_policy_status(self, account_id: str, name: str) -> bool: S3ControlBackend, "s3control", use_boto3_regions=False, - additional_regions=["global"], + additional_regions=PARTITION_NAMES, ) diff --git a/moto/s3control/responses.py b/moto/s3control/responses.py index 482e5c0e7718..175892b8981a 100644 --- a/moto/s3control/responses.py +++ b/moto/s3control/responses.py @@ -16,7 +16,7 @@ def __init__(self) -> None: @property def backend(self) -> S3ControlBackend: - return s3control_backends[self.current_account]["global"] + return s3control_backends[self.current_account][self.partition] def get_public_access_block(self) -> str: account_id = self.headers.get("x-amz-account-id") diff --git a/moto/sagemaker/models.py b/moto/sagemaker/models.py index 8befdc28e61b..7da3f8d91514 100644 --- a/moto/sagemaker/models.py +++ b/moto/sagemaker/models.py @@ -1,6 +1,7 @@ import json import os import random +import re import string from datetime import datetime from typing import Any, Dict, Iterable, List, Optional, Union, cast @@ -11,6 +12,7 @@ from moto.core.common_models import BaseModel, CloudFormationModel from moto.sagemaker import validators from moto.utilities.paginator import paginate +from moto.utilities.utils import ARN_PARTITION_REGEX, get_partition from .exceptions import ( AWSValidationException, @@ -2253,7 +2255,7 @@ def associate_trial_component( self.trials[trial_name].trial_components.extend([trial_component_name]) else: raise ResourceNotFound( - message=f"Trial 'arn:aws:sagemaker:{self.region_name}:{self.account_id}:experiment-trial/{trial_name}' does not exist." + message=f"Trial 'arn:{get_partition(self.region_name)}:sagemaker:{self.region_name}:{self.account_id}:experiment-trial/{trial_name}' does not exist." ) if trial_component_name in self.trial_components.keys(): @@ -2281,8 +2283,8 @@ def disassociate_trial_component( ) return { - "TrialComponentArn": f"arn:aws:sagemaker:{self.region_name}:{self.account_id}:experiment-trial-component/{trial_component_name}", - "TrialArn": f"arn:aws:sagemaker:{self.region_name}:{self.account_id}:experiment-trial/{trial_name}", + "TrialComponentArn": f"arn:{get_partition(self.region_name)}:sagemaker:{self.region_name}:{self.account_id}:experiment-trial-component/{trial_component_name}", + "TrialArn": f"arn:{get_partition(self.region_name)}:sagemaker:{self.region_name}:{self.account_id}:experiment-trial/{trial_name}", } def update_trial_component( @@ -2673,7 +2675,9 @@ def create_pipeline( if pipeline_definition_s3_location: pipeline_definition = load_pipeline_definition_from_s3( # type: ignore - pipeline_definition_s3_location, self.account_id + pipeline_definition_s3_location, + account_id=self.account_id, + partition=self.partition, ) pipeline = FakePipeline( @@ -2715,7 +2719,9 @@ def update_pipeline(self, pipeline_name: str, **kwargs: Any) -> str: self.pipelines[ pipeline_name ].pipeline_definition = load_pipeline_definition_from_s3( # type: ignore - attr_value, self.account_id + attr_value, + self.account_id, + partition=self.partition, ) continue setattr(self.pipelines[pipeline_name], attr_key, attr_value) @@ -3445,7 +3451,7 @@ def list_model_packages( ) if model_package_group_name is not None: model_package_type = "Versioned" - if model_package_group_name.startswith("arn:aws"): + if re.match(ARN_PARTITION_REGEX, model_package_group_name): model_package_group_name = model_package_group_name.split("/")[-1] model_package_summary_list = list( filter( diff --git a/moto/sagemaker/utils.py b/moto/sagemaker/utils.py index ae651eb1ceb2..ed801867208e 100644 --- a/moto/sagemaker/utils.py +++ b/moto/sagemaker/utils.py @@ -3,6 +3,7 @@ from typing import Any, Dict from moto.s3.models import s3_backends +from moto.utilities.utils import get_partition from .exceptions import ValidationError @@ -39,9 +40,9 @@ def get_pipeline_execution_from_arn( def load_pipeline_definition_from_s3( - pipeline_definition_s3_location: Dict[str, Any], account_id: str + pipeline_definition_s3_location: Dict[str, Any], account_id: str, partition: str ) -> Dict[str, Any]: - s3_backend = s3_backends[account_id]["global"] + s3_backend = s3_backends[account_id][partition] result = s3_backend.get_object( bucket_name=pipeline_definition_s3_location["Bucket"], key_name=pipeline_definition_s3_location["ObjectKey"], @@ -50,7 +51,7 @@ def load_pipeline_definition_from_s3( def arn_formatter(_type: str, _id: str, account_id: str, region_name: str) -> str: - return f"arn:aws:sagemaker:{region_name}:{account_id}:{_type}/{_id}" + return f"arn:{get_partition(region_name)}:sagemaker:{region_name}:{account_id}:{_type}/{_id}" def validate_model_approval_status(model_approval_status: typing.Optional[str]) -> None: diff --git a/moto/sagemakerruntime/models.py b/moto/sagemakerruntime/models.py index 264829534ed0..45c05c13e367 100644 --- a/moto/sagemakerruntime/models.py +++ b/moto/sagemakerruntime/models.py @@ -89,7 +89,7 @@ def invoke_endpoint_async(self, endpoint_name: str, input_location: str) -> str: output_location = "response.json" from moto.s3.models import s3_backends - s3_backend = s3_backends[self.account_id]["global"] + s3_backend = s3_backends[self.account_id][self.partition] s3_backend.create_bucket(output_bucket, region_name=self.region_name) s3_backend.put_object(output_bucket, output_location, value=output) self.async_results[endpoint_name][input_location] = ( diff --git a/moto/scheduler/models.py b/moto/scheduler/models.py index f65e07bb14bd..626194c66389 100644 --- a/moto/scheduler/models.py +++ b/moto/scheduler/models.py @@ -6,6 +6,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import unix_time from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ScheduleExists, ScheduleGroupNotFound, ScheduleNotFound @@ -30,9 +31,7 @@ def __init__( self.name = name self.group_name = group_name self.description = description - self.arn = ( - f"arn:aws:scheduler:{region}:{account_id}:schedule/{group_name}/{name}" - ) + self.arn = f"arn:{get_partition(region)}:scheduler:{region}:{account_id}:schedule/{group_name}/{name}" self.schedule_expression = schedule_expression self.schedule_expression_timezone = schedule_expression_timezone self.flexible_time_window = flexible_time_window @@ -100,7 +99,7 @@ def update( class ScheduleGroup(BaseModel): def __init__(self, region: str, account_id: str, name: str): self.name = name - self.arn = f"arn:aws:scheduler:{region}:{account_id}:schedule-group/{name}" + self.arn = f"arn:{get_partition(region)}:scheduler:{region}:{account_id}:schedule-group/{name}" self.schedules: Dict[str, Schedule] = dict() self.created_on = None if self.name == "default" else unix_time() self.last_modified = None if self.name == "default" else unix_time() diff --git a/moto/secretsmanager/utils.py b/moto/secretsmanager/utils.py index 291781842920..e5435a6c9dd8 100644 --- a/moto/secretsmanager/utils.py +++ b/moto/secretsmanager/utils.py @@ -2,6 +2,7 @@ import string from moto.moto_api._internal import mock_random as random +from moto.utilities.utils import ARN_PARTITION_REGEX, get_partition def random_password( @@ -63,9 +64,7 @@ def random_password( def secret_arn(account_id: str, region: str, secret_id: str) -> str: id_string = "".join(random.choice(string.ascii_letters) for _ in range(6)) - return ( - f"arn:aws:secretsmanager:{region}:{account_id}:secret:{secret_id}-{id_string}" - ) + return f"arn:{get_partition(region)}:secretsmanager:{region}:{account_id}:secret:{secret_id}-{id_string}" def get_secret_name_from_partial_arn(partial_arn: str) -> str: @@ -77,7 +76,7 @@ def get_secret_name_from_partial_arn(partial_arn: str) -> str: # This method only deals with partial ARN's, and will return the name: testsecret # # If you were to pass in full url, this method will return 'testsecret-xxxxxx' - which has no meaning on it's own - if partial_arn.startswith("arn:aws:secretsmanager:"): + if re.match(ARN_PARTITION_REGEX + ":secretsmanager:", partial_arn): # split the arn by colon # then get the last value which is the name appended with a random string return partial_arn.split(":")[-1] diff --git a/moto/servicediscovery/models.py b/moto/servicediscovery/models.py index 825a25bce1bc..444c9a6f8447 100644 --- a/moto/servicediscovery/models.py +++ b/moto/servicediscovery/models.py @@ -6,6 +6,7 @@ from moto.core.utils import unix_time from moto.moto_api._internal import mock_random as random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ( ConflictingDomainExists, @@ -35,7 +36,7 @@ def __init__( vpc: Optional[str] = None, ): self.id = f"ns-{random_id(20)}" - self.arn = f"arn:aws:servicediscovery:{region}:{account_id}:namespace/{self.id}" + self.arn = f"arn:{get_partition(region)}:servicediscovery:{region}:{account_id}:namespace/{self.id}" self.name = name self.type = ns_type self.creator_request_id = creator_request_id @@ -78,7 +79,7 @@ def __init__( service_type: str, ): self.id = f"srv-{random_id(8)}" - self.arn = f"arn:aws:servicediscovery:{region}:{account_id}:service/{self.id}" + self.arn = f"arn:{get_partition(region)}:servicediscovery:{region}:{account_id}:service/{self.id}" self.name = name self.namespace_id = namespace_id self.description = description diff --git a/moto/signer/models.py b/moto/signer/models.py index 4a85d0f53043..2c46b07bd08f 100644 --- a/moto/signer/models.py +++ b/moto/signer/models.py @@ -4,6 +4,7 @@ from moto.core.common_models import BaseModel from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition class SigningProfile(BaseModel): @@ -24,7 +25,7 @@ def __init__( self.backend = backend self.status = "Active" - self.arn = f"arn:aws:signer:{backend.region_name}:{backend.account_id}:/signing-profiles/{name}" + self.arn = f"arn:{get_partition(backend.region_name)}:signer:{backend.region_name}:{backend.account_id}:/signing-profiles/{name}" self.profile_version = mock_random.get_random_hex(10) self.profile_version_arn = f"{self.arn}/{self.profile_version}" self.signing_material = signing_material diff --git a/moto/sns/models.py b/moto/sns/models.py index a3459de589b0..7b85f237334f 100644 --- a/moto/sns/models.py +++ b/moto/sns/models.py @@ -16,6 +16,7 @@ from moto.sqs import sqs_backends from moto.sqs.exceptions import MissingParameter from moto.utilities.arns import parse_arn +from moto.utilities.utils import get_partition from .exceptions import ( BatchEntryIdsNotDistinct, @@ -325,7 +326,7 @@ def __init__( self.name = name self.platform = platform self.attributes = attributes - self.arn = f"arn:aws:sns:{region}:{account_id}:app/{platform}/{name}" + self.arn = f"arn:{get_partition(region)}:sns:{region}:{account_id}:app/{platform}/{name}" class PlatformEndpoint(BaseModel): @@ -344,7 +345,7 @@ def __init__( self.token = token self.attributes = attributes self.id = mock_random.uuid4() - self.arn = f"arn:aws:sns:{region}:{account_id}:endpoint/{self.application.platform}/{self.application.name}/{self.id}" + self.arn = f"arn:{get_partition(region)}:sns:{region}:{account_id}:endpoint/{self.application.platform}/{self.application.name}/{self.id}" self.messages: Dict[str, str] = OrderedDict() self.__fixup_attributes() @@ -958,6 +959,7 @@ def aggregate_rules( def add_permission( self, + region_name: str, topic_arn: str, label: str, aws_account_ids: List[str], @@ -981,7 +983,8 @@ def add_permission( raise SNSInvalidParameter("Policy statement action out of service scope!") principals = [ - f"arn:aws:iam::{account_id}:root" for account_id in aws_account_ids + f"arn:{get_partition(region_name)}:iam::{account_id}:root" + for account_id in aws_account_ids ] actions = [f"SNS:{action_name}" for action_name in action_names] diff --git a/moto/sns/responses.py b/moto/sns/responses.py index 8860c0dfcc29..b293aff5041e 100644 --- a/moto/sns/responses.py +++ b/moto/sns/responses.py @@ -733,7 +733,13 @@ def add_permission(self) -> str: aws_account_ids = self._get_multi_param("AWSAccountId.member.") action_names = self._get_multi_param("ActionName.member.") - self.backend.add_permission(topic_arn, label, aws_account_ids, action_names) + self.backend.add_permission( + region_name=self.region, + topic_arn=topic_arn, + label=label, + aws_account_ids=aws_account_ids, + action_names=action_names, + ) template = self.response_template(ADD_PERMISSION_TEMPLATE) return template.render() diff --git a/moto/sns/utils.py b/moto/sns/utils.py index fb6c0ed53b56..e5764d213a33 100644 --- a/moto/sns/utils.py +++ b/moto/sns/utils.py @@ -3,12 +3,13 @@ from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Union from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition E164_REGEX = re.compile(r"^\+?[1-9]\d{1,14}$") def make_arn_for_topic(account_id: str, name: str, region_name: str) -> str: - return f"arn:aws:sns:{region_name}:{account_id}:{name}" + return f"arn:{get_partition(region_name)}:sns:{region_name}:{account_id}:{name}" def make_arn_for_subscription(topic_arn: str) -> str: diff --git a/moto/sqs/models.py b/moto/sqs/models.py index 4facfb228a08..35f6f1764324 100644 --- a/moto/sqs/models.py +++ b/moto/sqs/models.py @@ -20,7 +20,7 @@ unix_time_millis, ) from moto.moto_api._internal import mock_random as random -from moto.utilities.utils import md5_hash +from moto.utilities.utils import get_partition, md5_hash from .constants import MAXIMUM_VISIBILITY_TIMEOUT from .exceptions import ( @@ -278,7 +278,7 @@ def __init__(self, name: str, region: str, account_id: str, **kwargs: Any): now = unix_time() self.created_timestamp = now - self.queue_arn = f"arn:aws:sqs:{region}:{account_id}:{name}" + self.queue_arn = f"arn:{get_partition(region)}:sqs:{region}:{account_id}:{name}" self.dead_letter_queue: Optional["Queue"] = None self.fifo_queue = False @@ -1155,7 +1155,12 @@ def list_dead_letter_source_queues(self, queue_name: str) -> List[Queue]: return queues def add_permission( - self, queue_name: str, actions: List[str], account_ids: List[str], label: str + self, + region_name: str, + queue_name: str, + actions: List[str], + account_ids: List[str], + label: str, ) -> None: queue = self.get_queue(queue_name) @@ -1195,7 +1200,10 @@ def add_permission( f"Value {label} for parameter Label is invalid. Reason: Already exists." ) - principals = [f"arn:aws:iam::{account_id}:root" for account_id in account_ids] + principals = [ + f"arn:{get_partition(region_name)}:iam::{account_id}:root" + for account_id in account_ids + ] actions = [f"SQS:{action}" for action in actions] statement = { diff --git a/moto/sqs/responses.py b/moto/sqs/responses.py index 613a4594cc67..3c84d271080d 100644 --- a/moto/sqs/responses.py +++ b/moto/sqs/responses.py @@ -684,7 +684,13 @@ def add_permission(self) -> str: ) label = self._get_param("Label") - self.sqs_backend.add_permission(queue_name, actions, account_ids, label) + self.sqs_backend.add_permission( + region_name=self.region, + queue_name=queue_name, + actions=actions, + account_ids=account_ids, + label=label, + ) return self._empty_response(ADD_PERMISSION_RESPONSE) diff --git a/moto/ssm/resources/regions.json b/moto/ssm/resources/regions.json index eb3272571be1..3ae48a8515ca 100644 --- a/moto/ssm/resources/regions.json +++ b/moto/ssm/resources/regions.json @@ -12327,7 +12327,10 @@ } }, "thinclient": { - "Value": "thinclient" + "Value": "thinclient", + "endpoint": { + "Value": "api.thinclient.ap-south-1.amazonaws.com" + } }, "timestream-influxdb": { "Value": "timestream-influxdb", @@ -15780,6 +15783,12 @@ "Value": "HTTPS" } }, + "repostspace": { + "Value": "repostspace", + "endpoint": { + "Value": "repostspace.ap-southeast-1.amazonaws.com" + } + }, "resiliencehub": { "Value": "resiliencehub", "endpoint": { @@ -18531,6 +18540,12 @@ "Value": "HTTPS" } }, + "repostspace": { + "Value": "repostspace", + "endpoint": { + "Value": "repostspace.ap-southeast-2.amazonaws.com" + } + }, "resiliencehub": { "Value": "resiliencehub", "endpoint": { @@ -23646,6 +23661,12 @@ "Value": "HTTPS" } }, + "repostspace": { + "Value": "repostspace", + "endpoint": { + "Value": "repostspace.ca-central-1.amazonaws.com" + } + }, "resiliencehub": { "Value": "resiliencehub", "endpoint": { @@ -24058,7 +24079,10 @@ } }, "thinclient": { - "Value": "thinclient" + "Value": "thinclient", + "endpoint": { + "Value": "api.thinclient.ca-central-1.amazonaws.com" + } }, "tnb": { "Value": "tnb", @@ -30636,7 +30660,10 @@ } }, "thinclient": { - "Value": "thinclient" + "Value": "thinclient", + "endpoint": { + "Value": "api.thinclient.eu-central-1.amazonaws.com" + } }, "timestream": { "Value": "timestream" @@ -39249,6 +39276,12 @@ "Value": "HTTPS" } }, + "repostspace": { + "Value": "repostspace", + "endpoint": { + "Value": "repostspace.eu-west-1.amazonaws.com" + } + }, "resiliencehub": { "Value": "resiliencehub", "endpoint": { @@ -39715,7 +39748,10 @@ } }, "thinclient": { - "Value": "thinclient" + "Value": "thinclient", + "endpoint": { + "Value": "api.thinclient.eu-west-1.amazonaws.com" + } }, "timestream": { "Value": "timestream" @@ -41647,6 +41683,15 @@ "omics": { "Value": "omics" }, + "opensearchserverless": { + "Value": "opensearchserverless", + "endpoint": { + "Value": "aoss.eu-west-2.amazonaws.com" + }, + "protocols": { + "Value": "HTTPS" + } + }, "opsworks": { "Value": "opsworks", "endpoint": { @@ -42260,7 +42305,10 @@ } }, "thinclient": { - "Value": "thinclient" + "Value": "thinclient", + "endpoint": { + "Value": "api.thinclient.eu-west-2.amazonaws.com" + } }, "transcribe": { "Value": "transcribe", @@ -53396,6 +53444,12 @@ "Value": "HTTPS" } }, + "repostspace": { + "Value": "repostspace", + "endpoint": { + "Value": "repostspace.us-east-1.amazonaws.com" + } + }, "resiliencehub": { "Value": "resiliencehub", "endpoint": { @@ -53871,7 +53925,10 @@ } }, "thinclient": { - "Value": "thinclient" + "Value": "thinclient", + "endpoint": { + "Value": "api.thinclient.us-east-1.amazonaws.com" + } }, "timestream": { "Value": "timestream" @@ -64770,7 +64827,10 @@ } }, "thinclient": { - "Value": "thinclient" + "Value": "thinclient", + "endpoint": { + "Value": "api.thinclient.us-west-2.amazonaws.com" + } }, "timestream": { "Value": "timestream" diff --git a/moto/ssm/resources/services.json b/moto/ssm/resources/services.json index 4700949fb3b5..4799a2aaffa9 100644 --- a/moto/ssm/resources/services.json +++ b/moto/ssm/resources/services.json @@ -44969,6 +44969,15 @@ "Value": "HTTPS" } }, + "eu-west-2": { + "Value": "eu-west-2", + "endpoint": { + "Value": "aoss.eu-west-2.amazonaws.com" + }, + "protocols": { + "Value": "HTTPS" + } + }, "eu-west-3": { "Value": "eu-west-3", "endpoint": { @@ -50560,12 +50569,42 @@ "Value": "AWS re:Post Private" }, "regions": { + "ap-southeast-1": { + "Value": "ap-southeast-1", + "endpoint": { + "Value": "repostspace.ap-southeast-1.amazonaws.com" + } + }, + "ap-southeast-2": { + "Value": "ap-southeast-2", + "endpoint": { + "Value": "repostspace.ap-southeast-2.amazonaws.com" + } + }, + "ca-central-1": { + "Value": "ca-central-1", + "endpoint": { + "Value": "repostspace.ca-central-1.amazonaws.com" + } + }, "eu-central-1": { "Value": "eu-central-1", "endpoint": { "Value": "repostspace.eu-central-1.amazonaws.com" } }, + "eu-west-1": { + "Value": "eu-west-1", + "endpoint": { + "Value": "repostspace.eu-west-1.amazonaws.com" + } + }, + "us-east-1": { + "Value": "us-east-1", + "endpoint": { + "Value": "repostspace.us-east-1.amazonaws.com" + } + }, "us-west-2": { "Value": "us-west-2", "endpoint": { @@ -63238,25 +63277,46 @@ }, "regions": { "ap-south-1": { - "Value": "ap-south-1" + "Value": "ap-south-1", + "endpoint": { + "Value": "api.thinclient.ap-south-1.amazonaws.com" + } }, "ca-central-1": { - "Value": "ca-central-1" + "Value": "ca-central-1", + "endpoint": { + "Value": "api.thinclient.ca-central-1.amazonaws.com" + } }, "eu-central-1": { - "Value": "eu-central-1" + "Value": "eu-central-1", + "endpoint": { + "Value": "api.thinclient.eu-central-1.amazonaws.com" + } }, "eu-west-1": { - "Value": "eu-west-1" + "Value": "eu-west-1", + "endpoint": { + "Value": "api.thinclient.eu-west-1.amazonaws.com" + } }, "eu-west-2": { - "Value": "eu-west-2" + "Value": "eu-west-2", + "endpoint": { + "Value": "api.thinclient.eu-west-2.amazonaws.com" + } }, "us-east-1": { - "Value": "us-east-1" + "Value": "us-east-1", + "endpoint": { + "Value": "api.thinclient.us-east-1.amazonaws.com" + } }, "us-west-2": { - "Value": "us-west-2" + "Value": "us-west-2", + "endpoint": { + "Value": "api.thinclient.us-west-2.amazonaws.com" + } } } }, diff --git a/moto/ssm/utils.py b/moto/ssm/utils.py index b5dc590e1115..b05ae20fd512 100644 --- a/moto/ssm/utils.py +++ b/moto/ssm/utils.py @@ -1,10 +1,12 @@ from typing import Any, Dict, List +from moto.utilities.utils import get_partition + def parameter_arn(account_id: str, region: str, parameter_name: str) -> str: if parameter_name[0] == "/": parameter_name = parameter_name[1:] - return f"arn:aws:ssm:{region}:{account_id}:parameter/{parameter_name}" + return f"arn:{get_partition(region)}:ssm:{region}:{account_id}:parameter/{parameter_name}" def convert_to_tree(parameters: List[Dict[str, Any]]) -> Dict[str, Any]: diff --git a/moto/ssoadmin/models.py b/moto/ssoadmin/models.py index ecf148910878..7900bdb03e7e 100644 --- a/moto/ssoadmin/models.py +++ b/moto/ssoadmin/models.py @@ -215,7 +215,8 @@ def _find_managed_policy(self, managed_policy_arn: str) -> ManagedPolicy: managed_policy = self.aws_managed_policies.get(policy_name, None) if managed_policy is not None: path = managed_policy.get("path", "/") - expected_arn = f"arn:aws:iam::aws:policy{path}{policy_name}" + expected_arn = f"arn:{self.partition}:iam::aws:policy{path}{policy_name}" + if managed_policy_arn == expected_arn: return ManagedPolicy(managed_policy_arn, policy_name) raise ResourceNotFoundException( diff --git a/moto/stepfunctions/models.py b/moto/stepfunctions/models.py index d6610053237b..d2ea33a56422 100644 --- a/moto/stepfunctions/models.py +++ b/moto/stepfunctions/models.py @@ -11,6 +11,7 @@ from moto.core.utils import iso_8601_datetime_with_milliseconds from moto.moto_api._internal import mock_random from moto.utilities.paginator import paginate +from moto.utilities.utils import ARN_PARTITION_REGEX, get_partition from .exceptions import ( ExecutionAlreadyExists, @@ -250,9 +251,13 @@ def __init__( state_machine_arn: str, execution_input: str, ): - execution_arn = "arn:aws:states:{}:{}:execution:{}:{}" + execution_arn = "arn:{}:states:{}:{}:execution:{}:{}" execution_arn = execution_arn.format( - region_name, account_id, state_machine_name, execution_name + get_partition(region_name), + region_name, + account_id, + state_machine_name, + execution_name, ) self.execution_arn = execution_arn self.name = execution_name @@ -494,13 +499,15 @@ class StepFunctionBackend(BaseBackend): "\u009f", ] accepted_role_arn_format = re.compile( - "arn:aws:iam::(?P[0-9]{12}):role/.+" + ARN_PARTITION_REGEX + r":iam::(?P[0-9]{12}):role/.+" ) accepted_mchn_arn_format = re.compile( - "arn:aws:states:[-0-9a-zA-Z]+:(?P[0-9]{12}):stateMachine:.+" + ARN_PARTITION_REGEX + + r":states:[-0-9a-zA-Z]+:(?P[0-9]{12}):stateMachine:.+" ) accepted_exec_arn_format = re.compile( - "arn:aws:states:[-0-9a-zA-Z]+:(?P[0-9]{12}):execution:.+" + ARN_PARTITION_REGEX + + r":states:[-0-9a-zA-Z]+:(?P[0-9]{12}):execution:.+" ) def __init__(self, region_name: str, account_id: str): @@ -517,7 +524,7 @@ def create_state_machine( ) -> StateMachine: self._validate_name(name) self._validate_role_arn(roleArn) - arn = f"arn:aws:states:{self.region_name}:{self.account_id}:stateMachine:{name}" + arn = f"arn:{get_partition(self.region_name)}:states:{self.region_name}:{self.account_id}:stateMachine:{name}" try: return self.describe_state_machine(arn) except StateMachineDoesNotExist: diff --git a/moto/sts/models.py b/moto/sts/models.py index 5fbb9cfb1fa9..68db185d02fc 100644 --- a/moto/sts/models.py +++ b/moto/sts/models.py @@ -7,17 +7,14 @@ from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel -from moto.core.utils import ( - get_partition_from_region, - iso_8601_datetime_with_milliseconds, - utcnow, -) +from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow from moto.iam.models import AccessKey, iam_backends from moto.sts.utils import ( DEFAULT_STS_SESSION_DURATION, random_assumed_role_id, random_session_token, ) +from moto.utilities.utils import ARN_PARTITION_REGEX, PARTITION_NAMES, get_partition class Token(BaseModel): @@ -56,6 +53,7 @@ def __init__( self.access_key_id = access_key.access_key_id self.secret_access_key = access_key.secret_access_key self.session_token = random_session_token() + self.partition = get_partition(region_name) @property def expiration_ISO8601(self) -> str: @@ -63,7 +61,7 @@ def expiration_ISO8601(self) -> str: @property def user_id(self) -> str: - iam_backend = iam_backends[self.account_id]["global"] + iam_backend = iam_backends[self.account_id][self.partition] try: role_id = iam_backend.get_role_by_arn(arn=self.role_arn).id except Exception: @@ -72,7 +70,7 @@ def user_id(self) -> str: @property def arn(self) -> str: - partition = get_partition_from_region(self.region_name) + partition = get_partition(self.region_name) return f"arn:{partition}:sts::{self.account_id}:assumed-role/{self.role_arn.split('/')[-1]}/{self.session_name}" @@ -111,7 +109,7 @@ def assume_role( external_id=external_id, ) access_key.role_arn = role_arn - account_backend = sts_backends[account_id]["global"] + account_backend = sts_backends[account_id][get_partition(region_name)] account_backend.assumed_roles.append(role) return role @@ -182,27 +180,27 @@ def get_caller_identity( if assumed_role: return assumed_role.user_id, assumed_role.arn, assumed_role.account_id - iam_backend = iam_backends[self.account_id]["global"] + iam_backend = iam_backends[self.account_id][self.partition] user = iam_backend.get_user_from_access_key_id(access_key_id) if user: return user.id, user.arn, user.account_id # Default values in case the request does not use valid credentials generated by moto - partition = get_partition_from_region(region) + partition = get_partition(region) user_id = "AKIAIOSFODNN7EXAMPLE" arn = f"arn:{partition}:sts::{self.account_id}:user/moto" return user_id, arn, self.account_id def _create_access_key(self, role: str) -> Tuple[str, AccessKey]: - account_id_match = re.search(r"arn:aws:iam::([0-9]+).+", role) + account_id_match = re.search(ARN_PARTITION_REGEX + r":iam::([0-9]+).+", role) if account_id_match: - account_id = account_id_match.group(1) + account_id = account_id_match.group(2) else: account_id = self.account_id - iam_backend = iam_backends[account_id]["global"] + iam_backend = iam_backends[account_id][self.partition] return account_id, iam_backend.create_temp_access_key() sts_backends = BackendDict( - STSBackend, "sts", use_boto3_regions=False, additional_regions=["global"] + STSBackend, "sts", use_boto3_regions=False, additional_regions=PARTITION_NAMES ) diff --git a/moto/sts/responses.py b/moto/sts/responses.py index 317e0f3a0cc3..85a0c34e730e 100644 --- a/moto/sts/responses.py +++ b/moto/sts/responses.py @@ -12,7 +12,7 @@ def __init__(self) -> None: @property def backend(self) -> STSBackend: - return sts_backends[self.current_account]["global"] + return sts_backends[self.current_account][self.partition] def _determine_resource(self) -> str: if "AssumeRole" in self.querystring.get("Action", []): diff --git a/moto/swf/models/domain.py b/moto/swf/models/domain.py index 01c9011ad204..642a5f2cbd7a 100644 --- a/moto/swf/models/domain.py +++ b/moto/swf/models/domain.py @@ -2,6 +2,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional from moto.core.common_models import BaseModel +from moto.utilities.utils import get_partition from ..exceptions import ( SWFUnknownResourceFault, @@ -51,7 +52,7 @@ def to_short_dict(self) -> Dict[str, str]: if self.description: hsh["description"] = self.description hsh["arn"] = ( - f"arn:aws:swf:{self.region_name}:{self.account_id}:/domain/{self.name}" + f"arn:{get_partition(self.region_name)}:swf:{self.region_name}:{self.account_id}:/domain/{self.name}" ) return hsh diff --git a/moto/timestreamwrite/models.py b/moto/timestreamwrite/models.py index 695bf8c7389a..a761cc369d26 100644 --- a/moto/timestreamwrite/models.py +++ b/moto/timestreamwrite/models.py @@ -4,6 +4,7 @@ from moto.core.common_models import BaseModel from moto.core.utils import unix_time from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import get_partition from .exceptions import ResourceNotFound @@ -37,7 +38,7 @@ def __init__( ] } self.records: List[Dict[str, Any]] = [] - self.arn = f"arn:aws:timestream:{self.region_name}:{account_id}:database/{self.db_name}/table/{self.name}" + self.arn = f"arn:{get_partition(self.region_name)}:timestream:{self.region_name}:{account_id}:database/{self.db_name}/table/{self.name}" def update( self, @@ -74,11 +75,10 @@ def __init__( self.region_name = region_name self.name = database_name self.kms_key_id = ( - kms_key_id or f"arn:aws:kms:{region_name}:{account_id}:key/default_key" - ) - self.arn = ( - f"arn:aws:timestream:{self.region_name}:{account_id}:database/{self.name}" + kms_key_id + or f"arn:{get_partition(region_name)}:kms:{region_name}:{account_id}:key/default_key" ) + self.arn = f"arn:{get_partition(self.region_name)}:timestream:{self.region_name}:{account_id}:database/{self.name}" self.created_on = unix_time() self.updated_on = unix_time() self.tables: Dict[str, TimestreamTable] = dict() diff --git a/moto/utilities/utils.py b/moto/utilities/utils.py index a7caffb4534e..77fae680e893 100644 --- a/moto/utilities/utils.py +++ b/moto/utilities/utils.py @@ -3,6 +3,28 @@ import pkgutil from typing import Any, Dict, Iterator, List, MutableMapping, Optional, Tuple, TypeVar +DEFAULT_PARTITION = "aws" +REGION_PREFIX_TO_PARTITION = { + # (region prefix, aws partition) + "cn-": "aws-cn", + "us-gov-": "aws-us-gov", + "us-iso-": "aws-iso", + "us-isob-": "aws-iso-b", +} +PARTITION_NAMES = list(REGION_PREFIX_TO_PARTITION.values()) + [DEFAULT_PARTITION] +ARN_PARTITION_REGEX = r"^arn:(" + "|".join(sorted(PARTITION_NAMES)) + ")" + + +def get_partition(region: str) -> str: + if not region: + return DEFAULT_PARTITION + if region in PARTITION_NAMES: + return region + for prefix in REGION_PREFIX_TO_PARTITION: + if region.startswith(prefix): + return REGION_PREFIX_TO_PARTITION[prefix] + return DEFAULT_PARTITION + def str2bool(v: Any) -> Optional[bool]: if v in ("yes", True, "true", "True", "TRUE", "t", "1"): diff --git a/moto/wafv2/models.py b/moto/wafv2/models.py index 6bead554ed30..173cb1658418 100644 --- a/moto/wafv2/models.py +++ b/moto/wafv2/models.py @@ -7,6 +7,7 @@ from moto.core.utils import iso_8601_datetime_with_milliseconds from moto.moto_api._internal import mock_random from moto.utilities.tagging_service import TaggingService +from moto.utilities.utils import ARN_PARTITION_REGEX, PARTITION_NAMES from .exceptions import ( WAFNonexistentItemException, @@ -22,7 +23,8 @@ US_EAST_1_REGION = "us-east-1" GLOBAL_REGION = "global" APIGATEWAY_REGEX = ( - r"arn:aws:apigateway:[a-zA-Z0-9-]+::/restapis/[a-zA-Z0-9]+/stages/[a-zA-Z0-9]+" + ARN_PARTITION_REGEX + + r":apigateway:[a-zA-Z0-9-]+::/restapis/[a-zA-Z0-9]+/stages/[a-zA-Z0-9]+" ) @@ -421,5 +423,5 @@ def list_logging_configurations(self, scope: str) -> List[FakeLoggingConfigurati wafv2_backends = BackendDict( - WAFV2Backend, "waf-regional", additional_regions=["global"] + WAFV2Backend, "waf-regional", additional_regions=PARTITION_NAMES ) diff --git a/moto/wafv2/utils.py b/moto/wafv2/utils.py index a893ec28a8ba..9bb7b47535a2 100644 --- a/moto/wafv2/utils.py +++ b/moto/wafv2/utils.py @@ -1,3 +1,6 @@ +from moto.utilities.utils import PARTITION_NAMES, get_partition + + def make_arn_for_wacl( name: str, account_id: str, region_name: str, wacl_id: str, scope: str ) -> str: @@ -25,4 +28,10 @@ def make_arn( elif scope == "CLOUDFRONT": scope = "global" - return f"arn:aws:wafv2:{region_name}:{account_id}:{scope}/{resource}/{name}/{_id}" + if region_name in PARTITION_NAMES: + region_name = "global" + partition = ( + region_name if region_name in PARTITION_NAMES else get_partition(region_name) + ) + + return f"arn:{partition}:wafv2:{region_name}:{account_id}:{scope}/{resource}/{name}/{_id}" diff --git a/moto/workspaces/models.py b/moto/workspaces/models.py index 86cdb5338871..87c7b09eb769 100644 --- a/moto/workspaces/models.py +++ b/moto/workspaces/models.py @@ -11,6 +11,7 @@ from moto.ds.models import Directory from moto.ec2 import ec2_backends from moto.moto_api._internal import mock_random +from moto.utilities.utils import get_partition from moto.workspaces.exceptions import ( InvalidParameterValuesException, ResourceAlreadyExistsException, @@ -141,7 +142,9 @@ def __init__( self.subnet_ids = subnet_ids or dir_subnet_ids self.dns_ip_addresses = directory.dns_ip_addrs self.customer_username = "Administrator" - self.iam_rold_id = f"arn:aws:iam::{account_id}:role/workspaces_DefaultRole" + self.iam_rold_id = ( + f"arn:{get_partition(region)}:iam::{account_id}:role/workspaces_DefaultRole" + ) dir_type = directory.directory_type if dir_type == "ADConnector": self.directory_type = "AD_CONNECTOR" diff --git a/setup.cfg b/setup.cfg index 9892d8a51b03..70de2ff77166 100644 --- a/setup.cfg +++ b/setup.cfg @@ -29,7 +29,7 @@ install_requires = boto3>=1.9.201 botocore>=1.14.0 cryptography>=3.3.1 - requests>=2.5 + requests>=2.5,<2.32.0 xmltodict werkzeug>=0.5,!=2.2.0,!=2.2.1 python-dateutil<3.0.0,>=2.1 diff --git a/tests/test_acmpca/test_acmpca.py b/tests/test_acmpca/test_acmpca.py index e68345fc9994..bbcc4c071ac2 100644 --- a/tests/test_acmpca/test_acmpca.py +++ b/tests/test_acmpca/test_acmpca.py @@ -18,8 +18,11 @@ @mock_aws -def test_create_certificate_authority(): - client = boto3.client("acm-pca", region_name="eu-west-1") +@pytest.mark.parametrize( + "region,partition", [("eu-west-1", "aws"), ("us-gov-east-1", "aws-us-gov")] +) +def test_create_certificate_authority(region, partition): + client = boto3.client("acm-pca", region_name=region) resp = client.create_certificate_authority( CertificateAuthorityConfiguration={ "KeyAlgorithm": "RSA_4096", @@ -31,7 +34,7 @@ def test_create_certificate_authority(): ) assert ( - f"arn:aws:acm-pca:eu-west-1:{DEFAULT_ACCOUNT_ID}:certificate-authority/" + f"arn:{partition}:acm-pca:{region}:{DEFAULT_ACCOUNT_ID}:certificate-authority/" in resp["CertificateAuthorityArn"] ) @@ -276,8 +279,11 @@ def test_delete_certificate_authority(): @mock_aws -def test_issue_certificate(): - client = boto3.client("acm-pca", region_name="ap-southeast-1") +@pytest.mark.parametrize( + "region,partition", [("ap-southeast-1", "aws"), ("us-gov-east-1", "aws-us-gov")] +) +def test_issue_certificate(region, partition): + client = boto3.client("acm-pca", region_name=region) ca_arn = client.create_certificate_authority( CertificateAuthorityConfiguration={ "KeyAlgorithm": "RSA_4096", @@ -296,7 +302,9 @@ def test_issue_certificate(): Validity={"Type": "YEARS", "Value": 10}, ) - assert "CertificateArn" in resp + assert resp["CertificateArn"].startswith( + f"arn:{partition}:acm-pca:{region}:{DEFAULT_ACCOUNT_ID}:certificate-authority" + ) @mock_aws diff --git a/tests/test_appsync/test_appsync_schema.py b/tests/test_appsync/test_appsync_schema.py index 5ffc6e972b2a..b7e52f6e539a 100644 --- a/tests/test_appsync/test_appsync_schema.py +++ b/tests/test_appsync/test_appsync_schema.py @@ -95,8 +95,11 @@ def test_get_schema_creation_status_invalid(): @mock_aws -def test_get_type_from_schema(): - client = boto3.client("appsync", region_name="us-east-2") +@pytest.mark.parametrize( + "region,partition", [("us-east-2", "aws"), ("cn-north-1", "aws-cn")] +) +def test_get_type_from_schema(region, partition): + client = boto3.client("appsync", region_name=region) api_id = client.create_graphql_api(name="api1", authenticationType="API_KEY")[ "graphqlApi" @@ -109,7 +112,7 @@ def test_get_type_from_schema(): graphql_type = resp["type"] assert graphql_type["name"] == "Post" assert graphql_type["description"] == "My custom post type" - assert graphql_type["arn"] == "arn:aws:appsync:graphql_type/Post" + assert graphql_type["arn"] == f"arn:{partition}:appsync:graphql_type/Post" assert graphql_type["definition"] == "NotYetImplemented" assert graphql_type["format"] == "SDL" diff --git a/tests/test_awslambda/test_lambda.py b/tests/test_awslambda/test_lambda.py index 3bcffa387c0c..1490cc568551 100644 --- a/tests/test_awslambda/test_lambda.py +++ b/tests/test_awslambda/test_lambda.py @@ -45,6 +45,30 @@ def test_lambda_regions(region): resp = client.list_functions() assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + function_name = "moto_test_" + str(uuid4())[0:6] + function = client.create_function( + FunctionName=function_name, + Runtime=PYTHON_VERSION, + Role=get_role_name(region), + Handler="lambda_function.lambda_handler", + Code={"ZipFile": get_test_zip_file1()}, + ) + if region == "us-west-2": + assert ( + function["FunctionArn"] + == f"arn:aws:lambda:{region}:{ACCOUNT_ID}:function:{function_name}" + ) + if region == "cn-northwest-1": + assert ( + function["FunctionArn"] + == f"arn:aws-cn:lambda:{region}:{ACCOUNT_ID}:function:{function_name}" + ) + if region == "us-isob-east-1": + assert ( + function["FunctionArn"] + == f"arn:aws-iso-b:lambda:{region}:{ACCOUNT_ID}:function:{function_name}" + ) + @pytest.mark.aws_verified @lambda_aws_verified diff --git a/tests/test_awslambda/utilities.py b/tests/test_awslambda/utilities.py index 3369865f4c1a..fa9c65ce55ee 100644 --- a/tests/test_awslambda/utilities.py +++ b/tests/test_awslambda/utilities.py @@ -182,9 +182,9 @@ def create_invalid_lambda(role): return err -def get_role_name(): +def get_role_name(region=None): with mock_aws(): - iam = boto3.client("iam", region_name=_lambda_region) + iam = boto3.client("iam", region_name=region or _lambda_region) while True: try: return iam.get_role(RoleName="my-role")["Role"]["Arn"] diff --git a/tests/test_ce/test_ce.py b/tests/test_ce/test_ce.py index 8989b605a3d2..c1044fbf9e76 100644 --- a/tests/test_ce/test_ce.py +++ b/tests/test_ce/test_ce.py @@ -1,3 +1,5 @@ +from unittest import mock + import boto3 import pytest from botocore.exceptions import ClientError @@ -10,8 +12,13 @@ @mock_aws -def test_create_cost_category_definition(): - client = boto3.client("ce", region_name="ap-southeast-1") +@mock.patch.dict("os.environ", {"MOTO_ENABLE_ISO_REGIONS": "true"}) +@pytest.mark.parametrize( + "region,partition", + [("us-east-1", "aws"), ("cn-north-1", "aws-cn"), ("us-isob-east-1", "aws-iso-b")], +) +def test_create_cost_category_definition(region, partition): + client = boto3.client("ce", region_name=region) resp = client.create_cost_category_definition( Name="ccd", RuleVersion="CostCategoryExpression.v1", @@ -19,7 +26,9 @@ def test_create_cost_category_definition(): {"Value": "v", "Rule": {"CostCategories": {"Key": "k", "Values": ["v"]}}} ], ) - assert resp["CostCategoryArn"].startswith(f"arn:aws:ce::{ACCOUNT_ID}:costcategory/") + assert resp["CostCategoryArn"].startswith( + f"arn:{partition}:ce::{ACCOUNT_ID}:costcategory/" + ) assert "EffectiveStart" in resp diff --git a/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py b/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py index 46b22946c252..e5c8ff28e948 100644 --- a/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py +++ b/tests/test_cloudformation/test_cloudformation_stack_crud_boto3.py @@ -487,9 +487,17 @@ def test_stop_stack_set_operation(): @mock_aws -def test_describe_stack_set_operation(): - cf = boto3.client("cloudformation", region_name=REGION_NAME) - cf.create_stack_set(StackSetName="name", TemplateBody=dummy_template_json) +@pytest.mark.parametrize( + "region,partition", [(REGION_NAME, "aws"), ("cn-north-1", "aws-cn")] +) +@pytest.mark.parametrize("include_role", [True, False]) +def test_describe_stack_set_operation(region, partition, include_role): + cf = boto3.client("cloudformation", region_name=region) + kwargs = ( + {"AdministrationRoleARN": "arn:my_role_with_long_name"} if include_role else {} + ) + cf.create_stack_set(StackSetName="name", TemplateBody=dummy_template_json, **kwargs) + operation_id = cf.create_stack_instances( StackSetName="name", Accounts=[ACCOUNT_ID], @@ -497,12 +505,20 @@ def test_describe_stack_set_operation(): )["OperationId"] cf.stop_stack_set_operation(StackSetName="name", OperationId=operation_id) - response = cf.describe_stack_set_operation( + stack_set_op = cf.describe_stack_set_operation( StackSetName="name", OperationId=operation_id - ) + )["StackSetOperation"] + + if include_role: + assert stack_set_op["AdministrationRoleARN"] == "arn:my_role_with_long_name" + else: + assert ( + stack_set_op["AdministrationRoleARN"] + == f"arn:{partition}:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole" + ) + assert stack_set_op["Status"] == "STOPPED" + assert stack_set_op["Action"] == "CREATE" - assert response["StackSetOperation"]["Status"] == "STOPPED" - assert response["StackSetOperation"]["Action"] == "CREATE" with pytest.raises(ClientError) as exp: cf.describe_stack_set_operation( StackSetName="name", OperationId="non_existing_operation" @@ -851,6 +867,21 @@ def test_create_stack_set(): assert stack_set["Description"] == "desc" +@mock_aws +@pytest.mark.parametrize( + "region,partition", [(REGION_NAME, "aws"), ("cn-north-1", "aws-cn")] +) +def test_create_stack_set__without_admin_role(region, partition): + cf = boto3.client("cloudformation", region_name=region) + cf.create_stack_set(StackSetName="teststackset", TemplateBody=dummy_template_json) + + stack_set = cf.describe_stack_set(StackSetName="teststackset")["StackSet"] + assert ( + stack_set["AdministrationRoleARN"] + == f"arn:{partition}:iam::{ACCOUNT_ID}:role/AWSCloudFormationStackSetAdministrationRole" + ) + + @mock_aws @pytest.mark.parametrize("name", ["1234", "stack_set", "-set"]) def test_create_stack_set__invalid_name(name): diff --git a/tests/test_cloudfront/test_cloudfront_distributions.py b/tests/test_cloudfront/test_cloudfront_distributions.py index 2ac78bc200b9..1fa488207811 100644 --- a/tests/test_cloudfront/test_cloudfront_distributions.py +++ b/tests/test_cloudfront/test_cloudfront_distributions.py @@ -9,12 +9,18 @@ @mock_aws -def test_create_distribution_s3_minimum(): - client = boto3.client("cloudfront", region_name="us-west-1") +@pytest.mark.parametrize( + "region,partition", [("us-west-1", "aws"), ("cn-north-1", "aws-cn")] +) +def test_create_distribution_s3_minimum(region, partition): + client = boto3.client("cloudfront", region_name=region) config = scaffold.example_distribution_config("ref") dist = client.create_distribution(DistributionConfig=config)["Distribution"] - assert dist["ARN"] == f"arn:aws:cloudfront:{ACCOUNT_ID}:distribution/{dist['Id']}" + assert ( + dist["ARN"] + == f"arn:{partition}:cloudfront:{ACCOUNT_ID}:distribution/{dist['Id']}" + ) assert dist["Status"] == "InProgress" assert "LastModifiedTime" in dist assert dist["InProgressInvalidationBatches"] == 0 diff --git a/tests/test_cloudwatch/test_cloudwatch_alarms.py b/tests/test_cloudwatch/test_cloudwatch_alarms.py index f8fd9d01612f..aa5f9384203a 100644 --- a/tests/test_cloudwatch/test_cloudwatch_alarms.py +++ b/tests/test_cloudwatch/test_cloudwatch_alarms.py @@ -1,12 +1,15 @@ import boto3 +import pytest from moto import mock_aws from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID @mock_aws -def test_create_alarm(): - region = "eu-west-1" +@pytest.mark.parametrize( + "region,partition", [("eu-west-1", "aws"), ("cn-north-1", "aws-cn")] +) +def test_create_alarm(region, partition): cloudwatch = boto3.client("cloudwatch", region) name = "tester" @@ -44,7 +47,10 @@ def test_create_alarm(): assert alarm["OKActions"] == ["arn:ok"] assert alarm["InsufficientDataActions"] == ["arn:insufficient"] assert alarm["Unit"] == "Seconds" - assert alarm["AlarmArn"] == f"arn:aws:cloudwatch:{region}:{ACCOUNT_ID}:alarm:{name}" + assert ( + alarm["AlarmArn"] + == f"arn:{partition}:cloudwatch:{region}:{ACCOUNT_ID}:alarm:{name}" + ) # default value should be True assert alarm["ActionsEnabled"] is True diff --git a/tests/test_cloudwatch/test_cloudwatch_dashboards.py b/tests/test_cloudwatch/test_cloudwatch_dashboards.py index 80d3f79ca8f0..2933a38ab5bc 100644 --- a/tests/test_cloudwatch/test_cloudwatch_dashboards.py +++ b/tests/test_cloudwatch/test_cloudwatch_dashboards.py @@ -6,14 +6,21 @@ @mock_aws -def test_put_list_dashboard(): - client = boto3.client("cloudwatch", region_name="eu-central-1") +@pytest.mark.parametrize( + "region,partition", [("eu-central-1", "aws"), ("cn-north-1", "aws-cn")] +) +def test_put_list_dashboard(region, partition): + client = boto3.client("cloudwatch", region_name=region) widget = '{"widgets": [{"type": "text", "x": 0, "y": 7, "width": 3, "height": 3, "properties": {"markdown": "Hello world"}}]}' client.put_dashboard(DashboardName="test1", DashboardBody=widget) - resp = client.list_dashboards() + dashboards = client.list_dashboards()["DashboardEntries"] - assert len(resp["DashboardEntries"]) == 1 + assert len(dashboards) == 1 + assert ( + dashboards[0]["DashboardArn"] + == f"arn:{partition}:cloudwatch::123456789012:dashboard/test1" + ) @mock_aws diff --git a/tests/test_core/test_auth.py b/tests/test_core/test_auth.py index 9dedf9040a51..d4b61888c6ab 100644 --- a/tests/test_core/test_auth.py +++ b/tests/test_core/test_auth.py @@ -25,9 +25,12 @@ def create_user_with_access_key(user_name: str = "test-user") -> Dict[str, str]: @mock_aws def create_user_with_access_key_and_inline_policy( # type: ignore[misc] - user_name: str, policy_document: Dict[str, Any], policy_name: str = "policy1" + user_name: str, + policy_document: Dict[str, Any], + policy_name: str = "policy1", + region_name: str = "us-east-1", ) -> Dict[str, str]: - client = boto3.client("iam", region_name="us-east-1") + client = boto3.client("iam", region_name=region_name) client.create_user(UserName=user_name) client.put_user_policy( UserName=user_name, @@ -822,7 +825,10 @@ def test_s3_invalid_token_with_temporary_credentials() -> None: @set_initial_no_auth_action_count(3) @mock_aws -def test_allow_bucket_access_using_resource_arn() -> None: +@pytest.mark.parametrize( + "region,partition", [("us-west-2", "aws"), ("cn-north-1", "aws-cn")] +) +def test_allow_bucket_access_using_resource_arn(region: str, partition: str) -> None: user_name = "test-user" policy_doc = { "Version": "2012-10-17", @@ -830,21 +836,25 @@ def test_allow_bucket_access_using_resource_arn() -> None: { "Action": ["s3:*"], "Effect": "Allow", - "Resource": "arn:aws:s3:::my_bucket", + "Resource": f"arn:{partition}:s3:::my_bucket", "Sid": "BucketLevelGrants", }, ], } - access_key = create_user_with_access_key_and_inline_policy(user_name, policy_doc) + access_key = create_user_with_access_key_and_inline_policy( + user_name, policy_doc, region_name=region + ) s3_client = boto3.client( "s3", - region_name="us-east-1", + region_name=region, aws_access_key_id=access_key["AccessKeyId"], aws_secret_access_key=access_key["SecretAccessKey"], ) - s3_client.create_bucket(Bucket="my_bucket") + s3_client.create_bucket( + Bucket="my_bucket", CreateBucketConfiguration={"LocationConstraint": region} + ) with pytest.raises(ClientError): s3_client.create_bucket(Bucket="my_bucket2") diff --git a/tests/test_core/test_backenddict.py b/tests/test_core/test_backenddict.py index 1dffd15accca..6df660b61df9 100644 --- a/tests/test_core/test_backenddict.py +++ b/tests/test_core/test_backenddict.py @@ -10,6 +10,7 @@ from moto.core.base_backend import AccountSpecificBackend, BackendDict, BaseBackend from moto.ec2.models import EC2Backend from moto.elbv2.models import ELBv2Backend +from moto.utilities.utils import PARTITION_NAMES class ExampleBackend(BaseBackend): @@ -63,7 +64,7 @@ def test_backend_dict_can_ignore_boto3_regions() -> None: def test_backend_dict_can_specify_additional_regions() -> None: backend_dict = BackendDict( - ExampleBackend, "ec2", additional_regions=["region1", "global"] + ExampleBackend, "ec2", additional_regions=["region1", "global", "aws"] )["123456"] assert isinstance(backend_dict["us-east-1"], ExampleBackend) assert isinstance(backend_dict["region1"], ExampleBackend) @@ -176,3 +177,23 @@ def test_multiple_backends_cache_behaviour() -> None: as_1 = autoscaling[DEFAULT_ACCOUNT_ID]["us-east-1"] assert type(as_1) == AutoScalingBackend + + +def test_global_region_defaults_to_aws() -> None: + s3 = BackendDict(ExampleBackend, "s3", additional_regions=PARTITION_NAMES) + + # Internally we use 'aws' as the S3 region + s3_aws = s3[DEFAULT_ACCOUNT_ID]["aws"] + assert isinstance(s3_aws, ExampleBackend) + + # But users may still call this 'global' + # Ensure that we're getting the backend + s3_global = s3[DEFAULT_ACCOUNT_ID]["global"] + assert s3_global == s3_aws + + # Changes to S3AWS should show up in global + s3_aws.var = "test" # type: ignore[attr-defined] + assert s3_global.var == "test" # type: ignore[attr-defined] + + assert "aws" in s3[DEFAULT_ACCOUNT_ID] + assert "global" in s3[DEFAULT_ACCOUNT_ID] diff --git a/tests/test_ec2/test_elastic_network_interfaces.py b/tests/test_ec2/test_elastic_network_interfaces.py index 3e387189d21b..2bd53e3270f7 100644 --- a/tests/test_ec2/test_elastic_network_interfaces.py +++ b/tests/test_ec2/test_elastic_network_interfaces.py @@ -13,14 +13,10 @@ @mock_aws def test_elastic_network_interfaces(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) with pytest.raises(ClientError) as ex: - ec2.create_network_interface(SubnetId=subnet.id, DryRun=True) + ec2resource.create_network_interface(SubnetId=subnet.id, DryRun=True) assert ex.value.response["ResponseMetadata"]["HTTPStatusCode"] == 412 assert ex.value.response["Error"]["Code"] == "DryRunOperation" assert ( @@ -28,9 +24,9 @@ def test_elastic_network_interfaces(): == "An error occurred (DryRunOperation) when calling the CreateNetworkInterface operation: Request would have succeeded, but DryRun flag is set" ) - eni_id = ec2.create_network_interface(SubnetId=subnet.id).id + eni_id = ec2resource.create_network_interface(SubnetId=subnet.id).id - my_enis = client.describe_network_interfaces(NetworkInterfaceIds=[eni_id])[ + my_enis = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni_id])[ "NetworkInterfaces" ] assert len(my_enis) == 1 @@ -40,7 +36,7 @@ def test_elastic_network_interfaces(): assert eni["PrivateIpAddresses"][0]["PrivateIpAddress"].startswith("10.") is True with pytest.raises(ClientError) as ex: - client.delete_network_interface(NetworkInterfaceId=eni_id, DryRun=True) + ec2client.delete_network_interface(NetworkInterfaceId=eni_id, DryRun=True) assert ex.value.response["ResponseMetadata"]["HTTPStatusCode"] == 412 assert ex.value.response["Error"]["Code"] == "DryRunOperation" assert ( @@ -48,19 +44,19 @@ def test_elastic_network_interfaces(): == "An error occurred (DryRunOperation) when calling the DeleteNetworkInterface operation: Request would have succeeded, but DryRun flag is set" ) - client.delete_network_interface(NetworkInterfaceId=eni_id) + ec2client.delete_network_interface(NetworkInterfaceId=eni_id) - all_enis = client.describe_network_interfaces()["NetworkInterfaces"] + all_enis = ec2client.describe_network_interfaces()["NetworkInterfaces"] assert eni_id not in [eni["NetworkInterfaceId"] for eni in all_enis] with pytest.raises(ClientError) as ex: - client.describe_network_interfaces(NetworkInterfaceIds=[eni_id]) + ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni_id]) assert ex.value.response["ResponseMetadata"]["HTTPStatusCode"] == 400 assert "RequestId" in ex.value.response["ResponseMetadata"] assert ex.value.response["Error"]["Code"] == "InvalidNetworkInterfaceID.NotFound" with pytest.raises(ClientError) as ex: - client.delete_network_interface(NetworkInterfaceId=eni_id) + ec2client.delete_network_interface(NetworkInterfaceId=eni_id) assert ex.value.response["ResponseMetadata"]["HTTPStatusCode"] == 400 assert "RequestId" in ex.value.response["ResponseMetadata"] assert ex.value.response["Error"]["Code"] == "InvalidNetworkInterfaceID.NotFound" @@ -68,10 +64,10 @@ def test_elastic_network_interfaces(): @mock_aws def test_elastic_network_interfaces_subnet_validation(): - client = boto3.client("ec2", "us-east-1") + ec2client = boto3.client("ec2", "us-east-1") with pytest.raises(ClientError) as ex: - client.create_network_interface(SubnetId="subnet-abcd1234") + ec2client.create_network_interface(SubnetId="subnet-abcd1234") assert ex.value.response["ResponseMetadata"]["HTTPStatusCode"] == 400 assert "RequestId" in ex.value.response["ResponseMetadata"] assert ex.value.response["Error"]["Code"] == "InvalidSubnetID.NotFound" @@ -79,19 +75,17 @@ def test_elastic_network_interfaces_subnet_validation(): @mock_aws def test_elastic_network_interfaces_with_private_ip(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) private_ip = "54.0.0.1" - eni = ec2.create_network_interface(SubnetId=subnet.id, PrivateIpAddress=private_ip) + eni = ec2resource.create_network_interface( + SubnetId=subnet.id, PrivateIpAddress=private_ip + ) - all_enis = client.describe_network_interfaces()["NetworkInterfaces"] + all_enis = ec2client.describe_network_interfaces()["NetworkInterfaces"] assert eni.id in [eni["NetworkInterfaceId"] for eni in all_enis] - my_enis = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id])[ + my_enis = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id])[ "NetworkInterfaces" ] @@ -104,17 +98,17 @@ def test_elastic_network_interfaces_with_private_ip(): @mock_aws def test_elastic_network_interfaces_with_groups(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") - - sec_group1 = ec2.create_security_group(GroupName=str(uuid4()), Description="n/a") - sec_group2 = ec2.create_security_group(GroupName=str(uuid4()), Description="n/a") + sec_group1 = ec2resource.create_security_group( + GroupName=str(uuid4()), Description="n/a" + ) + sec_group2 = ec2resource.create_security_group( + GroupName=str(uuid4()), Description="n/a" + ) my_eni = subnet.create_network_interface(Groups=[sec_group1.id, sec_group2.id]) - all_enis = client.describe_network_interfaces()["NetworkInterfaces"] + all_enis = ec2client.describe_network_interfaces()["NetworkInterfaces"] assert my_eni.id in [eni["NetworkInterfaceId"] for eni in all_enis] my_eni_description = [ @@ -126,7 +120,7 @@ def test_elastic_network_interfaces_with_groups(): sec_group2.id, } - eni_groups_attribute = client.describe_network_interface_attribute( + eni_groups_attribute = ec2client.describe_network_interface_attribute( NetworkInterfaceId=my_eni.id, Attribute="groupSet" ).get("Groups") @@ -140,15 +134,11 @@ def test_elastic_network_interfaces_with_groups(): @mock_aws def test_elastic_network_interfaces_without_group(): # ENI should use the default SecurityGroup if not provided - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) my_eni = subnet.create_network_interface() - all_enis = client.describe_network_interfaces()["NetworkInterfaces"] + all_enis = ec2client.describe_network_interfaces()["NetworkInterfaces"] assert my_eni.id in [eni["NetworkInterfaceId"] for eni in all_enis] my_eni = [eni for eni in all_enis if eni["NetworkInterfaceId"] == my_eni.id][0] @@ -158,16 +148,16 @@ def test_elastic_network_interfaces_without_group(): @mock_aws def test_elastic_network_interfaces_modify_attribute(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") - sec_group1 = ec2.create_security_group(GroupName=str(uuid4()), Description="n/a") - sec_group2 = ec2.create_security_group(GroupName=str(uuid4()), Description="n/a") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) + sec_group1 = ec2resource.create_security_group( + GroupName=str(uuid4()), Description="n/a" + ) + sec_group2 = ec2resource.create_security_group( + GroupName=str(uuid4()), Description="n/a" + ) eni_id = subnet.create_network_interface(Groups=[sec_group1.id]).id - my_eni = client.describe_network_interfaces(NetworkInterfaceIds=[eni_id])[ + my_eni = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni_id])[ "NetworkInterfaces" ][0] @@ -175,7 +165,7 @@ def test_elastic_network_interfaces_modify_attribute(): assert my_eni["Groups"][0]["GroupId"] == sec_group1.id with pytest.raises(ClientError) as ex: - client.modify_network_interface_attribute( + ec2client.modify_network_interface_attribute( NetworkInterfaceId=eni_id, Groups=[sec_group2.id], DryRun=True ) assert ex.value.response["Error"]["Code"] == "DryRunOperation" @@ -185,11 +175,11 @@ def test_elastic_network_interfaces_modify_attribute(): == "An error occurred (DryRunOperation) when calling the ModifyNetworkInterfaceAttribute operation: Request would have succeeded, but DryRun flag is set" ) - client.modify_network_interface_attribute( + ec2client.modify_network_interface_attribute( NetworkInterfaceId=eni_id, Groups=[sec_group2.id] ) - my_eni = client.describe_network_interfaces(NetworkInterfaceIds=[eni_id])[ + my_eni = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni_id])[ "NetworkInterfaces" ][0] assert len(my_eni["Groups"]) == 1 @@ -198,40 +188,40 @@ def test_elastic_network_interfaces_modify_attribute(): @mock_aws def test_elastic_network_interfaces_filtering(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) - sec_group1 = ec2.create_security_group(GroupName=str(uuid4()), Description="n/a") - sec_group2 = ec2.create_security_group(GroupName=str(uuid4()), Description="n/a") + sec_group1 = ec2resource.create_security_group( + GroupName=str(uuid4()), Description="n/a" + ) + sec_group2 = ec2resource.create_security_group( + GroupName=str(uuid4()), Description="n/a" + ) eni1 = subnet.create_network_interface(Groups=[sec_group1.id, sec_group2.id]) eni2 = subnet.create_network_interface(Groups=[sec_group1.id]) eni3 = subnet.create_network_interface(Description=str(uuid4())) - all_enis = client.describe_network_interfaces()["NetworkInterfaces"] + all_enis = ec2client.describe_network_interfaces()["NetworkInterfaces"] assert eni1.id in [eni["NetworkInterfaceId"] for eni in all_enis] assert eni2.id in [eni["NetworkInterfaceId"] for eni in all_enis] assert eni3.id in [eni["NetworkInterfaceId"] for eni in all_enis] # Filter by NetworkInterfaceId - enis_by_id = client.describe_network_interfaces(NetworkInterfaceIds=[eni1.id])[ + enis_by_id = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni1.id])[ "NetworkInterfaces" ] assert len(enis_by_id) == 1 assert [eni["NetworkInterfaceId"] for eni in enis_by_id] == [eni1.id] # Filter by ENI ID - enis_by_id = client.describe_network_interfaces( + enis_by_id = ec2client.describe_network_interfaces( Filters=[{"Name": "network-interface-id", "Values": [eni1.id]}] )["NetworkInterfaces"] assert len(enis_by_id) == 1 assert [eni["NetworkInterfaceId"] for eni in enis_by_id] == [eni1.id] # Filter by Security Group - enis_by_group = client.describe_network_interfaces( + enis_by_group = ec2client.describe_network_interfaces( Filters=[{"Name": "group-id", "Values": [sec_group1.id]}] )["NetworkInterfaces"] assert len(enis_by_group) == 2 @@ -241,7 +231,7 @@ def test_elastic_network_interfaces_filtering(): } # Filter by ENI ID and Security Group - enis_by_group = client.describe_network_interfaces( + enis_by_group = ec2client.describe_network_interfaces( Filters=[ {"Name": "network-interface-id", "Values": [eni1.id]}, {"Name": "group-id", "Values": [sec_group1.id]}, @@ -251,7 +241,7 @@ def test_elastic_network_interfaces_filtering(): assert [eni["NetworkInterfaceId"] for eni in enis_by_group] == [eni1.id] # Filter by Description - enis_by_description = client.describe_network_interfaces( + enis_by_description = ec2client.describe_network_interfaces( Filters=[{"Name": "description", "Values": [eni3.description]}] )["NetworkInterfaces"] assert len(enis_by_description) == 1 @@ -262,20 +252,14 @@ def test_elastic_network_interfaces_filtering(): # ServerMode will just throw a generic 500 with pytest.raises(NotImplementedError): filters = [{"Name": "not-implemented-filter", "Values": ["foobar"]}] - client.describe_network_interfaces(Filters=filters) + ec2client.describe_network_interfaces(Filters=filters) @mock_aws def test_elastic_network_interfaces_get_by_tag_name(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) - eni1 = ec2.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet.id, PrivateIpAddress="10.0.10.5" ) @@ -292,261 +276,219 @@ def test_elastic_network_interfaces_get_by_tag_name(): eni1.create_tags(Tags=[{"Key": "Name", "Value": tag_value}]) # The status of the new interface should be 'available' - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni1.id]) filters = [{"Name": "tag:Name", "Values": [tag_value]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 1 filters = [{"Name": "tag:Name", "Values": ["wrong-name"]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 0 @mock_aws def test_elastic_network_interfaces_get_by_availability_zone(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") + ec2resource = boto3.resource("ec2", region_name="us-west-2") + ec2client = boto3.client("ec2", region_name="us-west-2") - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet1 = ec2.create_subnet( + vpc = ec2resource.create_vpc(CidrBlock="10.0.0.0/16") + subnet1 = ec2resource.create_subnet( VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" ) - subnet2 = ec2.create_subnet( + subnet2 = ec2resource.create_subnet( VpcId=vpc.id, CidrBlock="10.0.1.0/24", AvailabilityZone="us-west-2b" ) - eni1 = ec2.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet1.id, PrivateIpAddress="10.0.0.15" ) - eni2 = ec2.create_network_interface( + eni2 = ec2resource.create_network_interface( SubnetId=subnet2.id, PrivateIpAddress="10.0.1.15" ) # The status of the new interface should be 'available' - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni1.id, eni2.id]) filters = [{"Name": "availability-zone", "Values": ["us-west-2a"]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert eni1.id in [eni.id for eni in enis] assert eni2.id not in [eni.id for eni in enis] filters = [{"Name": "availability-zone", "Values": ["us-west-2c"]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert eni1.id not in [eni.id for eni in enis] assert eni2.id not in [eni.id for eni in enis] @mock_aws def test_elastic_network_interfaces_get_by_private_ip(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) random_ip = ".".join(map(str, (random.randint(0, 99) for _ in range(4)))) - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" + eni1 = ec2resource.create_network_interface( + SubnetId=subnet.id, PrivateIpAddress=random_ip ) - eni1 = ec2.create_network_interface(SubnetId=subnet.id, PrivateIpAddress=random_ip) - # The status of the new interface should be 'available' - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni1.id]) filters = [{"Name": "private-ip-address", "Values": [random_ip]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 1 filters = [{"Name": "private-ip-address", "Values": ["10.0.10.10"]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 0 filters = [{"Name": "addresses.private-ip-address", "Values": [random_ip]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 1 filters = [{"Name": "addresses.private-ip-address", "Values": ["10.0.10.10"]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 0 @mock_aws def test_elastic_network_interfaces_get_by_vpc_id(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) - - eni1 = ec2.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet.id, PrivateIpAddress="10.0.10.5" ) # The status of the new interface should be 'available' - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni1.id]) filters = [{"Name": "vpc-id", "Values": [subnet.vpc_id]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 1 filters = [{"Name": "vpc-id", "Values": ["vpc-aaaa1111"]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 0 @mock_aws def test_elastic_network_interfaces_get_by_subnet_id(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) - - eni1 = ec2.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet.id, PrivateIpAddress="10.0.10.5" ) # The status of the new interface should be 'available' - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni1.id]) filters = [{"Name": "subnet-id", "Values": [subnet.id]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 1 filters = [{"Name": "subnet-id", "Values": ["subnet-aaaa1111"]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 0 @mock_aws def test_elastic_network_interfaces_get_by_description(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) desc = str(uuid4()) - eni1 = ec2.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet.id, PrivateIpAddress="10.0.10.5", Description=desc ) # The status of the new interface should be 'available' - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni1.id]) filters = [{"Name": "description", "Values": [eni1.description]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 1 filters = [{"Name": "description", "Values": ["bad description"]}] - enis = list(ec2.network_interfaces.filter(Filters=filters)) + enis = list(ec2resource.network_interfaces.filter(Filters=filters)) assert len(enis) == 0 @mock_aws def test_elastic_network_interfaces_get_by_attachment_instance_id(): - ec2_resource = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") - - vpc = ec2_resource.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2_resource.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) - security_group1 = ec2_resource.create_security_group( + security_group1 = ec2resource.create_security_group( GroupName=str(uuid4()), Description="desc" ) - create_instances_result = ec2_resource.create_instances( + create_instances_result = ec2resource.create_instances( ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1 ) instance = create_instances_result[0] # we should have one ENI attached to our ec2 instance by default filters = [{"Name": "attachment.instance-id", "Values": [instance.id]}] - enis = ec2_client.describe_network_interfaces(Filters=filters) + enis = ec2client.describe_network_interfaces(Filters=filters) assert len(enis.get("NetworkInterfaces")) == 1 # attach another ENI to our existing instance, total should be 2 - eni1 = ec2_resource.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet.id, Groups=[security_group1.id] ) - ec2_client.attach_network_interface( + ec2client.attach_network_interface( NetworkInterfaceId=eni1.id, InstanceId=instance.id, DeviceIndex=1 ) filters = [{"Name": "attachment.instance-id", "Values": [instance.id]}] - enis = ec2_client.describe_network_interfaces(Filters=filters) + enis = ec2client.describe_network_interfaces(Filters=filters) assert len(enis.get("NetworkInterfaces")) == 2 # we shouldn't find any ENIs that are attached to this fake instance ID filters = [{"Name": "attachment.instance-id", "Values": ["this-doesnt-match-lol"]}] - enis = ec2_client.describe_network_interfaces(Filters=filters) + enis = ec2client.describe_network_interfaces(Filters=filters) assert len(enis.get("NetworkInterfaces")) == 0 @mock_aws def test_elastic_network_interfaces_get_by_attachment_instance_owner_id(): - ec2_resource = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) - vpc = ec2_resource.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2_resource.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) - - security_group1 = ec2_resource.create_security_group( + security_group1 = ec2resource.create_security_group( GroupName=str(uuid4()), Description="desc" ) - create_instances_result = ec2_resource.create_instances( + create_instances_result = ec2resource.create_instances( ImageId=EXAMPLE_AMI_ID, MinCount=1, MaxCount=1 ) instance = create_instances_result[0] - eni1 = ec2_resource.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet.id, Groups=[security_group1.id] ) - ec2_client.attach_network_interface( + ec2client.attach_network_interface( NetworkInterfaceId=eni1.id, InstanceId=instance.id, DeviceIndex=1 ) filters = [{"Name": "attachment.instance-owner-id", "Values": [ACCOUNT_ID]}] - enis = ec2_client.describe_network_interfaces(Filters=filters)["NetworkInterfaces"] + enis = ec2client.describe_network_interfaces(Filters=filters)["NetworkInterfaces"] eni_ids = [eni["NetworkInterfaceId"] for eni in enis] assert eni1.id in eni_ids @mock_aws def test_elastic_network_interfaces_describe_network_interfaces_with_filter(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") - + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) random_ip = ".".join(map(str, (random.randint(0, 99) for _ in range(4)))) - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) - - sg = ec2_client.create_security_group(Description="test", GroupName=str(uuid4())) + sg = ec2client.create_security_group(Description="test", GroupName=str(uuid4())) sg_id = sg["GroupId"] - eni1 = ec2.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet.id, PrivateIpAddress=random_ip, Description=str(uuid4()), @@ -554,11 +496,11 @@ def test_elastic_network_interfaces_describe_network_interfaces_with_filter(): ) # The status of the new interface should be 'available' - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni1.id]) # Filter by network-interface-id - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "network-interface-id", "Values": [eni1.id]}] ) assert len(response["NetworkInterfaces"]) == 1 @@ -568,19 +510,19 @@ def test_elastic_network_interfaces_describe_network_interfaces_with_filter(): assert interface["Description"] == eni1.description # Filter by network-interface-id - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "group-id", "Values": [sg_id]}] ) assert len(response["NetworkInterfaces"]) == 1 assert response["NetworkInterfaces"][0]["NetworkInterfaceId"] == eni1.id - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "network-interface-id", "Values": ["bad-id"]}] ) assert len(response["NetworkInterfaces"]) == 0 # Filter by private-ip-address - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "private-ip-address", "Values": [eni1.private_ip_address]}] ) assert len(response["NetworkInterfaces"]) == 1 @@ -589,13 +531,13 @@ def test_elastic_network_interfaces_describe_network_interfaces_with_filter(): assert interface["PrivateIpAddress"] == eni1.private_ip_address assert interface["Description"] == eni1.description - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "private-ip-address", "Values": ["11.11.11.11"]}] ) assert len(response["NetworkInterfaces"]) == 0 # Filter by sunet-id - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "subnet-id", "Values": [eni1.subnet.id]}] ) assert len(response["NetworkInterfaces"]) == 1 @@ -605,13 +547,13 @@ def test_elastic_network_interfaces_describe_network_interfaces_with_filter(): ) assert response["NetworkInterfaces"][0]["Description"] == eni1.description - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "subnet-id", "Values": ["sn-bad-id"]}] ) assert len(response["NetworkInterfaces"]) == 0 # Filter by description - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "description", "Values": [eni1.description]}] ) assert len(response["NetworkInterfaces"]) == 1 @@ -621,13 +563,13 @@ def test_elastic_network_interfaces_describe_network_interfaces_with_filter(): ) assert response["NetworkInterfaces"][0]["Description"] == eni1.description - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[{"Name": "description", "Values": ["bad description"]}] ) assert len(response["NetworkInterfaces"]) == 0 # Filter by multiple filters - response = ec2_client.describe_network_interfaces( + response = ec2client.describe_network_interfaces( Filters=[ {"Name": "private-ip-address", "Values": [eni1.private_ip_address]}, {"Name": "network-interface-id", "Values": [eni1.id]}, @@ -644,18 +586,12 @@ def test_elastic_network_interfaces_describe_network_interfaces_with_filter(): @mock_aws def test_elastic_network_interfaces_filter_by_tag(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) dev_env = f"dev-{str(uuid4())[0:4]}" prod_env = f"prod-{str(uuid4())[0:4]}" - eni_dev = ec2.create_network_interface( + eni_dev = ec2resource.create_network_interface( SubnetId=subnet.id, PrivateIpAddress="10.0.10.5", Description="dev interface", @@ -667,7 +603,7 @@ def test_elastic_network_interfaces_filter_by_tag(): ], ) - eni_prod = ec2.create_network_interface( + eni_prod = ec2resource.create_network_interface( SubnetId=subnet.id, PrivateIpAddress="10.0.10.6", Description="prod interface", @@ -680,27 +616,27 @@ def test_elastic_network_interfaces_filter_by_tag(): ) for eni in [eni_dev, eni_prod]: - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni.id]) - resp = ec2_client.describe_network_interfaces( + resp = ec2client.describe_network_interfaces( Filters=[{"Name": "tag:environment", "Values": ["staging"]}] ) assert len(resp["NetworkInterfaces"]) == 0 - resp = ec2_client.describe_network_interfaces( + resp = ec2client.describe_network_interfaces( Filters=[{"Name": "tag:environment", "Values": [dev_env]}] ) assert len(resp["NetworkInterfaces"]) == 1 assert resp["NetworkInterfaces"][0]["Description"] == "dev interface" - resp = ec2_client.describe_network_interfaces( + resp = ec2client.describe_network_interfaces( Filters=[{"Name": "tag:environment", "Values": [prod_env]}] ) assert len(resp["NetworkInterfaces"]) == 1 assert resp["NetworkInterfaces"][0]["Description"] == "prod interface" - resp = ec2_client.describe_network_interfaces( + resp = ec2client.describe_network_interfaces( Filters=[{"Name": "tag:environment", "Values": [dev_env, prod_env]}] ) assert len(resp["NetworkInterfaces"]) == 2 @@ -708,23 +644,17 @@ def test_elastic_network_interfaces_filter_by_tag(): @mock_aws def test_elastic_network_interfaces_auto_create_securitygroup(): - ec2 = boto3.resource("ec2", region_name="us-west-2") - ec2_client = boto3.client("ec2", region_name="us-west-2") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/24", AvailabilityZone="us-west-2a" - ) - - eni1 = ec2.create_network_interface( + eni1 = ec2resource.create_network_interface( SubnetId=subnet.id, PrivateIpAddress="10.0.10.5", Groups=["testgroup"] ) # The status of the new interface should be 'available' - waiter = ec2_client.get_waiter("network_interface_available") + waiter = ec2client.get_waiter("network_interface_available") waiter.wait(NetworkInterfaceIds=[eni1.id]) - sgs = ec2_client.describe_security_groups()["SecurityGroups"] + sgs = ec2client.describe_security_groups()["SecurityGroups"] found_sg = [sg for sg in sgs if sg["GroupId"] == "testgroup"] assert len(found_sg) == 1 @@ -734,17 +664,15 @@ def test_elastic_network_interfaces_auto_create_securitygroup(): @mock_aws def test_assign_private_ip_addresses__by_address(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) primary_ip = "54.0.0.1" secondary_ip = "80.0.0.1" - eni = ec2.create_network_interface(SubnetId=subnet.id, PrivateIpAddress=primary_ip) + eni = ec2resource.create_network_interface( + SubnetId=subnet.id, PrivateIpAddress=primary_ip + ) - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) resp_eni = resp["NetworkInterfaces"][0] assert resp_eni["PrivateIpAddress"] == primary_ip assert resp_eni["PrivateIpAddresses"] == [ @@ -752,12 +680,12 @@ def test_assign_private_ip_addresses__by_address(): ] # Pass IP address to assign rather than SecondaryPrivateIpAddressCount. - client.assign_private_ip_addresses( + ec2client.assign_private_ip_addresses( NetworkInterfaceId=eni.id, PrivateIpAddresses=[secondary_ip] ) # Verify secondary IP address is now present. - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) resp_eni = resp["NetworkInterfaces"][0] assert resp_eni["PrivateIpAddress"] == primary_ip assert resp_eni["PrivateIpAddresses"] == [ @@ -769,7 +697,7 @@ def test_assign_private_ip_addresses__by_address(): eni.assign_private_ip_addresses(PrivateIpAddresses=[secondary_ip]) # Verify nothing changes. - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) resp_eni = resp["NetworkInterfaces"][0] assert resp_eni["PrivateIpAddress"] == primary_ip assert resp_eni["PrivateIpAddresses"] == [ @@ -780,21 +708,19 @@ def test_assign_private_ip_addresses__by_address(): @mock_aws def test_assign_private_ip_addresses__with_secondary_count(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) private_ip = "54.0.0.1" - eni = ec2.create_network_interface(SubnetId=subnet.id, PrivateIpAddress=private_ip) + eni = ec2resource.create_network_interface( + SubnetId=subnet.id, PrivateIpAddress=private_ip + ) - client.assign_private_ip_addresses( + ec2client.assign_private_ip_addresses( NetworkInterfaceId=eni.id, SecondaryPrivateIpAddressCount=2 ) # Verify second ip's are added - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] assert my_eni["PrivateIpAddress"] == "54.0.0.1" @@ -809,29 +735,27 @@ def test_assign_private_ip_addresses__with_secondary_count(): @mock_aws def test_unassign_private_ip_addresses(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) private_ip = "54.0.0.1" - eni = ec2.create_network_interface(SubnetId=subnet.id, PrivateIpAddress=private_ip) + eni = ec2resource.create_network_interface( + SubnetId=subnet.id, PrivateIpAddress=private_ip + ) - client.assign_private_ip_addresses( + ec2client.assign_private_ip_addresses( NetworkInterfaceId=eni.id, SecondaryPrivateIpAddressCount=2 ) - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] ips_before = [addr["PrivateIpAddress"] for addr in my_eni["PrivateIpAddresses"]] # Remove IP - client.unassign_private_ip_addresses( + ec2client.unassign_private_ip_addresses( NetworkInterfaceId=eni.id, PrivateIpAddresses=[ips_before[1]] ) # Verify it's gone - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] assert len(my_eni["PrivateIpAddresses"]) == 2 assert {"Primary": True, "PrivateIpAddress": "54.0.0.1"} in my_eni[ @@ -844,29 +768,27 @@ def test_unassign_private_ip_addresses(): @mock_aws def test_unassign_private_ip_addresses__multiple(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) private_ip = "54.0.0.1" - eni = ec2.create_network_interface(SubnetId=subnet.id, PrivateIpAddress=private_ip) + eni = ec2resource.create_network_interface( + SubnetId=subnet.id, PrivateIpAddress=private_ip + ) - client.assign_private_ip_addresses( + ec2client.assign_private_ip_addresses( NetworkInterfaceId=eni.id, SecondaryPrivateIpAddressCount=5 ) - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] ips_before = [addr["PrivateIpAddress"] for addr in my_eni["PrivateIpAddresses"]] # Remove IP - client.unassign_private_ip_addresses( + ec2client.unassign_private_ip_addresses( NetworkInterfaceId=eni.id, PrivateIpAddresses=[ips_before[1], ips_before[2]] ) # Verify it's gone - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] assert len(my_eni["PrivateIpAddresses"]) == 4 assert {"Primary": True, "PrivateIpAddress": "54.0.0.1"} in my_eni[ @@ -885,27 +807,23 @@ def test_unassign_private_ip_addresses__multiple(): @mock_aws def test_assign_ipv6_addresses__by_address(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) ipv6_orig = random_private_ip("2001:db8::/101", ipv6=True) ipv6_2 = random_private_ip("2001:db8::/101", ipv6=True) ipv6_3 = random_private_ip("2001:db8::/101", ipv6=True) - eni = ec2.create_network_interface( + eni = ec2resource.create_network_interface( SubnetId=subnet.id, Ipv6Addresses=[{"Ipv6Address": ipv6_orig}] ) - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] assert my_eni["Ipv6Addresses"] == [{"Ipv6Address": ipv6_orig}] - client.assign_ipv6_addresses( + ec2client.assign_ipv6_addresses( NetworkInterfaceId=eni.id, Ipv6Addresses=[ipv6_2, ipv6_3] ) - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] assert len(my_eni["Ipv6Addresses"]) == 3 assert {"Ipv6Address": ipv6_orig} in my_eni["Ipv6Addresses"] @@ -915,22 +833,16 @@ def test_assign_ipv6_addresses__by_address(): @mock_aws def test_assign_ipv6_addresses__by_count(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/18", Ipv6CidrBlock="2001:db8::/64" - ) + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) ipv6_orig = random_private_ip("2001:db8::/101", ipv6=True) - eni = ec2.create_network_interface( + eni = ec2resource.create_network_interface( SubnetId=subnet.id, Ipv6Addresses=[{"Ipv6Address": ipv6_orig}] ) - client.assign_ipv6_addresses(NetworkInterfaceId=eni.id, Ipv6AddressCount=3) + ec2client.assign_ipv6_addresses(NetworkInterfaceId=eni.id, Ipv6AddressCount=3) - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] assert len(my_eni["Ipv6Addresses"]) == 4 assert {"Ipv6Address": ipv6_orig} in my_eni["Ipv6Addresses"] @@ -938,27 +850,21 @@ def test_assign_ipv6_addresses__by_count(): @mock_aws def test_assign_ipv6_addresses__by_address_and_count(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/18", Ipv6CidrBlock="2001:db8::/64" - ) + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) ipv6_orig = random_private_ip("2001:db8::/101", ipv6=True) ipv6_2 = random_private_ip("2001:db8::/101", ipv6=True) ipv6_3 = random_private_ip("2001:db8::/101", ipv6=True) - eni = ec2.create_network_interface( + eni = ec2resource.create_network_interface( SubnetId=subnet.id, Ipv6Addresses=[{"Ipv6Address": ipv6_orig}] ) - client.assign_ipv6_addresses( + ec2client.assign_ipv6_addresses( NetworkInterfaceId=eni.id, Ipv6Addresses=[ipv6_2, ipv6_3] ) - client.assign_ipv6_addresses(NetworkInterfaceId=eni.id, Ipv6AddressCount=2) + ec2client.assign_ipv6_addresses(NetworkInterfaceId=eni.id, Ipv6AddressCount=2) - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] assert len(my_eni["Ipv6Addresses"]) == 5 assert {"Ipv6Address": ipv6_orig} in my_eni["Ipv6Addresses"] @@ -968,28 +874,22 @@ def test_assign_ipv6_addresses__by_address_and_count(): @mock_aws def test_unassign_ipv6_addresses(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet( - VpcId=vpc.id, CidrBlock="10.0.0.0/18", Ipv6CidrBlock="2001:db8::/64" - ) + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) ipv6_orig = random_private_ip("2001:db8::/101", ipv6=True) ipv6_2 = random_private_ip("2001:db8::/101", ipv6=True) ipv6_3 = random_private_ip("2001:db8::/101", ipv6=True) - eni = ec2.create_network_interface( + eni = ec2resource.create_network_interface( SubnetId=subnet.id, Ipv6Addresses=[{"Ipv6Address": ipv6_orig}] ) - client.assign_ipv6_addresses( + ec2client.assign_ipv6_addresses( NetworkInterfaceId=eni.id, Ipv6Addresses=[ipv6_2, ipv6_3] ) - client.unassign_ipv6_addresses(NetworkInterfaceId=eni.id, Ipv6Addresses=[ipv6_2]) + ec2client.unassign_ipv6_addresses(NetworkInterfaceId=eni.id, Ipv6Addresses=[ipv6_2]) - resp = client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) + resp = ec2client.describe_network_interfaces(NetworkInterfaceIds=[eni.id]) my_eni = resp["NetworkInterfaces"][0] assert len(my_eni["Ipv6Addresses"]) == 2 assert {"Ipv6Address": ipv6_orig} in my_eni["Ipv6Addresses"] @@ -998,28 +898,24 @@ def test_unassign_ipv6_addresses(): @mock_aws def test_elastic_network_interfaces_describe_attachment(): - ec2 = boto3.resource("ec2", region_name="us-east-1") - client = boto3.client("ec2", "us-east-1") - - vpc = ec2.create_vpc(CidrBlock="10.0.0.0/16") - subnet = ec2.create_subnet(VpcId=vpc.id, CidrBlock="10.0.0.0/18") + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) eni_id = subnet.create_network_interface(Description="A network interface").id - instance_id = client.run_instances(ImageId="ami-12c6146b", MinCount=1, MaxCount=1)[ - "Instances" - ][0]["InstanceId"] + instance_id = ec2client.run_instances( + ImageId="ami-12c6146b", MinCount=1, MaxCount=1 + )["Instances"][0]["InstanceId"] - client.attach_network_interface( + ec2client.attach_network_interface( NetworkInterfaceId=eni_id, InstanceId=instance_id, DeviceIndex=1 ) - my_eni_attachment = client.describe_network_interface_attribute( + my_eni_attachment = ec2client.describe_network_interface_attribute( NetworkInterfaceId=eni_id, Attribute="attachment" ).get("Attachment") assert my_eni_attachment["InstanceId"] == instance_id assert my_eni_attachment["DeleteOnTermination"] is False with pytest.raises(ClientError) as ex: - client.describe_network_interface_attribute( + ec2client.describe_network_interface_attribute( NetworkInterfaceId=eni_id, Attribute="attach" ) assert ex.value.response["Error"]["Code"] == "InvalidParameterValue" @@ -1030,7 +926,7 @@ def test_elastic_network_interfaces_describe_attachment(): ) with pytest.raises(ClientError) as ex: - client.describe_network_interface_attribute( + ec2client.describe_network_interface_attribute( NetworkInterfaceId=eni_id, Attribute="attachment", DryRun=True ) assert ex.value.response["Error"]["Code"] == "DryRunOperation" @@ -1040,12 +936,45 @@ def test_elastic_network_interfaces_describe_attachment(): == "An error occurred (DryRunOperation) when calling the DescribeNetworkInterfaceAttribute operation: Request would have succeeded, but DryRun flag is set" ) - my_eni_description = client.describe_network_interface_attribute( + my_eni_description = ec2client.describe_network_interface_attribute( NetworkInterfaceId=eni_id, Attribute="description" ).get("Description") assert my_eni_description["Value"] == "A network interface" - my_eni_source_dest_check = client.describe_network_interface_attribute( + my_eni_source_dest_check = ec2client.describe_network_interface_attribute( NetworkInterfaceId=eni_id, Attribute="sourceDestCheck" ).get("SourceDestCheck") assert my_eni_source_dest_check["Value"] is True + + +@mock_aws +def test_eni_detachment(): + # Setup + ec2resource, ec2client, vpc, subnet = setup_vpc(boto3) + resp = ec2client.run_instances(ImageId="ami-12c6146b", MinCount=1, MaxCount=1)[ + "Instances" + ][0] + + # Execute + eni_id = resp["NetworkInterfaces"][0]["Attachment"]["AttachmentId"] + with pytest.raises(ClientError) as ex: + ec2client.detach_network_interface(AttachmentId=eni_id) + + # Verify + assert ex.value.response["Error"]["Code"] == "OperationNotPermitted" + assert ex.value.response["ResponseMetadata"]["HTTPStatusCode"] == 400 + assert ( + ex.value.response["Error"]["Message"] + == "The network interface at device index 0 and networkCard index 0 cannot be detached." + ) + + +def setup_vpc(boto3): # pylint: disable=W0621 + ec2resource = boto3.resource("ec2", region_name="us-east-1") + ec2client = boto3.client("ec2", "us-east-1") + + vpc = ec2resource.create_vpc(CidrBlock="10.0.0.0/16") + subnet = ec2resource.create_subnet( + VpcId=vpc.id, CidrBlock="10.0.0.0/18", Ipv6CidrBlock="2001:db8::/64" + ) + return ec2resource, ec2client, vpc, subnet diff --git a/tests/test_iam/test_iam.py b/tests/test_iam/test_iam.py index 1fbd4ad5c4ea..9b00a7dbe940 100644 --- a/tests/test_iam/test_iam.py +++ b/tests/test_iam/test_iam.py @@ -706,11 +706,14 @@ def test_get_policy(): @mock_aws(config={"iam": {"load_aws_managed_policies": True}}) -def test_get_aws_managed_policy(): +@pytest.mark.parametrize( + "region,partition", [("us-west-2", "aws"), ("cn-north-1", "aws-cn")] +) +def test_get_aws_managed_policy(region, partition): if settings.TEST_SERVER_MODE: raise SkipTest("Policies not loaded in ServerMode") - conn = boto3.client("iam", region_name="us-east-1") - managed_policy_arn = "arn:aws:iam::aws:policy/IAMUserChangePassword" + conn = boto3.client("iam", region_name=region) + managed_policy_arn = f"arn:{partition}:iam::aws:policy/IAMUserChangePassword" managed_policy_create_date = datetime.strptime( "2016-11-15T00:25:16+00:00", "%Y-%m-%dT%H:%M:%S+00:00" ) @@ -3158,9 +3161,12 @@ def test_create_role_no_path(): @mock_aws() -def test_create_role_with_permissions_boundary(): - conn = boto3.client("iam", region_name="us-east-1") - boundary = f"arn:aws:iam::{ACCOUNT_ID}:policy/boundary" +@pytest.mark.parametrize( + "region,partition", [("us-west-2", "aws"), ("cn-north-1", "aws-cn")] +) +def test_create_role_with_permissions_boundary(region, partition): + conn = boto3.client("iam", region_name=region) + boundary = f"arn:{partition}:iam::{ACCOUNT_ID}:policy/boundary" resp = conn.create_role( RoleName="my-role", AssumeRolePolicyDocument="some policy", @@ -3182,10 +3188,15 @@ def test_create_role_with_permissions_boundary(): invalid_boundary_arn = "arn:aws:iam::123456789:not_a_boundary" - with pytest.raises(ClientError): + with pytest.raises(ClientError) as exc: conn.put_role_permissions_boundary( RoleName="my-role", PermissionsBoundary=invalid_boundary_arn ) + err = exc.value.response["Error"] + assert ( + err["Message"] + == "Value (arn:aws:iam::123456789:not_a_boundary) for parameter PermissionsBoundary is invalid." + ) with pytest.raises(ClientError): conn.create_role( @@ -3515,7 +3526,7 @@ def test_role_list_config_discovered_resources(): # Without any roles assert role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None ) == ( [], None, @@ -3541,7 +3552,7 @@ def test_role_list_config_discovered_resources(): assert len(roles) == num_roles result = role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0] assert len(result) == num_roles @@ -3554,13 +3565,13 @@ def test_role_list_config_discovered_resources(): # test passing list of resource ids resource_ids = role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, [roles[0]["id"], roles[1]["id"]], None, 100, None + DEFAULT_ACCOUNT_ID, "aws", [roles[0]["id"], roles[1]["id"]], None, 100, None )[0] assert len(resource_ids) == 2 # test passing a single resource name resource_name = role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, roles[0]["name"], 100, None + DEFAULT_ACCOUNT_ID, "aws", None, roles[0]["name"], 100, None )[0] assert len(resource_name) == 1 assert resource_name[0]["id"] == roles[0]["id"] @@ -3569,6 +3580,7 @@ def test_role_list_config_discovered_resources(): # test passing a single resource name AND some resource id's both_filter_good = role_config_query.list_config_service_resources( DEFAULT_ACCOUNT_ID, + "aws", [roles[0]["id"], roles[1]["id"]], roles[0]["name"], 100, @@ -3580,6 +3592,7 @@ def test_role_list_config_discovered_resources(): both_filter_bad = role_config_query.list_config_service_resources( DEFAULT_ACCOUNT_ID, + "aws", [roles[0]["id"], roles[1]["id"]], roles[2]["name"], 100, @@ -3596,9 +3609,11 @@ def test_role_config_dict(): from moto.iam.utils import random_policy_id, random_role_id # Without any roles - assert not role_config_query.get_config_resource(DEFAULT_ACCOUNT_ID, "something") + assert not role_config_query.get_config_resource( + DEFAULT_ACCOUNT_ID, partition="aws", resource_id="something" + ) assert role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None ) == ( [], None, @@ -3630,7 +3645,7 @@ def test_role_config_dict(): ) policy_id = policy_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0][0]["id"] assert len(policy_id) == len(random_policy_id()) @@ -3646,7 +3661,7 @@ def test_role_config_dict(): ) plain_role = role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0][0] assert plain_role is not None assert len(plain_role["id"]) == len(random_role_id(DEFAULT_ACCOUNT_ID)) @@ -3664,7 +3679,7 @@ def test_role_config_dict(): assume_role = next( role for role in role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0] if role["id"] not in [plain_role["id"]] ) @@ -3685,7 +3700,7 @@ def test_role_config_dict(): assume_and_permission_boundary_role = next( role for role in role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0] if role["id"] not in [plain_role["id"], assume_role["id"]] ) @@ -3711,7 +3726,7 @@ def test_role_config_dict(): role_with_attached_policy = next( role for role in role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0] if role["id"] not in [ @@ -3746,7 +3761,7 @@ def test_role_config_dict(): role_with_inline_policy = next( role for role in role_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0] if role["id"] not in [ @@ -4116,7 +4131,7 @@ def test_policy_list_config_discovered_resources(): # Without any policies assert policy_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None ) == ( [], None, @@ -4155,7 +4170,7 @@ def test_policy_list_config_discovered_resources(): assert backend_key.startswith("arn:aws:iam::") result = policy_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0] assert len(result) == num_policies @@ -4167,13 +4182,18 @@ def test_policy_list_config_discovered_resources(): # test passing list of resource ids resource_ids = policy_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, [policies[0]["id"], policies[1]["id"]], None, 100, None + DEFAULT_ACCOUNT_ID, + "aws", + [policies[0]["id"], policies[1]["id"]], + None, + 100, + None, )[0] assert len(resource_ids) == 2 # test passing a single resource name resource_name = policy_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, policies[0]["name"], 100, None + DEFAULT_ACCOUNT_ID, "aws", None, policies[0]["name"], 100, None )[0] assert len(resource_name) == 1 assert resource_name[0]["id"] == policies[0]["id"] @@ -4182,6 +4202,7 @@ def test_policy_list_config_discovered_resources(): # test passing a single resource name AND some resource id's both_filter_good = policy_config_query.list_config_service_resources( DEFAULT_ACCOUNT_ID, + "aws", [policies[0]["id"], policies[1]["id"]], policies[0]["name"], 100, @@ -4193,6 +4214,7 @@ def test_policy_list_config_discovered_resources(): both_filter_bad = policy_config_query.list_config_service_resources( DEFAULT_ACCOUNT_ID, + "aws", [policies[0]["id"], policies[1]["id"]], policies[2]["name"], 100, @@ -4210,10 +4232,10 @@ def test_policy_config_dict(): # Without any roles assert not policy_config_query.get_config_resource( - DEFAULT_ACCOUNT_ID, "arn:aws:iam::123456789012:policy/basic_policy" + DEFAULT_ACCOUNT_ID, "aws", "arn:aws:iam::123456789012:policy/basic_policy" ) assert policy_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None ) == ( [], None, @@ -4244,13 +4266,13 @@ def test_policy_config_dict(): ) policy_id = policy_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None )[0][0]["id"] assert len(policy_id) == len(random_policy_id()) assert policy_arn == "arn:aws:iam::123456789012:policy/basic_policy" assert ( - policy_config_query.get_config_resource(DEFAULT_ACCOUNT_ID, policy_id) + policy_config_query.get_config_resource(DEFAULT_ACCOUNT_ID, "aws", policy_id) is not None ) diff --git a/tests/test_kms/test_kms_policy_enforcement.py b/tests/test_kms/test_kms_policy_enforcement.py index 9f77f11bf4da..908dfcd5caa0 100644 --- a/tests/test_kms/test_kms_policy_enforcement.py +++ b/tests/test_kms/test_kms_policy_enforcement.py @@ -122,7 +122,7 @@ def create_key(self, policy): with mock.patch.object(rsa, "generate_private_key", return_value=""): return Key( account_id=None, - region=None, + region="us-east-1", description=None, key_spec=None, key_usage=None, diff --git a/tests/test_networkmanager/test_networkmanager.py b/tests/test_networkmanager/test_networkmanager.py index d16904129ff3..8a42273a0b86 100644 --- a/tests/test_networkmanager/test_networkmanager.py +++ b/tests/test_networkmanager/test_networkmanager.py @@ -8,6 +8,15 @@ # http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html +def create_global_network(client) -> str: + return client.create_global_network( + Description="Test global network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + )["GlobalNetwork"]["GlobalNetworkId"] + + @mock_aws def test_create_global_network(): client = boto3.client("networkmanager") @@ -22,3 +31,154 @@ def test_create_global_network(): assert global_network["Description"] == "Test global network" assert global_network["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}] assert global_network["State"] == "PENDING" + + +@mock_aws +def test_create_core_network(): + client = boto3.client("networkmanager") + # Create a global network + global_network_id = client.create_global_network( + Description="Test global network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + )["GlobalNetwork"]["GlobalNetworkId"] + + resp = client.create_core_network( + GlobalNetworkId=global_network_id, + Description="Test core network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + PolicyDocument="policy-document", + ClientToken="client-token", + ) + + core_network = resp["CoreNetwork"] + assert core_network["GlobalNetworkId"] == global_network_id + assert core_network["Description"] == "Test core network" + assert len(core_network["Tags"]) == 1 + + +@mock_aws +def test_delete_core_network(): + client = boto3.client("networkmanager") + gn_id = create_global_network(client) + core_network = client.create_core_network(GlobalNetworkId=gn_id) + cn_id = core_network["CoreNetwork"]["CoreNetworkId"] + assert len(client.list_core_networks()["CoreNetworks"]) == 1 + resp = client.delete_core_network(CoreNetworkId=cn_id) + assert resp["CoreNetwork"]["CoreNetworkId"] == cn_id + assert resp["CoreNetwork"]["State"] == "DELETING" + assert len(client.list_core_networks()["CoreNetworks"]) == 0 + + +@mock_aws +def test_tag_resource(): + client = boto3.client("networkmanager") + gn_id = create_global_network(client) + cn = client.create_core_network(GlobalNetworkId=gn_id)["CoreNetwork"] + + # Check tagging core-network + resp = client.tag_resource( + ResourceArn=cn["CoreNetworkArn"], + Tags=[{"Key": "Test", "Value": "TestValue-Core"}], + ) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_cn = client.get_core_network(CoreNetworkId=cn["CoreNetworkId"])[ + "CoreNetwork" + ] + assert updated_cn["Tags"] == [{"Key": "Test", "Value": "TestValue-Core"}] + + # Check tagging global-network + gn_arn = client.describe_global_networks()["GlobalNetworks"][0]["GlobalNetworkArn"] + resp = client.tag_resource( + ResourceArn=gn_arn, Tags=[{"Key": "Test", "Value": "TestValue-Global"}] + ) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_gn = client.describe_global_networks(GlobalNetworkIds=[gn_id])[ + "GlobalNetworks" + ][0] + assert len(updated_gn["Tags"]) == 2 + assert updated_gn["Tags"] == [ + {"Key": "Name", "Value": "TestNetwork"}, + {"Key": "Test", "Value": "TestValue-Global"}, + ] + + +@mock_aws +def test_untag_resource(): + client = boto3.client("networkmanager") + gn_id = create_global_network(client) + cn = client.create_core_network( + GlobalNetworkId=gn_id, + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + {"Key": "DeleteMe", "Value": "DeleteThisTag!"}, + ], + )["CoreNetwork"] + + # Check untagging core-network + resp = client.untag_resource(ResourceArn=cn["CoreNetworkArn"], TagKeys=["DeleteMe"]) + assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + updated_cn = client.get_core_network(CoreNetworkId=cn["CoreNetworkId"])[ + "CoreNetwork" + ] + assert len(updated_cn["Tags"]) == 1 + assert updated_cn["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}] + + +@mock_aws +def test_list_core_networks(): + NUM_CORE_NETWORKS = 3 + client = boto3.client("networkmanager") + for _ in range(NUM_CORE_NETWORKS): + gn_id = create_global_network(client) + client.create_core_network(GlobalNetworkId=gn_id) + + resp = client.list_core_networks() + assert len(resp["CoreNetworks"]) == NUM_CORE_NETWORKS + + +@mock_aws +def test_get_core_network(): + client = boto3.client("networkmanager") + gn_id = create_global_network(client) + cn_id = client.create_core_network( + GlobalNetworkId=gn_id, + Description="Test core network", + Tags=[ + {"Key": "Name", "Value": "TestNetwork"}, + ], + PolicyDocument="policy-document", + ClientToken="client-token", + )["CoreNetwork"]["CoreNetworkId"] + + resp = client.get_core_network(CoreNetworkId=cn_id) + assert resp["CoreNetwork"]["CoreNetworkId"] == cn_id + assert resp["CoreNetwork"]["Description"] == "Test core network" + assert len(resp["CoreNetwork"]["Tags"]) == 1 + + +@mock_aws +def test_describe_global_networks(): + NUM_NETWORKS = 3 + client = boto3.client("networkmanager") + global_ids = [] + for i in range(NUM_NETWORKS): + global_id = client.create_global_network( + Description=f"Test global network #{i}", + Tags=[ + {"Key": "Name", "Value": f"TestNetwork-{i}"}, + ], + )["GlobalNetwork"]["GlobalNetworkId"] + global_ids.append(global_id) + resp = client.describe_global_networks() + assert len(resp["GlobalNetworks"]) == NUM_NETWORKS + + # Check each global network by ID + for g_id in global_ids: + gn = client.describe_global_networks(GlobalNetworkIds=[g_id])["GlobalNetworks"][ + 0 + ] + assert gn["GlobalNetworkId"] == g_id diff --git a/tests/test_networkmanager/test_server.py b/tests/test_networkmanager/test_server.py new file mode 100644 index 000000000000..e559e53ddad6 --- /dev/null +++ b/tests/test_networkmanager/test_server.py @@ -0,0 +1,23 @@ +"""Test the different server responses.""" + +import json + +import moto.server as server + + +def test_list_global_networks(): + backend = server.create_backend_app("networkmanager") + test_client = backend.test_client() + + res = test_client.get("/global-networks") + + assert "GlobalNetworks" in json.loads(res.data) + + +def test_list_core_networks(): + backend = server.create_backend_app("networkmanager") + test_client = backend.test_client() + + res = test_client.get("/core-networks") + + assert "CoreNetworks" in json.loads(res.data) diff --git a/tests/test_organizations/organizations_test_utils.py b/tests/test_organizations/organizations_test_utils.py index 3c92fb1a3ccc..7c5a3e0a92c2 100644 --- a/tests/test_organizations/organizations_test_utils.py +++ b/tests/test_organizations/organizations_test_utils.py @@ -36,7 +36,7 @@ def test_make_random_policy_id(): assert re.match(utils.POLICY_ID_REGEX, policy_id) -def validate_organization(response): +def validate_organization(response, partition="aws"): org = response["Organization"] assert sorted(org.keys()) == [ "Arn", @@ -50,10 +50,14 @@ def validate_organization(response): assert re.match(utils.ORG_ID_REGEX, org["Id"]) assert org["MasterAccountId"] == DEFAULT_ACCOUNT_ID assert org["MasterAccountArn"] == ( - utils.MASTER_ACCOUNT_ARN_FORMAT.format(org["MasterAccountId"], org["Id"]) + utils.MASTER_ACCOUNT_ARN_FORMAT.format( + partition, org["MasterAccountId"], org["Id"] + ) ) assert org["Arn"] == ( - utils.ORGANIZATION_ARN_FORMAT.format(org["MasterAccountId"], org["Id"]) + utils.ORGANIZATION_ARN_FORMAT.format( + partition, org["MasterAccountId"], org["Id"] + ) ) assert org["MasterAccountEmail"] == utils.MASTER_ACCOUNT_EMAIL assert org["FeatureSet"] in ["ALL", "CONSOLIDATED_BILLING"] @@ -68,7 +72,9 @@ def validate_roots(org, response): root = response["Roots"][0] assert re.match(utils.ROOT_ID_REGEX, root["Id"]) assert root["Arn"] == ( - utils.ROOT_ARN_FORMAT.format(org["MasterAccountId"], org["Id"], root["Id"]) + utils.ROOT_ARN_FORMAT.format( + "aws", org["MasterAccountId"], org["Id"], root["Id"] + ) ) assert isinstance(root["Name"], str) assert root["PolicyTypes"] == [] @@ -79,7 +85,7 @@ def validate_organizational_unit(org, response): ou = response["OrganizationalUnit"] assert re.match(utils.OU_ID_REGEX, ou["Id"]) assert ou["Arn"] == ( - utils.OU_ARN_FORMAT.format(org["MasterAccountId"], org["Id"], ou["Id"]) + utils.OU_ARN_FORMAT.format("aws", org["MasterAccountId"], org["Id"], ou["Id"]) ) assert isinstance(ou["Name"], str) @@ -97,7 +103,7 @@ def validate_account(org, account): assert re.match(utils.ACCOUNT_ID_REGEX, account["Id"]) assert account["Arn"] == ( utils.ACCOUNT_ARN_FORMAT.format( - org["MasterAccountId"], org["Id"], account["Id"] + "aws", org["MasterAccountId"], org["Id"], account["Id"] ) ) assert re.match(utils.EMAIL_REGEX, account["Email"]) @@ -128,7 +134,9 @@ def validate_policy_summary(org, summary): assert isinstance(summary, dict) assert re.match(utils.POLICY_ID_REGEX, summary["Id"]) assert summary["Arn"] == ( - utils.SCP_ARN_FORMAT.format(org["MasterAccountId"], org["Id"], summary["Id"]) + utils.SCP_ARN_FORMAT.format( + "aws", org["MasterAccountId"], org["Id"], summary["Id"] + ) ) assert isinstance(summary["Name"], str) assert isinstance(summary["Description"], str) diff --git a/tests/test_organizations/test_organizations_boto3.py b/tests/test_organizations/test_organizations_boto3.py index 942b7c341f2b..9fa3d567d1d6 100644 --- a/tests/test_organizations/test_organizations_boto3.py +++ b/tests/test_organizations/test_organizations_boto3.py @@ -31,17 +31,26 @@ @mock_aws -def test_create_organization(): - client = boto3.client("organizations", region_name="us-east-1") +@pytest.mark.parametrize( + "region,partition", + [("us-east-1", "aws"), ("cn-north-1", "aws-cn"), ("us-isob-east-1", "aws-iso-b")], +) +def test_create_organization(region, partition): + client = boto3.client("organizations", region_name=region) response = client.create_organization(FeatureSet="ALL") - validate_organization(response) - assert response["Organization"]["FeatureSet"] == "ALL" + validate_organization(response, partition=partition) + organization = response["Organization"] + assert organization["FeatureSet"] == "ALL" response = client.list_accounts() assert len(response["Accounts"]) == 1 assert response["Accounts"][0]["Name"] == "master" assert response["Accounts"][0]["Id"] == ACCOUNT_ID assert response["Accounts"][0]["Email"] == utils.MASTER_ACCOUNT_EMAIL + assert ( + response["Accounts"][0]["Arn"] + == f"arn:{partition}:organizations::{ACCOUNT_ID}:account/{organization['Id']}/{ACCOUNT_ID}" + ) response = client.list_policies(Filter="SERVICE_CONTROL_POLICY") assert len(response["Policies"]) == 1 @@ -1248,17 +1257,29 @@ def test_tag_resource_organization_organizational_unit(): @mock_aws -def test_tag_resource_policy(): - client = boto3.client("organizations", region_name="us-east-1") +@pytest.mark.parametrize( + "policy_type", ["AISERVICES_OPT_OUT_POLICY", "SERVICE_CONTROL_POLICY"] +) +@pytest.mark.parametrize( + "region,partition", + [("us-east-1", "aws"), ("cn-north-1", "aws-cn"), ("us-isob-east-1", "aws-iso-b")], +) +def test_tag_resource_policy(policy_type, region, partition): + client = boto3.client("organizations", region_name=region) client.create_organization(FeatureSet="ALL") _ = client.list_roots()["Roots"][0]["Id"] - resource_id = client.create_policy( + policy = client.create_policy( Content=json.dumps(policy_doc01), Description="A dummy service control policy", Name="MockServiceControlPolicy", - Type="SERVICE_CONTROL_POLICY", - )["Policy"]["PolicySummary"]["Id"] + Type=policy_type, + )["Policy"]["PolicySummary"] + assert policy["Arn"].startswith( + f"arn:{partition}:organizations::{ACCOUNT_ID}:policy/" + ) + + resource_id = policy["Id"] client.tag_resource(ResourceId=resource_id, Tags=[{"Key": "key", "Value": "value"}]) @@ -1309,7 +1330,7 @@ def test_tag_resource_errors(): def test__get_resource_for_tagging_existing_root(): - org = FakeOrganization(ACCOUNT_ID, "ALL") + org = FakeOrganization(ACCOUNT_ID, region_name="us-east-1", feature_set="ALL") root = FakeRoot(org) org_backend = OrganizationsBackend(region_name="N/A", account_id="N/A") @@ -1329,7 +1350,7 @@ def test__get_resource_for_tagging_existing_non_root(): def test__get_resource_for_tagging_existing_ou(): - org = FakeOrganization(ACCOUNT_ID, "ALL") + org = FakeOrganization(ACCOUNT_ID, region_name="us-east-1", feature_set="ALL") ou = FakeOrganizationalUnit(org) org_backend = OrganizationsBackend(region_name="N/A", account_id="N/A") @@ -1349,7 +1370,7 @@ def test__get_resource_for_tagging_non_existing_ou(): def test__get_resource_for_tagging_existing_account(): - org = FakeOrganization(ACCOUNT_ID, "ALL") + org = FakeOrganization(ACCOUNT_ID, region_name="us-east-1", feature_set="ALL") org_backend = OrganizationsBackend(region_name="N/A", account_id="N/A") account = FakeAccount(org, AccountName="test", Email="test@test.test") @@ -1369,7 +1390,7 @@ def test__get_resource_for_tagging_non_existing_account(): def test__get_resource_for_tagging_existing_policy(): - org = FakeOrganization(ACCOUNT_ID, "ALL") + org = FakeOrganization(ACCOUNT_ID, region_name="us-east-1", feature_set="ALL") org_backend = OrganizationsBackend(region_name="N/A", account_id="N/A") policy = FakePolicy(org, Type="SERVICE_CONTROL_POLICY") @@ -1969,26 +1990,33 @@ def test_deregister_delegated_administrator_erros(): @mock_aws -def test_enable_policy_type(): +@pytest.mark.parametrize( + "policy_type", ["AISERVICES_OPT_OUT_POLICY", "SERVICE_CONTROL_POLICY"] +) +@pytest.mark.parametrize( + "region,partition", + [("us-east-1", "aws"), ("cn-north-1", "aws-cn"), ("us-isob-east-1", "aws-iso-b")], +) +def test_enable_policy_type(policy_type, region, partition): # given - client = boto3.client("organizations", region_name="us-east-1") + client = boto3.client("organizations", region_name=region) org = client.create_organization(FeatureSet="ALL")["Organization"] root_id = client.list_roots()["Roots"][0]["Id"] # when - response = client.enable_policy_type( - RootId=root_id, PolicyType="AISERVICES_OPT_OUT_POLICY" - ) + response = client.enable_policy_type(RootId=root_id, PolicyType=policy_type) # then root = response["Root"] assert root["Id"] == root_id assert root["Arn"] == ( - utils.ROOT_ARN_FORMAT.format(org["MasterAccountId"], org["Id"], root_id) + utils.ROOT_ARN_FORMAT.format( + partition, org["MasterAccountId"], org["Id"], root_id + ) ) assert root["Name"] == "Root" assert sorted(root["PolicyTypes"], key=lambda x: x["Type"]) == ( - [{"Type": "AISERVICES_OPT_OUT_POLICY", "Status": "ENABLED"}] + [{"Type": policy_type, "Status": "ENABLED"}] ) @@ -2062,7 +2090,7 @@ def test_disable_policy_type(): root = response["Root"] assert root["Id"] == root_id assert root["Arn"] == ( - utils.ROOT_ARN_FORMAT.format(org["MasterAccountId"], org["Id"], root_id) + utils.ROOT_ARN_FORMAT.format("aws", org["MasterAccountId"], org["Id"], root_id) ) assert root["Name"] == "Root" assert root["PolicyTypes"] == [] @@ -2154,7 +2182,7 @@ def test_aiservices_opt_out_policy(): assert re.match(utils.POLICY_ID_REGEX, summary["Id"]) assert summary["Arn"] == ( utils.AI_POLICY_ARN_FORMAT.format( - org["MasterAccountId"], org["Id"], summary["Id"] + "aws", org["MasterAccountId"], org["Id"], summary["Id"] ) ) assert summary["Name"] == "ai-opt-out" diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index 7fb2664abf81..8c1184e3a221 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -35,8 +35,8 @@ def __init__(self, name, value, metadata=None): self.value = value self.metadata = metadata or {} - def save(self): - s3_client = boto3.client("s3", region_name=DEFAULT_REGION_NAME) + def save(self, region=None): + s3_client = boto3.client("s3", region_name=region or DEFAULT_REGION_NAME) s3_client.put_object( Bucket="mybucket", Key=self.name, Body=self.value, Metadata=self.metadata ) @@ -45,7 +45,9 @@ def save(self): @mock_aws def test_keys_are_pickleable(): """Keys must be pickleable due to boto3 implementation details.""" - key = s3model.FakeKey("name", b"data!", account_id=DEFAULT_ACCOUNT_ID) + key = s3model.FakeKey( + "name", b"data!", account_id=DEFAULT_ACCOUNT_ID, region_name="us-east-1" + ) assert key.value == b"data!" pickled = pickle.dumps(key) @@ -55,14 +57,20 @@ def test_keys_are_pickleable(): @mock_aws -def test_my_model_save(): +@pytest.mark.parametrize( + "region,partition", + [("us-west-2", "aws"), ("cn-north-1", "aws-cn"), ("us-isob-east-1", "aws-iso-b")], +) +def test_my_model_save(region, partition): # Create Bucket so that test can run - conn = boto3.resource("s3", region_name=DEFAULT_REGION_NAME) - conn.create_bucket(Bucket="mybucket") + conn = boto3.resource("s3", region_name=region) + conn.create_bucket( + Bucket="mybucket", CreateBucketConfiguration={"LocationConstraint": region} + ) #################################### model_instance = MyModel("steve", "is awesome") - model_instance.save() + model_instance.save(region) body = conn.Object("mybucket", "steve").get()["Body"].read().decode() @@ -520,11 +528,17 @@ def test_bucket_key_listing_order(): @mock_aws -def test_key_with_reduced_redundancy(): - s3_resource = boto3.resource("s3", region_name=DEFAULT_REGION_NAME) +@pytest.mark.parametrize( + "region,partition", + [("us-west-2", "aws"), ("cn-north-1", "aws-cn"), ("us-isob-east-1", "aws-iso-b")], +) +def test_key_with_reduced_redundancy(region, partition): + s3_resource = boto3.resource("s3", region_name=region) bucket_name = "test_bucket" + s3_resource.create_bucket( + Bucket=bucket_name, CreateBucketConfiguration={"LocationConstraint": region} + ) bucket = s3_resource.Bucket(bucket_name) - bucket.create() bucket.put_object( Key="test_rr_key", Body=b"somedata", StorageClass="REDUCED_REDUNDANCY" @@ -2192,9 +2206,14 @@ def test_delete_bucket_cors(bucket_name=None): @mock_aws -def test_put_bucket_notification(): - s3_client = boto3.client("s3", region_name=DEFAULT_REGION_NAME) - s3_client.create_bucket(Bucket="bucket") +@pytest.mark.parametrize( + "region,partition", [("us-west-2", "aws"), ("cn-north-1", "aws-cn")] +) +def test_put_bucket_notification(region, partition): + s3_client = boto3.client("s3", region_name=region) + s3_client.create_bucket( + Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": region} + ) # With no configuration: result = s3_client.get_bucket_notification(Bucket="bucket") @@ -2208,11 +2227,11 @@ def test_put_bucket_notification(): NotificationConfiguration={ "TopicConfigurations": [ { - "TopicArn": "arn:aws:sns:us-east-1:012345678910:mytopic", + "TopicArn": f"arn:{partition}:sns:{region}:012345678910:mytopic", "Events": ["s3:ObjectCreated:*", "s3:ObjectRemoved:*"], }, { - "TopicArn": "arn:aws:sns:us-east-1:012345678910:myothertopic", + "TopicArn": f"arn:{partition}:sns:{region}:012345678910:myothertopic", "Events": ["s3:ObjectCreated:*"], "Filter": { "Key": { @@ -2234,11 +2253,11 @@ def test_put_bucket_notification(): assert not result.get("LambdaFunctionConfigurations") assert ( result["TopicConfigurations"][0]["TopicArn"] - == "arn:aws:sns:us-east-1:012345678910:mytopic" + == f"arn:{partition}:sns:{region}:012345678910:mytopic" ) assert ( result["TopicConfigurations"][1]["TopicArn"] - == "arn:aws:sns:us-east-1:012345678910:myothertopic" + == f"arn:{partition}:sns:{region}:012345678910:myothertopic" ) assert len(result["TopicConfigurations"][0]["Events"]) == 2 assert len(result["TopicConfigurations"][1]["Events"]) == 1 @@ -2273,7 +2292,7 @@ def test_put_bucket_notification(): "QueueConfigurations": [ { "Id": "SomeID", - "QueueArn": "arn:aws:sqs:us-east-1:012345678910:myQueue", + "QueueArn": f"arn:{partition}:sqs:{region}:012345678910:myQueue", "Events": ["s3:ObjectCreated:*"], "Filter": { "Key": {"FilterRules": [{"Name": "prefix", "Value": "images/"}]} @@ -2289,7 +2308,7 @@ def test_put_bucket_notification(): assert result["QueueConfigurations"][0]["Id"] == "SomeID" assert ( result["QueueConfigurations"][0]["QueueArn"] - == "arn:aws:sqs:us-east-1:012345678910:myQueue" + == f"arn:{partition}:sqs:{region}:012345678910:myQueue" ) assert result["QueueConfigurations"][0]["Events"][0] == "s3:ObjectCreated:*" assert len(result["QueueConfigurations"][0]["Events"]) == 1 @@ -2309,7 +2328,7 @@ def test_put_bucket_notification(): NotificationConfiguration={ "LambdaFunctionConfigurations": [ { - "LambdaFunctionArn": "arn:aws:lambda:us-east-1:012345678910:function:lambda", + "LambdaFunctionArn": f"arn:{partition}:lambda:{region}:012345678910:function:lambda", "Events": ["s3:ObjectCreated:*"], "Filter": { "Key": {"FilterRules": [{"Name": "prefix", "Value": "images/"}]} @@ -2325,7 +2344,7 @@ def test_put_bucket_notification(): assert result["LambdaFunctionConfigurations"][0]["Id"] assert ( result["LambdaFunctionConfigurations"][0]["LambdaFunctionArn"] - == "arn:aws:lambda:us-east-1:012345678910:function:lambda" + == f"arn:{partition}:lambda:{region}:012345678910:function:lambda" ) assert ( result["LambdaFunctionConfigurations"][0]["Events"][0] == "s3:ObjectCreated:*" @@ -2354,19 +2373,19 @@ def test_put_bucket_notification(): NotificationConfiguration={ "TopicConfigurations": [ { - "TopicArn": "arn:aws:sns:us-east-1:012345678910:mytopic", + "TopicArn": f"arn:{partition}:sns:{region}:012345678910:mytopic", "Events": ["s3:ObjectCreated:*", "s3:ObjectRemoved:*"], } ], "LambdaFunctionConfigurations": [ { - "LambdaFunctionArn": "arn:aws:lambda:us-east-1:012345678910:function:lambda", + "LambdaFunctionArn": f"arn:{partition}:lambda:{region}:012345678910:function:lambda", "Events": ["s3:ObjectCreated:*"], } ], "QueueConfigurations": [ { - "QueueArn": "arn:aws:sqs:us-east-1:012345678910:myQueue", + "QueueArn": f"arn:{partition}:sqs:{region}:012345678910:myQueue", "Events": ["s3:ObjectCreated:*"], } ], diff --git a/tests/test_s3/test_s3_config.py b/tests/test_s3/test_s3_config.py index 31edb04afa0f..5713fd42d0d0 100644 --- a/tests/test_s3/test_s3_config.py +++ b/tests/test_s3/test_s3_config.py @@ -69,7 +69,7 @@ def test_list_config_discovered_resources(): s3_config_query_backend.create_bucket(f"eu-bucket{idx}", "eu-west-1") result, next_token = s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None ) assert not next_token assert len(result) == 12 @@ -90,19 +90,19 @@ def test_list_config_discovered_resources(): # With a name: result, next_token = s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, "bucket0", 100, None + DEFAULT_ACCOUNT_ID, "aws", None, "bucket0", 100, None ) assert len(result) == 1 and result[0]["name"] == "bucket0" and not next_token # With a region: result, next_token = s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 100, None, resource_region="eu-west-1" + DEFAULT_ACCOUNT_ID, "aws", None, None, 100, None, resource_region="eu-west-1" ) assert len(result) == 2 and not next_token and result[1]["name"] == "eu-bucket11" # With resource ids: result, next_token = s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, ["bucket0", "bucket1"], None, 100, None + DEFAULT_ACCOUNT_ID, "aws", ["bucket0", "bucket1"], None, 100, None ) assert ( len(result) == 2 @@ -113,13 +113,13 @@ def test_list_config_discovered_resources(): # With duplicated resource ids: result, next_token = s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, ["bucket0", "bucket0"], None, 100, None + DEFAULT_ACCOUNT_ID, "aws", ["bucket0", "bucket0"], None, 100, None ) assert len(result) == 1 and result[0]["name"] == "bucket0" and not next_token # Pagination: result, next_token = s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 1, None + DEFAULT_ACCOUNT_ID, "aws", None, None, 1, None ) assert ( len(result) == 1 and result[0]["name"] == "bucket0" and next_token == "bucket1" @@ -127,13 +127,19 @@ def test_list_config_discovered_resources(): # Last Page: result, next_token = s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 1, "eu-bucket11", resource_region="eu-west-1" + DEFAULT_ACCOUNT_ID, + "aws", + None, + None, + 1, + "eu-bucket11", + resource_region="eu-west-1", ) assert len(result) == 1 and result[0]["name"] == "eu-bucket11" and not next_token # With a list of buckets: result, next_token = s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, ["bucket0", "bucket1"], None, 1, None + DEFAULT_ACCOUNT_ID, "aws", ["bucket0", "bucket1"], None, 1, None ) assert ( len(result) == 1 and result[0]["name"] == "bucket0" and next_token == "bucket1" @@ -142,7 +148,7 @@ def test_list_config_discovered_resources(): # With an invalid page: with pytest.raises(InvalidNextTokenException) as inte: s3_config_query.list_config_service_resources( - DEFAULT_ACCOUNT_ID, None, None, 1, "notabucket" + DEFAULT_ACCOUNT_ID, "aws", None, None, 1, "notabucket" ) assert "The nextToken provided is invalid" in inte.value.message @@ -479,7 +485,9 @@ def test_s3_config_dict(): from moto.s3.models import OWNER, FakeAcl, FakeGrant, FakeGrantee # Without any buckets: - assert not s3_config_query.get_config_resource(DEFAULT_ACCOUNT_ID, "some_bucket") + assert not s3_config_query.get_config_resource( + DEFAULT_ACCOUNT_ID, "aws", "some_bucket" + ) tags = {"someTag": "someValue", "someOtherTag": "someOtherValue"} @@ -526,7 +534,9 @@ def test_s3_config_dict(): s3_config_query_backend.put_bucket_policy("bucket1", pass_policy) # Get the us-west-2 bucket and verify that it works properly: - bucket1_result = s3_config_query.get_config_resource(DEFAULT_ACCOUNT_ID, "bucket1") + bucket1_result = s3_config_query.get_config_resource( + DEFAULT_ACCOUNT_ID, "aws", "bucket1" + ) # Just verify a few things: assert bucket1_result["arn"] == "arn:aws:s3:::bucket1" @@ -583,32 +593,32 @@ def test_s3_config_dict(): # Filter by correct region: assert bucket1_result == s3_config_query.get_config_resource( - DEFAULT_ACCOUNT_ID, "bucket1", resource_region="us-west-2" + DEFAULT_ACCOUNT_ID, "aws", "bucket1", resource_region="us-west-2" ) # By incorrect region: assert not s3_config_query.get_config_resource( - DEFAULT_ACCOUNT_ID, "bucket1", resource_region="eu-west-1" + DEFAULT_ACCOUNT_ID, "aws", "bucket1", resource_region="eu-west-1" ) # With correct resource ID and name: assert bucket1_result == s3_config_query.get_config_resource( - DEFAULT_ACCOUNT_ID, "bucket1", resource_name="bucket1" + DEFAULT_ACCOUNT_ID, "aws", "bucket1", resource_name="bucket1" ) # With an incorrect resource name: assert not s3_config_query.get_config_resource( - DEFAULT_ACCOUNT_ID, "bucket1", resource_name="eu-bucket-1" + DEFAULT_ACCOUNT_ID, "aws", "bucket1", resource_name="eu-bucket-1" ) # With an incorrect account: assert not s3_config_query.get_config_resource( - "unknown-accountid", "bucket1", resource_name="bucket-1" + "unknown-accountid", "aws", "bucket1", resource_name="bucket-1" ) # Verify that no bucket policy returns the proper value: logging_bucket = s3_config_query.get_config_resource( - DEFAULT_ACCOUNT_ID, "logbucket" + DEFAULT_ACCOUNT_ID, "aws", "logbucket" ) assert json.loads(logging_bucket["supplementaryConfiguration"]["BucketPolicy"]) == { "policyText": None diff --git a/tests/test_s3/test_s3_eventbridge_integration.py b/tests/test_s3/test_s3_eventbridge_integration.py index 8c1e3772fdac..df7c2255ac31 100644 --- a/tests/test_s3/test_s3_eventbridge_integration.py +++ b/tests/test_s3/test_s3_eventbridge_integration.py @@ -5,6 +5,7 @@ from uuid import uuid4 import boto3 +import pytest import requests from moto import mock_aws, settings @@ -24,34 +25,40 @@ def _seteup_bucket_notification_eventbridge( bucket_name: str = str(uuid4()), rule_name: str = "test-rule", log_group_name: str = "/test-group", + region: str = REGION_NAME, ) -> Dict[str, str]: """Setups S3, EventBridge and CloudWatchLogs""" # Setup S3 - s3_res = boto3.resource("s3", region_name=REGION_NAME) - s3_res.create_bucket(Bucket=bucket_name) + s3_res = boto3.resource("s3", region_name=region) + if region == "us-east-1": + s3_res.create_bucket(Bucket=bucket_name) + else: + s3_res.create_bucket( + Bucket=bucket_name, CreateBucketConfiguration={"LocationConstraint": region} + ) # Put bucket notification event bridge - s3_client = boto3.client("s3", region_name=REGION_NAME) + s3_client = boto3.client("s3", region_name=region) s3_client.put_bucket_notification_configuration( Bucket=bucket_name, NotificationConfiguration={"EventBridgeConfiguration": {}}, ) # Setup EventBridge Rule - events_client = boto3.client("events", region_name=REGION_NAME) + events_client = boto3.client("events", region_name=region) events_client.put_rule( Name=rule_name, EventPattern=json.dumps({"account": [ACCOUNT_ID]}) ) # Create a log group and attach it to the events target. - logs_client = boto3.client("logs", region_name=REGION_NAME) + logs_client = boto3.client("logs", region_name=region) logs_client.create_log_group(logGroupName=log_group_name) events_client.put_targets( Rule=rule_name, Targets=[ { "Id": "test", - "Arn": f"arn:aws:logs:{REGION_NAME}:{ACCOUNT_ID}:log-group:{log_group_name}", + "Arn": f"arn:aws:logs:{region}:{ACCOUNT_ID}:log-group:{log_group_name}", } ], ) @@ -63,8 +70,10 @@ def _seteup_bucket_notification_eventbridge( } -def _get_send_events(log_group_name: str = "/test-group") -> List[Dict[str, Any]]: - logs_client = boto3.client("logs", region_name=REGION_NAME) +def _get_send_events( + log_group_name: str = "/test-group", region: str = REGION_NAME +) -> List[Dict[str, Any]]: + logs_client = boto3.client("logs", region_name=region) return sorted( logs_client.filter_log_events(logGroupName=log_group_name)["events"], key=lambda item: item["timestamp"], @@ -72,21 +81,25 @@ def _get_send_events(log_group_name: str = "/test-group") -> List[Dict[str, Any] @mock_aws -def test_put_object_notification_ObjectCreated_PUT(): - resource_names = _seteup_bucket_notification_eventbridge() +@pytest.mark.parametrize( + "region,partition", [("us-west-2", "aws"), ("cn-north-1", "aws-cn")] +) +def test_put_object_notification_ObjectCreated_PUT(region, partition): + resource_names = _seteup_bucket_notification_eventbridge(region=region) bucket_name = resource_names["bucket_name"] - s3_client = boto3.client("s3", region_name=REGION_NAME) + s3_client = boto3.client("s3", region_name=region) # Put Object s3_client.put_object(Bucket=bucket_name, Key="keyname", Body="bodyofnewobject") - events = _get_send_events() + events = _get_send_events(region=region) assert len(events) == 2 event_message = json.loads(events[0]["message"]) assert event_message["detail-type"] == "Object Created" assert event_message["source"] == "aws.s3" assert event_message["account"] == ACCOUNT_ID - assert event_message["region"] == REGION_NAME + assert event_message["region"] == region + assert event_message["resources"] == [f"arn:{partition}:s3:::{bucket_name}"] assert event_message["detail"]["bucket"]["name"] == bucket_name assert event_message["detail"]["reason"] == "ObjectCreated" diff --git a/tests/test_s3/test_s3_file_handles.py b/tests/test_s3/test_s3_file_handles.py index c1e6aacc8fdc..8a01d0610e5f 100644 --- a/tests/test_s3/test_s3_file_handles.py +++ b/tests/test_s3/test_s3_file_handles.py @@ -335,7 +335,11 @@ def test_verify_key_can_be_copied_after_disposing(): # This test verifies the copy-operation succeeds, it will just not # have any data. key = s3model.FakeKey( - name="test", bucket_name="bucket", value="sth", account_id=DEFAULT_ACCOUNT_ID + name="test", + bucket_name="bucket", + value="sth", + account_id=DEFAULT_ACCOUNT_ID, + region_name="us-east-1", ) assert not key._value_buffer.closed key.dispose() diff --git a/tests/test_s3/test_s3_lambda_integration.py b/tests/test_s3/test_s3_lambda_integration.py index 08859f5500bb..7f2f79061e28 100644 --- a/tests/test_s3/test_s3_lambda_integration.py +++ b/tests/test_s3/test_s3_lambda_integration.py @@ -282,17 +282,22 @@ def test_object_put__sends_to_queue__using_filter(): @mock_aws -def test_put_bucket_notification_sns_sqs(): - s3_client = boto3.client("s3", region_name=REGION_NAME) - s3_client.create_bucket(Bucket="bucket") +@pytest.mark.parametrize( + "region,partition", [("us-west-2", "aws"), ("cn-north-1", "aws-cn")] +) +def test_put_bucket_notification_sns_sqs(region, partition): + s3_client = boto3.client("s3", region_name=region) + s3_client.create_bucket( + Bucket="bucket", CreateBucketConfiguration={"LocationConstraint": region} + ) - sqs_client = boto3.client("sqs", region_name=REGION_NAME) + sqs_client = boto3.client("sqs", region_name=region) sqs_queue = sqs_client.create_queue(QueueName="queue") sqs_queue_arn = sqs_client.get_queue_attributes( QueueUrl=sqs_queue["QueueUrl"], AttributeNames=["QueueArn"] ) - sns_client = boto3.client("sns", region_name=REGION_NAME) + sns_client = boto3.client("sns", region_name=region) sns_topic = sns_client.create_topic(Name="topic") # Subscribe SQS queue to SNS topic @@ -352,6 +357,11 @@ def test_put_bucket_notification_sns_sqs(): # Get S3 notification from SNS message s3_message_body = json.loads(sns_message["Message"]) assert s3_message_body["Records"][0]["eventName"] == "ObjectCreated:Put" + assert s3_message_body["Records"][0]["awsRegion"] == region + assert ( + s3_message_body["Records"][0]["s3"]["bucket"]["arn"] + == f"arn:{partition}:s3:::bucket" + ) @mock_aws diff --git a/tests/test_s3/test_s3_multipart.py b/tests/test_s3/test_s3_multipart.py index 6c01506f0cab..6af740e73553 100644 --- a/tests/test_s3/test_s3_multipart.py +++ b/tests/test_s3/test_s3_multipart.py @@ -53,12 +53,16 @@ def test_default_key_buffer_size(): os.environ["MOTO_S3_DEFAULT_KEY_BUFFER_SIZE"] = "2" # 2 bytes assert get_s3_default_key_buffer_size() == 2 - fake_key = s3model.FakeKey("a", os.urandom(1), account_id=DEFAULT_ACCOUNT_ID) + fake_key = s3model.FakeKey( + "a", os.urandom(1), account_id=DEFAULT_ACCOUNT_ID, region_name="us-east-1" + ) assert fake_key._value_buffer._rolled is False os.environ["MOTO_S3_DEFAULT_KEY_BUFFER_SIZE"] = "1" # 1 byte assert get_s3_default_key_buffer_size() == 1 - fake_key = s3model.FakeKey("a", os.urandom(3), account_id=DEFAULT_ACCOUNT_ID) + fake_key = s3model.FakeKey( + "a", os.urandom(3), account_id=DEFAULT_ACCOUNT_ID, region_name="us-east-1" + ) assert fake_key._value_buffer._rolled is True # if no MOTO_S3_DEFAULT_KEY_BUFFER_SIZE env variable is present the diff --git a/tests/test_s3/test_s3_notifications.py b/tests/test_s3/test_s3_notifications.py index a7c1c5c4aa1c..87e45ce0503b 100644 --- a/tests/test_s3/test_s3_notifications.py +++ b/tests/test_s3/test_s3_notifications.py @@ -83,7 +83,10 @@ def test_send_event_bridge_message(): logs_client.create_log_group(logGroupName=log_group_name) mocked_bucket = FakeBucket(str(uuid4()), ACCOUNT_ID, REGION_NAME) mocked_key = FakeKey( - "test-key", bytes("test content", encoding="utf-8"), ACCOUNT_ID + "test-key", + bytes("test content", encoding="utf-8"), + ACCOUNT_ID, + region_name=REGION_NAME, ) # do nothing if event target does not exists. diff --git a/tests/test_sagemaker/test_sagemaker_pipeline.py b/tests/test_sagemaker/test_sagemaker_pipeline.py index 76a475058ea5..30adf55407b8 100644 --- a/tests/test_sagemaker/test_sagemaker_pipeline.py +++ b/tests/test_sagemaker/test_sagemaker_pipeline.py @@ -294,6 +294,7 @@ def test_load_pipeline_definition_from_s3(): "ObjectKey": object_key, }, account_id=ACCOUNT_ID, + partition="aws", ) assert observed_pipeline_definition == pipeline_definition diff --git a/tests/test_ssoadmin/test_ssoadmin_policies.py b/tests/test_ssoadmin/test_ssoadmin_policies.py index e3fcfd9eeb2d..3a40852576b2 100644 --- a/tests/test_ssoadmin/test_ssoadmin_policies.py +++ b/tests/test_ssoadmin/test_ssoadmin_policies.py @@ -139,12 +139,15 @@ def test_delete_inline_policy_to_permissionset(): @mock_aws -def test_attach_managed_policy_to_permission_set(): - client = boto3.client("sso-admin", region_name="us-east-1") +@pytest.mark.parametrize( + "region,partition", [("us-east-1", "aws"), ("cn-north-1", "aws-cn")] +) +def test_attach_managed_policy_to_permission_set(region, partition): + client = boto3.client("sso-admin", region_name=region) permission_set_arn = create_permissionset(client) permissionset_id = permission_set_arn.split("/")[-1] - managed_policy_arn = "arn:aws:iam::aws:policy/AdministratorAccess" + managed_policy_arn = f"arn:{partition}:iam::aws:policy/AdministratorAccess" client.attach_managed_policy_to_permission_set( InstanceArn=DUMMY_INSTANCE_ARN, @@ -158,10 +161,7 @@ def test_attach_managed_policy_to_permission_set(): ) assert response["AttachedManagedPolicies"][0]["Name"] == "AdministratorAccess" - assert ( - response["AttachedManagedPolicies"][0]["Arn"] - == "arn:aws:iam::aws:policy/AdministratorAccess" - ) + assert response["AttachedManagedPolicies"][0]["Arn"] == managed_policy_arn # test for managed policy that is already attached with pytest.raises(ClientError) as e: diff --git a/tests/test_stepfunctions/test_stepfunctions.py b/tests/test_stepfunctions/test_stepfunctions.py index f7e758331618..3cf112aa5127 100644 --- a/tests/test_stepfunctions/test_stepfunctions.py +++ b/tests/test_stepfunctions/test_stepfunctions.py @@ -851,6 +851,25 @@ def test_stepfunction_regions(test_region): resp = client.list_state_machines() assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + response = client.create_state_machine( + name="name", definition=str(simple_definition), roleArn=_get_default_role() + ) + if test_region == "us-west-2": + assert ( + response["stateMachineArn"] + == f"arn:aws:states:{test_region}:{ACCOUNT_ID}:stateMachine:name" + ) + if test_region == "cn-northwest-1": + assert ( + response["stateMachineArn"] + == f"arn:aws-cn:states:{test_region}:{ACCOUNT_ID}:stateMachine:name" + ) + if test_region == "us-isob-east-1": + assert ( + response["stateMachineArn"] + == f"arn:aws-iso-b:states:{test_region}:{ACCOUNT_ID}:stateMachine:name" + ) + @mock_aws @mock.patch.dict(os.environ, {"SF_EXECUTION_HISTORY_TYPE": "FAILURE"}) diff --git a/tests/test_sts/test_sts.py b/tests/test_sts/test_sts.py index 4e5f3f570644..d952ba2d543b 100644 --- a/tests/test_sts/test_sts.py +++ b/tests/test_sts/test_sts.py @@ -67,7 +67,8 @@ def test_get_federation_token_boto3(): @freeze_time("2012-01-01 12:00:00") @mock_aws @pytest.mark.parametrize( - "region,partition", [("us-east-1", "aws"), ("cn-north-1", "aws-cn")] + "region,partition", + [("us-east-1", "aws"), ("cn-north-1", "aws-cn"), ("us-isob-east-1", "aws-iso-b")], ) def test_assume_role(region, partition): client = boto3.client("sts", region_name=region) @@ -693,7 +694,7 @@ def test_get_caller_identity_with_assumed_role_credentials(region, partition): identity = boto3.client( "sts", - region_name="us-east-1", + region_name=region, aws_access_key_id=access_key["AccessKeyId"], aws_secret_access_key=access_key["SecretAccessKey"], ).get_caller_identity() @@ -738,3 +739,10 @@ def test_sts_regions(region): client = boto3.client("sts", region_name=region) resp = client.get_caller_identity() assert resp["ResponseMetadata"]["HTTPStatusCode"] == 200 + + if region == "us-west-2": + assert resp["Arn"] == f"arn:aws:sts::{ACCOUNT_ID}:user/moto" + if region == "cn-northwest-1": + assert resp["Arn"] == f"arn:aws-cn:sts::{ACCOUNT_ID}:user/moto" + if region == "us-isob-east-1": + assert resp["Arn"] == f"arn:aws-iso-b:sts::{ACCOUNT_ID}:user/moto" diff --git a/tests/test_utilities/test_utils.py b/tests/test_utilities/test_utils.py new file mode 100644 index 000000000000..3b76529a4569 --- /dev/null +++ b/tests/test_utilities/test_utils.py @@ -0,0 +1,16 @@ +import re + +from moto.utilities.utils import ARN_PARTITION_REGEX, get_partition + + +def test_get_partition(): + assert get_partition(None) == "aws" + assert get_partition("unknown") == "aws" + assert get_partition("cn-north-1") == "aws-cn" + + +def test_partition_regex(): + assert re.match(ARN_PARTITION_REGEX, "arn:aws:someservice") + assert re.match(ARN_PARTITION_REGEX, "arn:aws-cn:someservice") + assert not re.match(ARN_PARTITION_REGEX, "arn:partition:someservice") + assert not re.match(ARN_PARTITION_REGEX, "someservice") diff --git a/tests/test_wafv2/test_wafv2.py b/tests/test_wafv2/test_wafv2.py index 54ba198beb9a..0646d2fe1f00 100644 --- a/tests/test_wafv2/test_wafv2.py +++ b/tests/test_wafv2/test_wafv2.py @@ -9,13 +9,17 @@ @mock_aws -def test_create_web_acl(): - conn = boto3.client("wafv2", region_name="us-east-1") +@pytest.mark.parametrize( + "region,partition", + [("us-east-1", "aws"), ("cn-north-1", "aws-cn"), ("us-gov-east-1", "aws-us-gov")], +) +def test_create_web_acl(region, partition): + conn = boto3.client("wafv2", region_name=region) res = conn.create_web_acl(**CREATE_WEB_ACL_BODY("John", "REGIONAL")) web_acl = res["Summary"] assert web_acl.get("Name") == "John" assert web_acl.get("ARN").startswith( - f"arn:aws:wafv2:us-east-1:{ACCOUNT_ID}:regional/webacl/John/" + f"arn:{partition}:wafv2:{region}:{ACCOUNT_ID}:regional/webacl/John/" ) # Duplicate name - should raise error with pytest.raises(ClientError) as ex: From ee4515dafdfde207baafbaa3182c86a7f5c01222 Mon Sep 17 00:00:00 2001 From: Zachary Karpinski Date: Thu, 23 May 2024 10:35:31 -0400 Subject: [PATCH 14/15] fix tag resource and update exceptions --- moto/networkmanager/exceptions.py | 11 +++++++++-- moto/networkmanager/models.py | 17 ++++++++--------- moto/networkmanager/responses.py | 2 -- moto/networkmanager/urls.py | 1 + tests/test_networkmanager/test_server.py | 13 +++++++++++++ 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/moto/networkmanager/exceptions.py b/moto/networkmanager/exceptions.py index 301e39ff47ec..46e0cd9fc62c 100644 --- a/moto/networkmanager/exceptions.py +++ b/moto/networkmanager/exceptions.py @@ -1,5 +1,7 @@ """Exceptions raised by the networkmanager service.""" +import json + from moto.core.exceptions import JsonRESTError @@ -9,5 +11,10 @@ def __init__(self, message: str): class ResourceNotFound(JsonRESTError): - def __init__(self, message: str): - super().__init__(__class__.__name__, message) # type: ignore + def __init__(self, resource_id: str): + super().__init__("NotFoundException", "Resource not found.") + body = { + "ResourceId": resource_id, + "Message": "Resource not found.", + } + self.description = json.dumps(body) diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 3c3dddc5d516..18ca44109ee8 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -10,7 +10,7 @@ from moto.utilities.paginator import paginate from moto.utilities.utils import PARTITION_NAMES -from .exceptions import ResourceNotFound, ValidationError +from .exceptions import ResourceNotFound PAGINATION_MODEL = { "describe_global_networks": { @@ -127,7 +127,7 @@ def create_core_network( ) -> CoreNetwork: # check if global network exists if global_network_id not in self.global_networks: - raise ResourceNotFound("Resource not found.") + raise ResourceNotFound(global_network_id) core_network = CoreNetwork( global_network_id=global_network_id, @@ -144,7 +144,7 @@ def create_core_network( def delete_core_network(self, core_network_id: str) -> CoreNetwork: # Check if core network exists if core_network_id not in self.core_networks: - raise ResourceNotFound("Resource not found.") + raise ResourceNotFound(core_network_id) core_network = self.core_networks.pop(core_network_id) core_network.state = "DELETING" return core_network @@ -164,7 +164,7 @@ def list_core_networks(self) -> List[CoreNetwork]: def get_core_network(self, core_network_id: str) -> CoreNetwork: if core_network_id not in self.core_networks: - raise ResourceNotFound("Resource not found.") + raise ResourceNotFound(core_network_id) core_network = self.core_networks[core_network_id] return core_network @@ -173,12 +173,11 @@ def _get_resource_from_arn(self, arn: str) -> Any: "core-network": self.core_networks, "global-network": self.global_networks, } - target_resource, target_name = arn.split(":")[-1].split("/") try: + target_resource, target_name = arn.split(":")[-1].split("/") resource = resources.get(target_resource).get(target_name) # type: ignore - except KeyError: - message = f"Could not find {target_resource} with name {target_name}" - raise ValidationError(message=message) + except (KeyError, ValueError): + raise ResourceNotFound(arn) return resource @paginate(pagination_model=PAGINATION_MODEL) @@ -190,7 +189,7 @@ def describe_global_networks( queried_global_networks = list(self.global_networks.values()) elif isinstance(global_network_ids, str): if global_network_ids not in self.global_networks: - raise ResourceNotFound + raise ResourceNotFound(global_network_ids) queried_global_networks.append(self.global_networks[global_network_ids]) else: for id in global_network_ids: diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index bf79fc411dfe..bb51109f1a60 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -19,8 +19,6 @@ def __init__(self) -> None: def networkmanager_backend(self) -> NetworkManagerBackend: return networkmanager_backends[self.current_account][self.partition] - # add methods from here - def create_global_network(self) -> str: params = json.loads(self.body) description = params.get("Description") diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index 861742ed4b97..9ae432e50118 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -12,5 +12,6 @@ "{0}/core-networks$": NetworkManagerResponse.dispatch, "{0}/core-networks/(?P[^/.]+)$": NetworkManagerResponse.dispatch, "{0}/global-networks/(?P[^/.]+)$": NetworkManagerResponse.dispatch, + "{0}/tags$": NetworkManagerResponse.dispatch, "{0}/tags/(?P[^/.]+)$": NetworkManagerResponse.dispatch, } diff --git a/tests/test_networkmanager/test_server.py b/tests/test_networkmanager/test_server.py index e559e53ddad6..431ce1f3f1b0 100644 --- a/tests/test_networkmanager/test_server.py +++ b/tests/test_networkmanager/test_server.py @@ -21,3 +21,16 @@ def test_list_core_networks(): res = test_client.get("/core-networks") assert "CoreNetworks" in json.loads(res.data) + + +def test_tag_resource(): + backend = server.create_backend_app("networkmanager") + test_client = backend.test_client() + + res = test_client.post( + "/tags/test-resource-id", + json={"Tags": [{"Key": "Name", "Value": "CoreNetworks"}]}, + ) + data = json.loads(res.data) + assert data["Message"] == "Resource not found." + assert data["ResourceId"] == "test-resource-id" From d5995abde5de70b65037fa3f595cd6ddf84e1c14 Mon Sep 17 00:00:00 2001 From: Bert Blommers Date: Thu, 23 May 2024 20:02:56 +0000 Subject: [PATCH 15/15] Networkmanager - Fix tag-URLs in ServerMode --- moto/networkmanager/models.py | 21 ++++++++----------- moto/networkmanager/responses.py | 4 ++-- moto/networkmanager/urls.py | 1 + .../test_networkmanager.py | 9 ++++++++ 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/moto/networkmanager/models.py b/moto/networkmanager/models.py index 18ca44109ee8..d0e87e6b0b0f 100644 --- a/moto/networkmanager/models.py +++ b/moto/networkmanager/models.py @@ -1,12 +1,11 @@ """NetworkManagerBackend class with methods for supported APIs.""" -import random from datetime import datetime, timezone from typing import Any, Dict, List, Optional from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel -from moto.ec2.utils import HEX_CHARS +from moto.moto_api._internal import mock_random from moto.utilities.paginator import paginate from moto.utilities.utils import PARTITION_NAMES @@ -32,15 +31,16 @@ class GlobalNetwork(BaseModel): def __init__( self, account_id: str, + partition: str, description: Optional[str], tags: Optional[List[Dict[str, str]]], ): self.description = description self.tags = tags or [] self.global_network_id = "global-network-" + "".join( - random.choice(HEX_CHARS) for _ in range(18) + mock_random.get_random_hex(18) ) - self.global_network_arn = f"arn:aws:networkmanager:{account_id}:global-network/{self.global_network_id}" + self.global_network_arn = f"arn:{partition}:networkmanager:{account_id}:global-network/{self.global_network_id}" self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" @@ -59,6 +59,7 @@ class CoreNetwork(BaseModel): def __init__( self, account_id: str, + partition: str, global_network_id: str, description: Optional[str], tags: Optional[List[Dict[str, str]]], @@ -70,12 +71,8 @@ def __init__( self.tags = tags or [] self.policy_document = policy_document self.client_token = client_token - self.core_network_id = "core-network-" + "".join( - random.choice(HEX_CHARS) for _ in range(18) - ) - self.core_network_arn = ( - f"arn:aws:networkmanager:{account_id}:core-network/{self.core_network_id}" - ) + self.core_network_id = "core-network-" + "".join(mock_random.get_random_hex(18)) + self.core_network_arn = f"arn:{partition}:networkmanager:{account_id}:core-network/{self.core_network_id}" self.created_at = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.state = "PENDING" @@ -101,8 +98,6 @@ def __init__(self, region_name: str, account_id: str) -> None: self.global_networks: Dict[str, GlobalNetwork] = {} self.core_networks: Dict[str, CoreNetwork] = {} - # add methods from here - def create_global_network( self, description: Optional[str], @@ -112,6 +107,7 @@ def create_global_network( description=description, tags=tags, account_id=self.account_id, + partition=self.partition, ) gnw_id = global_network.global_network_id self.global_networks[gnw_id] = global_network @@ -136,6 +132,7 @@ def create_core_network( policy_document=policy_document, client_token=client_token, account_id=self.account_id, + partition=self.partition, ) cnw_id = core_network.core_network_id self.core_networks[cnw_id] = core_network diff --git a/moto/networkmanager/responses.py b/moto/networkmanager/responses.py index bb51109f1a60..b8ccfbe1e998 100644 --- a/moto/networkmanager/responses.py +++ b/moto/networkmanager/responses.py @@ -55,7 +55,7 @@ def delete_core_network(self) -> str: def tag_resource(self) -> TYPE_RESPONSE: params = json.loads(self.body) tags = params.get("Tags") - resource_arn = unquote(self.path.split("/")[-1]) + resource_arn = unquote(self.path.split("/tags/")[-1]) self.networkmanager_backend.tag_resource( resource_arn=resource_arn, @@ -66,7 +66,7 @@ def tag_resource(self) -> TYPE_RESPONSE: def untag_resource(self) -> TYPE_RESPONSE: params = self._get_params() tag_keys = params.get("tagKeys") - resource_arn = unquote(self.path.split("/")[-1]) + resource_arn = unquote(self.path.split("/tags/")[-1]) self.networkmanager_backend.untag_resource( resource_arn=resource_arn, tag_keys=tag_keys, diff --git a/moto/networkmanager/urls.py b/moto/networkmanager/urls.py index 9ae432e50118..7247a03522dd 100644 --- a/moto/networkmanager/urls.py +++ b/moto/networkmanager/urls.py @@ -14,4 +14,5 @@ "{0}/global-networks/(?P[^/.]+)$": NetworkManagerResponse.dispatch, "{0}/tags$": NetworkManagerResponse.dispatch, "{0}/tags/(?P[^/.]+)$": NetworkManagerResponse.dispatch, + "{0}/tags/(?P[^/]+)/(?P[^/]+)$": NetworkManagerResponse.dispatch, } diff --git a/tests/test_networkmanager/test_networkmanager.py b/tests/test_networkmanager/test_networkmanager.py index 8a42273a0b86..6ebed4a0fabb 100644 --- a/tests/test_networkmanager/test_networkmanager.py +++ b/tests/test_networkmanager/test_networkmanager.py @@ -3,6 +3,7 @@ import boto3 from moto import mock_aws +from tests import DEFAULT_ACCOUNT_ID # See our Development Tips on writing tests for hints on how to write good tests: # http://docs.getmoto.org/en/latest/docs/contributing/development_tips/tests.html @@ -28,6 +29,10 @@ def test_create_global_network(): ) global_network = resp["GlobalNetwork"] + assert ( + global_network["GlobalNetworkArn"] + == f"arn:aws:networkmanager:{DEFAULT_ACCOUNT_ID}:global-network/{global_network['GlobalNetworkId']}" + ) assert global_network["Description"] == "Test global network" assert global_network["Tags"] == [{"Key": "Name", "Value": "TestNetwork"}] assert global_network["State"] == "PENDING" @@ -55,6 +60,10 @@ def test_create_core_network(): ) core_network = resp["CoreNetwork"] + assert ( + core_network["CoreNetworkArn"] + == f"arn:aws:networkmanager:{DEFAULT_ACCOUNT_ID}:core-network/{core_network['CoreNetworkId']}" + ) assert core_network["GlobalNetworkId"] == global_network_id assert core_network["Description"] == "Test core network" assert len(core_network["Tags"]) == 1