From cc950a78fb04a52085ee0af1561762058afd64b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Wed, 29 Jan 2025 18:28:31 +0100 Subject: [PATCH 01/19] feat: use bt_decode --- bittensor/core/async_subtensor.py | 183 ++- bittensor/core/chain_data/__init__.py | 2 +- bittensor/core/chain_data/delegate_info.py | 57 +- bittensor/core/chain_data/info_base.py | 27 + bittensor/core/chain_data/neuron_info.py | 111 +- bittensor/core/chain_data/neuron_info_lite.py | 129 +- bittensor/core/chain_data/stake_info.py | 23 +- .../core/chain_data/subnet_hyperparameters.py | 14 +- bittensor/core/chain_data/subnet_info.py | 59 +- bittensor/core/chain_data/utils.py | 119 +- bittensor/core/settings.py | 184 --- bittensor/core/subtensor.py | 142 +-- tests/helpers/integration_websocket_data.py | 1047 +++-------------- tests/helpers/registry | Bin 193063 -> 204076 bytes .../test_subtensor_integration.py | 27 +- tests/unit_tests/test_async_subtensor.py | 324 +++-- 16 files changed, 678 insertions(+), 1770 deletions(-) create mode 100644 bittensor/core/chain_data/info_base.py diff --git a/bittensor/core/async_subtensor.py b/bittensor/core/async_subtensor.py index 1c0ea4f27b..489d4f8917 100644 --- a/bittensor/core/async_subtensor.py +++ b/bittensor/core/async_subtensor.py @@ -11,8 +11,6 @@ from bittensor_wallet.utils import SS58_FORMAT from numpy.typing import NDArray from scalecodec import GenericCall, ScaleType -from scalecodec.base import RuntimeConfiguration -from scalecodec.type_registry import load_type_registry_preset from bittensor.core.chain_data import ( DelegateInfo, @@ -24,7 +22,6 @@ SubnetHyperparameters, SubnetInfo, WeightCommitInfo, - custom_rpc_type_registry, decode_account_id, DynamicInfo, ) @@ -69,8 +66,6 @@ from bittensor.utils import ( decode_hex_identity_dict, format_error_message, - hex_to_bytes, - ss58_to_vec_u8, torch, u16_normalized_float, _decode_hex_identity_dict, @@ -424,11 +419,11 @@ async def query_runtime_api( self, runtime_api: str, method: str, - params: Optional[Union[list[list[int]], dict[str, int], list[int]]] = None, + params: Optional[Union[list[Any], dict[str, Any]]], block: Optional[int] = None, block_hash: Optional[str] = None, reuse_block: bool = False, - ) -> Optional[str]: + ) -> Optional[Any]: """ Queries the runtime API of the Bittensor blockchain, providing a way to interact with the underlying runtime and retrieve data encoded in Scale Bytes format. This function is essential for advanced users who need to @@ -444,47 +439,16 @@ async def query_runtime_api( reuse_block: Whether to reuse the last-used block hash. Do not set if using block_hash or block Returns: - The Scale Bytes encoded result from the runtime API call, or `None` if the call fails. + The decoded result from the runtime API call, or `None` if the call fails. This function enables access to the deeper layers of the Bittensor blockchain, allowing for detailed and specific interactions with the network's runtime environment. """ - # TODO why doesn't this just use SubstrateInterface.runtime_call ? block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - - call_definition = TYPE_REGISTRY["runtime_api"][runtime_api]["methods"][method] - - data = ( - "0x" - if params is None - else await self.encode_params( - call_definition=call_definition, params=params - ) - ) - api_method = f"{runtime_api}_{method}" - - json_result = await self.substrate.rpc_request( - method="state_call", - params=[api_method, data, block_hash] if block_hash else [api_method, data], - reuse_block_hash=reuse_block, + result = await self.substrate.runtime_call( + runtime_api, method, params, block_hash ) - - if json_result is None: - return None - - return_type = call_definition["type"] - - as_scale_bytes = scalecodec.ScaleBytes(json_result["result"]) # type: ignore - - rpc_runtime_config = RuntimeConfiguration() - rpc_runtime_config.update_type_registry(load_type_registry_preset("legacy")) - rpc_runtime_config.update_type_registry(custom_rpc_type_registry) - - obj = rpc_runtime_config.create_scale_object(return_type, as_scale_bytes) - if obj.data.to_hex() == "0x0400": # RPC returned None result - return None - - return obj.decode() + return result.value async def query_subtensor( self, @@ -793,14 +757,18 @@ async def get_all_subnets_info( Gaining insights into the subnets' details assists in understanding the network's composition, the roles of different subnets, and their unique features. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - hex_bytes_result = await self.query_runtime_api( - "SubnetInfoRuntimeApi", "get_subnets_info", params=[], block_hash=block_hash + result = await self.query_runtime_api( + runtime_api="SubnetInfoRuntimeApi", + method="get_subnets_info", + params=[], + block=block, + block_hash=block_hash, + reuse_block=reuse_block, ) - if not hex_bytes_result: + if not result: return [] else: - return SubnetInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + return SubnetInfo.list_from_any(result) async def get_balance( self, @@ -1043,19 +1011,19 @@ async def get_delegate_by_hotkey( network's consensus and governance structures. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - encoded_hotkey = ss58_to_vec_u8(hotkey_ss58) - - json_body = await self.substrate.rpc_request( - method="delegateInfo_getDelegate", # custom rpc method - params=([encoded_hotkey, block_hash] if block_hash else [encoded_hotkey]), - reuse_block_hash=reuse_block, + result = await self.query_runtime_api( + runtime_api="DelegateInfoRuntimeApi", + method="get_delegate", + params=[hotkey_ss58], + block=block, + block_hash=block_hash, + reuse_block=reuse_block, ) - if not (result := json_body.get("result", None)): + if not result: return None - return DelegateInfo.from_vec_u8(bytes(result)) + return DelegateInfo.from_any(result) async def get_delegate_identities( self, @@ -1192,18 +1160,19 @@ async def get_delegated( the network's delegation and consensus mechanisms. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - encoded_coldkey = ss58_to_vec_u8(coldkey_ss58) - json_body = await self.substrate.rpc_request( - method="delegateInfo_getDelegated", - params=([block_hash, encoded_coldkey] if block_hash else [encoded_coldkey]), - reuse_block_hash=reuse_block, + result = await self.query_runtime_api( + runtime_api="DelegateInfoRuntimeApi", + method="get_delegated", + params=[coldkey_ss58], + block=block, + block_hash=block_hash, + reuse_block=reuse_block, ) - if not (result := json_body.get("result")): + if not result: return [] - return DelegateInfo.delegated_list_from_vec_u8(bytes(result)) + return DelegateInfo.delegated_list_from_any(result) async def get_delegates( self, @@ -1222,16 +1191,16 @@ async def get_delegates( Returns: List of DelegateInfo objects, or an empty list if there are no delegates. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - hex_bytes_result = await self.query_runtime_api( + result = await self.query_runtime_api( runtime_api="DelegateInfoRuntimeApi", method="get_delegates", params=[], + block=block, block_hash=block_hash, reuse_block=reuse_block, ) - if hex_bytes_result: - return DelegateInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + if result: + return DelegateInfo.list_from_any(result) else: return [] @@ -1508,18 +1477,17 @@ async def get_neuron_for_pubkey_and_subnet( if uid is None: return NeuronInfo.get_null_neuron() - params = [netuid, uid.value] - json_body = await self.substrate.rpc_request( - method="neuronInfo_getNeuron", - params=params, + result = await self.query_runtime_api( + runtime_api="NeuronInfoRuntimeApi", + method="get_neuron", + params=[netuid, uid.value], block_hash=block_hash, - reuse_block_hash=reuse_block, ) - if not (result := json_body.get("result", None)): + if not result: return NeuronInfo.get_null_neuron() - return NeuronInfo.from_vec_u8(bytes(result)) + return NeuronInfo.from_any(result) async def get_stake( self, @@ -1649,21 +1617,19 @@ async def get_stake_info_for_coldkey( Stake information is vital for account holders to assess their investment and participation in the network's delegation and consensus processes. """ - encoded_coldkey = ss58_to_vec_u8(coldkey_ss58) - - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - hex_bytes_result = await self.query_runtime_api( + result = await self.query_runtime_api( runtime_api="StakeInfoRuntimeApi", method="get_stake_info_for_coldkey", - params=[encoded_coldkey], + params=[coldkey_ss58], + block=block, block_hash=block_hash, reuse_block=reuse_block, ) - if not hex_bytes_result: + if not result: return [] - return StakeInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + return StakeInfo.list_from_any(result) async def get_subnet_burn_cost( self, @@ -1686,11 +1652,11 @@ async def get_subnet_burn_cost( The subnet burn cost is an important economic parameter, reflecting the network's mechanisms for controlling the proliferation of subnets and ensuring their commitment to the network's long-term viability. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) lock_cost = await self.query_runtime_api( runtime_api="SubnetRegistrationRuntimeApi", method="get_network_registration_cost", params=[], + block=block, block_hash=block_hash, reuse_block=reuse_block, ) @@ -1720,19 +1686,19 @@ async def get_subnet_hyperparameters( Understanding the hyperparameters is crucial for comprehending how subnets are configured and managed, and how they interact with the network's consensus and incentive mechanisms. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - hex_bytes_result = await self.query_runtime_api( + result = await self.query_runtime_api( runtime_api="SubnetInfoRuntimeApi", method="get_subnet_hyperparams", params=[netuid], + block=block, block_hash=block_hash, reuse_block=reuse_block, ) - if not hex_bytes_result: + if not result: return None - return SubnetHyperparameters.from_vec_u8(hex_to_bytes(hex_bytes_result)) + return SubnetHyperparameters.from_any(result) async def get_subnet_reveal_period_epochs( self, netuid: int, block: Optional[int] = None, block_hash: Optional[str] = None @@ -2402,22 +2368,19 @@ async def neuron_for_uid( if uid is None: return NeuronInfo.get_null_neuron() - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - - if reuse_block: - block_hash = self.substrate.last_block_hash - - params = [netuid, uid, block_hash] if block_hash else [netuid, uid] - json_body = await self.substrate.rpc_request( - method="neuronInfo_getNeuron", - params=params, # custom rpc method - reuse_block_hash=reuse_block, + result = await self.query_runtime_api( + runtime_api="NeuronInfoRuntimeApi", + method="get_neuron", + params=[netuid, uid], + block=block, + block_hash=block_hash, + reuse_block=reuse_block, ) - if not (result := json_body.get("result", None)): + + if not result: return NeuronInfo.get_null_neuron() - bytes_result = bytes(result) - return NeuronInfo.from_vec_u8(bytes_result) + return NeuronInfo.from_any(result) async def neurons( self, @@ -2443,19 +2406,19 @@ async def neurons( Understanding the distribution and status of neurons within a subnet is key to comprehending the network's decentralized structure and the dynamics of its consensus and governance processes. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - hex_bytes_result = await self.query_runtime_api( + result = await self.query_runtime_api( runtime_api="NeuronInfoRuntimeApi", method="get_neurons", params=[netuid], + block=block, block_hash=block_hash, reuse_block=reuse_block, ) - if not hex_bytes_result: + if not result: return [] - return NeuronInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + return NeuronInfo.list_from_any(result) async def neurons_lite( self, @@ -2481,21 +2444,19 @@ async def neurons_lite( This function offers a quick overview of the neuron population within a subnet, facilitating efficient analysis of the network's decentralized structure and neuron dynamics. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - hex_bytes_result = await self.query_runtime_api( + result = await self.query_runtime_api( runtime_api="NeuronInfoRuntimeApi", method="get_neurons_lite", - params=[ - netuid - ], # TODO check to see if this can accept more than one at a time + params=[netuid], + block=block, block_hash=block_hash, reuse_block=reuse_block, ) - if not hex_bytes_result: + if not result: return [] - return NeuronInfoLite.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + return NeuronInfoLite.list_from_any(result) async def query_identity( self, diff --git a/bittensor/core/chain_data/__init__.py b/bittensor/core/chain_data/__init__.py index 6c42d572a1..93feeaade4 100644 --- a/bittensor/core/chain_data/__init__.py +++ b/bittensor/core/chain_data/__init__.py @@ -24,7 +24,7 @@ from .subnet_info import SubnetInfo from .subnet_state import SubnetState from .weight_commit_info import WeightCommitInfo -from .utils import custom_rpc_type_registry, decode_account_id, process_stake_data +from .utils import decode_account_id, process_stake_data ProposalCallData = GenericCall diff --git a/bittensor/core/chain_data/delegate_info.py b/bittensor/core/chain_data/delegate_info.py index a840d1bb15..459489d591 100644 --- a/bittensor/core/chain_data/delegate_info.py +++ b/bittensor/core/chain_data/delegate_info.py @@ -1,15 +1,17 @@ -import bt_decode - from dataclasses import dataclass -from typing import Optional +from typing import Any, Optional + +import bt_decode +import munch +from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.utils import decode_account_id from bittensor.utils import u16_normalized_float from bittensor.utils.balance import Balance @dataclass -class DelegateInfo: +class DelegateInfo(InfoBase): """ Dataclass for delegate information. For a lighter version of this class, see ``DelegateInfoLite``. @@ -40,8 +42,7 @@ class DelegateInfo: total_daily_return: Balance # Total daily return of the delegate @classmethod - def from_vec_u8(cls, vec_u8: bytes) -> Optional["DelegateInfo"]: - decoded = bt_decode.DelegateInfo.decode(vec_u8) + def _fix_decoded(cls, decoded: "DelegateInfo") -> Optional["DelegateInfo"]: hotkey = decode_account_id(decoded.delegate_ss58) owner = decode_account_id(decoded.owner_ss58) nominators = [ @@ -63,36 +64,14 @@ def from_vec_u8(cls, vec_u8: bytes) -> Optional["DelegateInfo"]: @classmethod def list_from_vec_u8(cls, vec_u8: bytes) -> list["DelegateInfo"]: decoded = bt_decode.DelegateInfo.decode_vec(vec_u8) - results = [] - for d in decoded: - hotkey = decode_account_id(d.delegate_ss58) - owner = decode_account_id(d.owner_ss58) - nominators = [ - (decode_account_id(x), Balance.from_rao(y)) for x, y in d.nominators - ] - total_stake = sum((x[1] for x in nominators)) if nominators else Balance(0) - results.append( - DelegateInfo( - hotkey_ss58=hotkey, - total_stake=total_stake, - nominators=nominators, - owner_ss58=owner, - take=u16_normalized_float(d.take), - validator_permits=d.validator_permits, - registrations=d.registrations, - return_per_1000=Balance.from_rao(d.return_per_1000), - total_daily_return=Balance.from_rao(d.total_daily_return), - ) - ) - return results + return [cls._fix_decoded(d) for d in decoded] @classmethod - def delegated_list_from_vec_u8( - cls, vec_u8: bytes + def fix_delegated_list( + cls, delegated_list: list[tuple["DelegateInfo", Balance]] ) -> list[tuple["DelegateInfo", Balance]]: - decoded = bt_decode.DelegateInfo.decode_delegated(vec_u8) results = [] - for d, b in decoded: + for d, b in delegated_list: nominators = [ (decode_account_id(x), Balance.from_rao(y)) for x, y in d.nominators ] @@ -110,3 +89,17 @@ def delegated_list_from_vec_u8( ) results.append((delegate, Balance.from_rao(b))) return results + + @classmethod + def delegated_list_from_vec_u8( + cls, vec_u8: bytes + ) -> list[tuple["DelegateInfo", Balance]]: + decoded = bt_decode.DelegateInfo.decode_delegated(vec_u8) + return cls.fix_delegated_list(decoded) + + @classmethod + def delegated_list_from_any( + cls, any_list: list[Any] + ) -> list[tuple["DelegateInfo", Balance]]: + any_list = [munch.munchify(any_) for any_ in any_list] + return cls.fix_delegated_list(any_list) diff --git a/bittensor/core/chain_data/info_base.py b/bittensor/core/chain_data/info_base.py new file mode 100644 index 0000000000..acd4e7c0e5 --- /dev/null +++ b/bittensor/core/chain_data/info_base.py @@ -0,0 +1,27 @@ +from abc import abstractmethod +from dataclasses import dataclass +from typing import Any, TypeVar + +import munch + +T = TypeVar("T", bound="InfoBase") + + +@dataclass +class InfoBase: + """Base dataclass for info objects.""" + + @abstractmethod + def _fix_decoded(self, decoded: Any) -> T: + raise NotImplementedError( + "This is an abstract method and must be implemented in a subclass." + ) + + @classmethod + def from_any(cls, any_: Any) -> T: + any_ = munch.munchify(any_) + return cls._fix_decoded(any_) + + @classmethod + def list_from_any(cls, any_list: list[Any]) -> list[T]: + return [cls.from_any(any_) for any_ in any_list] diff --git a/bittensor/core/chain_data/neuron_info.py b/bittensor/core/chain_data/neuron_info.py index bf27b4d752..8d55637f94 100644 --- a/bittensor/core/chain_data/neuron_info.py +++ b/bittensor/core/chain_data/neuron_info.py @@ -1,10 +1,11 @@ from dataclasses import dataclass -from typing import Optional, TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Optional import bt_decode import netaddr from bittensor.core.chain_data.axon_info import AxonInfo +from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.prometheus_info import PrometheusInfo from bittensor.core.chain_data.utils import decode_account_id, process_stake_data from bittensor.utils import u16_normalized_float @@ -16,7 +17,7 @@ @dataclass -class NeuronInfo: +class NeuronInfo(InfoBase): """Represents the metadata of a neuron including keys, UID, stake, rankings, and other attributes. Attributes: @@ -127,41 +128,40 @@ def get_null_neuron() -> "NeuronInfo": return neuron @classmethod - def from_vec_u8(cls, vec_u8: bytes) -> "NeuronInfo": + def _fix_decoded(cls, decoded: Any) -> "NeuronInfo": """Instantiates NeuronInfo from a byte vector.""" - n = bt_decode.NeuronInfo.decode(bytes(vec_u8)) - stake_dict = process_stake_data(n.stake) + stake_dict = process_stake_data(decoded.stake) total_stake = sum(stake_dict.values()) if stake_dict else Balance(0) - axon_info = n.axon_info - coldkey = decode_account_id(n.coldkey) - hotkey = decode_account_id(n.hotkey) + axon_info = decoded.axon_info + coldkey = decode_account_id(decoded.coldkey) + hotkey = decode_account_id(decoded.hotkey) return NeuronInfo( hotkey=hotkey, coldkey=coldkey, - uid=n.uid, - netuid=n.netuid, - active=n.active, + uid=decoded.uid, + netuid=decoded.netuid, + active=decoded.active, stake=total_stake, stake_dict=stake_dict, total_stake=total_stake, - rank=u16_normalized_float(n.rank), - emission=n.emission / 1e9, - incentive=u16_normalized_float(n.incentive), - consensus=u16_normalized_float(n.consensus), - trust=u16_normalized_float(n.trust), - validator_trust=u16_normalized_float(n.validator_trust), - dividends=u16_normalized_float(n.dividends), - last_update=n.last_update, - validator_permit=n.validator_permit, - weights=[(e[0], e[1]) for e in n.weights], - bonds=[[e[0], e[1]] for e in n.bonds], - pruning_score=n.pruning_score, + rank=u16_normalized_float(decoded.rank), + emission=decoded.emission / 1e9, + incentive=u16_normalized_float(decoded.incentive), + consensus=u16_normalized_float(decoded.consensus), + trust=u16_normalized_float(decoded.trust), + validator_trust=u16_normalized_float(decoded.validator_trust), + dividends=u16_normalized_float(decoded.dividends), + last_update=decoded.last_update, + validator_permit=decoded.validator_permit, + weights=[(e[0], e[1]) for e in decoded.weights], + bonds=[[e[0], e[1]] for e in decoded.bonds], + pruning_score=decoded.pruning_score, prometheus_info=PrometheusInfo( - block=n.prometheus_info.block, - version=n.prometheus_info.version, - ip=str(netaddr.IPAddress(n.prometheus_info.ip)), - port=n.prometheus_info.port, - ip_type=n.prometheus_info.ip_type, + block=decoded.prometheus_info.block, + version=decoded.prometheus_info.version, + ip=str(netaddr.IPAddress(decoded.prometheus_info.ip)), + port=decoded.prometheus_info.port, + ip_type=decoded.prometheus_info.ip_type, ), axon_info=AxonInfo( version=axon_info.version, @@ -181,52 +181,9 @@ def from_vec_u8(cls, vec_u8: bytes) -> "NeuronInfo": def list_from_vec_u8(cls, vec_u8: bytes) -> list["NeuronInfo"]: nn = bt_decode.NeuronInfo.decode_vec(bytes(vec_u8)) - def fix(n): - stake_dict = process_stake_data(n.stake) - total_stake = sum(stake_dict.values()) if stake_dict else Balance(0) - axon_info = n.axon_info - coldkey = decode_account_id(n.coldkey) - hotkey = decode_account_id(n.hotkey) - return NeuronInfo( - hotkey=hotkey, - coldkey=coldkey, - uid=n.uid, - netuid=n.netuid, - active=n.active, - stake=total_stake, - stake_dict=stake_dict, - total_stake=total_stake, - rank=u16_normalized_float(n.rank), - emission=n.emission / 1e9, - incentive=u16_normalized_float(n.incentive), - consensus=u16_normalized_float(n.consensus), - trust=u16_normalized_float(n.trust), - validator_trust=u16_normalized_float(n.validator_trust), - dividends=u16_normalized_float(n.dividends), - last_update=n.last_update, - validator_permit=n.validator_permit, - weights=[(e[0], e[1]) for e in n.weights], - bonds=[[e[0], e[1]] for e in n.bonds], - pruning_score=n.pruning_score, - prometheus_info=PrometheusInfo( - block=n.prometheus_info.block, - version=n.prometheus_info.version, - ip=str(netaddr.IPAddress(n.prometheus_info.ip)), - port=n.prometheus_info.port, - ip_type=n.prometheus_info.ip_type, - ), - axon_info=AxonInfo( - version=axon_info.version, - ip=str(netaddr.IPAddress(axon_info.ip)), - port=axon_info.port, - ip_type=axon_info.ip_type, - placeholder1=axon_info.placeholder1, - placeholder2=axon_info.placeholder2, - protocol=axon_info.protocol, - hotkey=hotkey, - coldkey=coldkey, - ), - is_null=False, - ) - - return [fix(n) for n in nn] + return [cls._fix_decoded(n) for n in nn] + + @classmethod + def from_vec_u8(cls, vec_u8: bytes) -> "NeuronInfo": + n = bt_decode.NeuronInfo.decode(vec_u8) + return cls._fix_decoded(n) diff --git a/bittensor/core/chain_data/neuron_info_lite.py b/bittensor/core/chain_data/neuron_info_lite.py index 48d9ed4ca1..6ef1da1f9e 100644 --- a/bittensor/core/chain_data/neuron_info_lite.py +++ b/bittensor/core/chain_data/neuron_info_lite.py @@ -1,10 +1,11 @@ from dataclasses import dataclass -from typing import Optional +from typing import Any, Optional import bt_decode import netaddr from bittensor.core.chain_data.axon_info import AxonInfo +from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.prometheus_info import PrometheusInfo from bittensor.core.chain_data.utils import decode_account_id, process_stake_data from bittensor.utils import u16_normalized_float @@ -12,7 +13,7 @@ @dataclass -class NeuronInfoLite: +class NeuronInfoLite(InfoBase): """ NeuronInfoLite is a dataclass representing neuron metadata without weights and bonds. @@ -95,6 +96,67 @@ def get_null_neuron() -> "NeuronInfoLite": ) return neuron + @classmethod + def _fix_decoded(cls, decoded: Any) -> "NeuronInfoLite": + active = decoded.active + axon_info = decoded.axon_info + coldkey = decode_account_id(decoded.coldkey) + consensus = decoded.consensus + dividends = decoded.dividends + emission = decoded.emission + hotkey = decode_account_id(decoded.hotkey) + incentive = decoded.incentive + last_update = decoded.last_update + netuid = decoded.netuid + prometheus_info = decoded.prometheus_info + pruning_score = decoded.pruning_score + rank = decoded.rank + stake_dict = process_stake_data(decoded.stake) + stake = sum(stake_dict.values()) if stake_dict else Balance(0) + trust = decoded.trust + uid = decoded.uid + validator_permit = decoded.validator_permit + validator_trust = decoded.validator_trust + + return NeuronInfoLite( + active=active, + axon_info=AxonInfo( + version=axon_info.version, + ip=str(netaddr.IPAddress(axon_info.ip)), + port=axon_info.port, + ip_type=axon_info.ip_type, + placeholder1=axon_info.placeholder1, + placeholder2=axon_info.placeholder2, + protocol=axon_info.protocol, + hotkey=hotkey, + coldkey=coldkey, + ), + coldkey=coldkey, + consensus=u16_normalized_float(consensus), + dividends=u16_normalized_float(dividends), + emission=emission / 1e9, + hotkey=hotkey, + incentive=u16_normalized_float(incentive), + last_update=last_update, + netuid=netuid, + prometheus_info=PrometheusInfo( + version=prometheus_info.version, + ip=str(netaddr.IPAddress(prometheus_info.ip)), + port=prometheus_info.port, + ip_type=prometheus_info.ip_type, + block=prometheus_info.block, + ), + pruning_score=pruning_score, + rank=u16_normalized_float(rank), + stake_dict=stake_dict, + stake=stake, + total_stake=stake, + trust=u16_normalized_float(trust), + uid=uid, + validator_permit=validator_permit, + validator_trust=u16_normalized_float(validator_trust), + ) + @classmethod def list_from_vec_u8(cls, vec_u8: bytes) -> list["NeuronInfoLite"]: """ @@ -107,65 +169,4 @@ def list_from_vec_u8(cls, vec_u8: bytes) -> list["NeuronInfoLite"]: list[NeuronInfoLite]: A list of NeuronInfoLite instances decoded from the provided bytes object. """ decoded = bt_decode.NeuronInfoLite.decode_vec(vec_u8) - results = [] - for item in decoded: - active = item.active - axon_info = item.axon_info - coldkey = decode_account_id(item.coldkey) - consensus = item.consensus - dividends = item.dividends - emission = item.emission - hotkey = decode_account_id(item.hotkey) - incentive = item.incentive - last_update = item.last_update - netuid = item.netuid - prometheus_info = item.prometheus_info - pruning_score = item.pruning_score - rank = item.rank - stake_dict = process_stake_data(item.stake) - stake = sum(stake_dict.values()) if stake_dict else Balance(0) - trust = item.trust - uid = item.uid - validator_permit = item.validator_permit - validator_trust = item.validator_trust - results.append( - NeuronInfoLite( - active=active, - axon_info=AxonInfo( - version=axon_info.version, - ip=str(netaddr.IPAddress(axon_info.ip)), - port=axon_info.port, - ip_type=axon_info.ip_type, - placeholder1=axon_info.placeholder1, - placeholder2=axon_info.placeholder2, - protocol=axon_info.protocol, - hotkey=hotkey, - coldkey=coldkey, - ), - coldkey=coldkey, - consensus=u16_normalized_float(consensus), - dividends=u16_normalized_float(dividends), - emission=emission / 1e9, - hotkey=hotkey, - incentive=u16_normalized_float(incentive), - last_update=last_update, - netuid=netuid, - prometheus_info=PrometheusInfo( - version=prometheus_info.version, - ip=str(netaddr.IPAddress(prometheus_info.ip)), - port=prometheus_info.port, - ip_type=prometheus_info.ip_type, - block=prometheus_info.block, - ), - pruning_score=pruning_score, - rank=u16_normalized_float(rank), - stake_dict=stake_dict, - stake=stake, - total_stake=stake, - trust=u16_normalized_float(trust), - uid=uid, - validator_permit=validator_permit, - validator_trust=u16_normalized_float(validator_trust), - ) - ) - return results + return [cls._fix_decoded(d) for d in decoded] diff --git a/bittensor/core/chain_data/stake_info.py b/bittensor/core/chain_data/stake_info.py index e4a439f56c..bb953d64c4 100644 --- a/bittensor/core/chain_data/stake_info.py +++ b/bittensor/core/chain_data/stake_info.py @@ -1,19 +1,20 @@ from dataclasses import dataclass -from typing import Any, Optional, Union +from typing import Any, Optional +import bt_decode from scalecodec.utils.ss58 import ss58_encode +from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.utils import ( - from_scale_encoding, + decode_account_id, from_scale_encoding_using_type_string, - ChainDataType, ) from bittensor.core.settings import SS58_FORMAT from bittensor.utils.balance import Balance @dataclass -class StakeInfo: +class StakeInfo(InfoBase): """ Dataclass for representing stake information linked to hotkey and coldkey pairs. @@ -47,13 +48,21 @@ def fix_decoded_values(cls, decoded: Any) -> "StakeInfo": is_registered=bool(decoded["is_registered"]), ) + @classmethod + def _fix_decoded(cls, decoded: Any) -> "StakeInfo": + hotkey = decode_account_id(decoded.hotkey) + coldkey = decode_account_id(decoded.coldkey) + stake = Balance.from_rao(decoded.stake) + + return StakeInfo(hotkey, coldkey, stake) + @classmethod def from_vec_u8(cls, vec_u8: list[int]) -> Optional["StakeInfo"]: """Returns a StakeInfo object from a ``vec_u8``.""" if len(vec_u8) == 0: return None - decoded = from_scale_encoding(vec_u8, ChainDataType.StakeInfo) + decoded = bt_decode.StakeInfo.decode(vec_u8) if decoded is None: return None @@ -81,9 +90,9 @@ def list_of_tuple_from_vec_u8( } @classmethod - def list_from_vec_u8(cls, vec_u8: Union[list[int], bytes]) -> list["StakeInfo"]: + def list_from_vec_u8(cls, vec_u8: bytes) -> list["StakeInfo"]: """Returns a list of StakeInfo objects from a ``vec_u8``.""" - decoded = from_scale_encoding(vec_u8, ChainDataType.StakeInfo, is_vec=True) + decoded = bt_decode.StakeInfo.decode_vec(vec_u8) if decoded is None: return [] diff --git a/bittensor/core/chain_data/subnet_hyperparameters.py b/bittensor/core/chain_data/subnet_hyperparameters.py index a8e750d302..a0a9495dc2 100644 --- a/bittensor/core/chain_data/subnet_hyperparameters.py +++ b/bittensor/core/chain_data/subnet_hyperparameters.py @@ -1,11 +1,13 @@ from dataclasses import dataclass -from typing import Optional +from typing import Any, Optional import bt_decode +from bittensor.core.chain_data.info_base import InfoBase + @dataclass -class SubnetHyperparameters: +class SubnetHyperparameters(InfoBase): """ This class represents the hyperparameters for a subnet. @@ -68,7 +70,7 @@ class SubnetHyperparameters: liquid_alpha_enabled: bool @classmethod - def from_vec_u8(cls, vec_u8: bytes) -> Optional["SubnetHyperparameters"]: + def _fix_decoded(cls, decoded: Any) -> "SubnetHyperparameters": """ Create a `SubnetHyperparameters` instance from a vector of bytes. @@ -82,7 +84,6 @@ def from_vec_u8(cls, vec_u8: bytes) -> Optional["SubnetHyperparameters"]: Optional[SubnetHyperparameters]: An instance of `SubnetHyperparameters` if decoding is successful, None otherwise. """ - decoded = bt_decode.SubnetHyperparameters.decode(vec_u8) return SubnetHyperparameters( rho=decoded.rho, kappa=decoded.kappa, @@ -112,3 +113,8 @@ def from_vec_u8(cls, vec_u8: bytes) -> Optional["SubnetHyperparameters"]: alpha_low=decoded.alpha_low, liquid_alpha_enabled=decoded.liquid_alpha_enabled, ) + + @classmethod + def from_vec_u8(cls, vec_u8: bytes) -> Optional["SubnetHyperparameters"]: + decoded = bt_decode.SubnetHyperparameters.decode(vec_u8) + return cls._fix_decoded(decoded) diff --git a/bittensor/core/chain_data/subnet_info.py b/bittensor/core/chain_data/subnet_info.py index 4169746a08..4e37716a5d 100644 --- a/bittensor/core/chain_data/subnet_info.py +++ b/bittensor/core/chain_data/subnet_info.py @@ -1,14 +1,16 @@ from dataclasses import dataclass +from typing import Any import bt_decode +from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.utils import decode_account_id from bittensor.utils import u16_normalized_float from bittensor.utils.balance import Balance @dataclass -class SubnetInfo: +class SubnetInfo(InfoBase): """Dataclass for subnet info.""" netuid: int @@ -30,34 +32,33 @@ class SubnetInfo: burn: Balance owner_ss58: str + @classmethod + def _fix_decoded(cls, decoded: Any) -> "SubnetInfo": + return SubnetInfo( + netuid=decoded.netuid, + rho=decoded.rho, + kappa=decoded.kappa, + difficulty=decoded.difficulty, + immunity_period=decoded.immunity_period, + max_allowed_validators=decoded.max_allowed_validators, + min_allowed_weights=decoded.min_allowed_weights, + max_weight_limit=decoded.max_weights_limit, + scaling_law_power=decoded.scaling_law_power, + subnetwork_n=decoded.subnetwork_n, + max_n=decoded.max_allowed_uids, + blocks_since_epoch=decoded.blocks_since_last_step, + tempo=decoded.tempo, + modality=decoded.network_modality, + connection_requirements={ + str(int(netuid)): u16_normalized_float(int(req)) + for (netuid, req) in decoded.network_connect + }, + emission_value=decoded.emission_values, + burn=Balance.from_rao(decoded.burn), + owner_ss58=decode_account_id(decoded.owner), + ) + @classmethod def list_from_vec_u8(cls, vec_u8: bytes) -> list["SubnetInfo"]: decoded = bt_decode.SubnetInfo.decode_vec_option(vec_u8) - result = [] - for d in decoded: - result.append( - SubnetInfo( - netuid=d.netuid, - rho=d.rho, - kappa=d.kappa, - difficulty=d.difficulty, - immunity_period=d.immunity_period, - max_allowed_validators=d.max_allowed_validators, - min_allowed_weights=d.min_allowed_weights, - max_weight_limit=d.max_weights_limit, - scaling_law_power=d.scaling_law_power, - subnetwork_n=d.subnetwork_n, - max_n=d.max_allowed_uids, - blocks_since_epoch=d.blocks_since_last_step, - tempo=d.tempo, - modality=d.network_modality, - connection_requirements={ - str(int(netuid)): u16_normalized_float(int(req)) - for (netuid, req) in d.network_connect - }, - emission_value=d.emission_values, - burn=Balance.from_rao(d.burn), - owner_ss58=decode_account_id(d.owner), - ) - ) - return result + return [cls._fix_decoded(d) for d in decoded] diff --git a/bittensor/core/chain_data/utils.py b/bittensor/core/chain_data/utils.py index c8b079c1fd..0c78514693 100644 --- a/bittensor/core/chain_data/utils.py +++ b/bittensor/core/chain_data/utils.py @@ -101,90 +101,6 @@ def from_scale_encoding_using_type_string( custom_rpc_type_registry = { "types": { - "SubnetInfo": { - "type": "struct", - "type_mapping": [ - ["netuid", "Compact"], - ["rho", "Compact"], - ["kappa", "Compact"], - ["difficulty", "Compact"], - ["immunity_period", "Compact"], - ["max_allowed_validators", "Compact"], - ["min_allowed_weights", "Compact"], - ["max_weights_limit", "Compact"], - ["scaling_law_power", "Compact"], - ["subnetwork_n", "Compact"], - ["max_allowed_uids", "Compact"], - ["blocks_since_last_step", "Compact"], - ["tempo", "Compact"], - ["network_modality", "Compact"], - ["network_connect", "Vec<[u16; 2]>"], - ["emission_values", "Compact"], - ["burn", "Compact"], - ["owner", "AccountId"], - ], - }, - "DelegateInfo": { - "type": "struct", - "type_mapping": [ - ["delegate_ss58", "AccountId"], - ["take", "Compact"], - ["nominators", "Vec<(AccountId, Compact)>"], - ["owner_ss58", "AccountId"], - ["registrations", "Vec>"], - ["validator_permits", "Vec>"], - ["return_per_1000", "Compact"], - ["total_daily_return", "Compact"], - ], - }, - "NeuronInfo": { - "type": "struct", - "type_mapping": [ - ["hotkey", "AccountId"], - ["coldkey", "AccountId"], - ["uid", "Compact"], - ["netuid", "Compact"], - ["active", "bool"], - ["axon_info", "axon_info"], - ["prometheus_info", "PrometheusInfo"], - ["stake", "Vec<(AccountId, Compact)>"], - ["rank", "Compact"], - ["emission", "Compact"], - ["incentive", "Compact"], - ["consensus", "Compact"], - ["trust", "Compact"], - ["validator_trust", "Compact"], - ["dividends", "Compact"], - ["last_update", "Compact"], - ["validator_permit", "bool"], - ["weights", "Vec<(Compact, Compact)>"], - ["bonds", "Vec<(Compact, Compact)>"], - ["pruning_score", "Compact"], - ], - }, - "NeuronInfoLite": { - "type": "struct", - "type_mapping": [ - ["hotkey", "AccountId"], - ["coldkey", "AccountId"], - ["uid", "Compact"], - ["netuid", "Compact"], - ["active", "bool"], - ["axon_info", "axon_info"], - ["prometheus_info", "PrometheusInfo"], - ["stake", "Vec<(AccountId, Compact)>"], - ["rank", "Compact"], - ["emission", "Compact"], - ["incentive", "Compact"], - ["consensus", "Compact"], - ["trust", "Compact"], - ["validator_trust", "Compact"], - ["dividends", "Compact"], - ["last_update", "Compact"], - ["validator_permit", "bool"], - ["pruning_score", "Compact"], - ], - }, "NeuronCertificate": { "type": "struct", "type_mapping": [ @@ -257,38 +173,6 @@ def from_scale_encoding_using_type_string( ["is_registered", "bool"], ], }, - "SubnetHyperparameters": { - "type": "struct", - "type_mapping": [ - ["rho", "Compact"], - ["kappa", "Compact"], - ["immunity_period", "Compact"], - ["min_allowed_weights", "Compact"], - ["max_weights_limit", "Compact"], - ["tempo", "Compact"], - ["min_difficulty", "Compact"], - ["max_difficulty", "Compact"], - ["weights_version", "Compact"], - ["weights_rate_limit", "Compact"], - ["adjustment_interval", "Compact"], - ["activity_cutoff", "Compact"], - ["registration_allowed", "bool"], - ["target_regs_per_interval", "Compact"], - ["min_burn", "Compact"], - ["max_burn", "Compact"], - ["bonds_moving_avg", "Compact"], - ["max_regs_per_block", "Compact"], - ["serving_rate_limit", "Compact"], - ["max_validators", "Compact"], - ["adjustment_alpha", "Compact"], - ["difficulty", "Compact"], - ["commit_reveal_weights_interval", "Compact"], - ["commit_reveal_weights_enabled", "bool"], - ["alpha_high", "Compact"], - ["alpha_low", "Compact"], - ["liquid_alpha_enabled", "bool"], - ], - }, "ScheduledColdkeySwapInfo": { "type": "struct", "type_mapping": [ @@ -442,6 +326,9 @@ def decode_account_id(account_id_bytes: Union[bytes, str]) -> str: Returns: str: The decoded AccountId as a Base64 string. """ + if isinstance(account_id_bytes, tuple) and isinstance(account_id_bytes[0], tuple): + account_id_bytes = account_id_bytes[0] + # Convert the AccountId bytes to a Base64 string return ss58_encode(bytes(account_id_bytes).hex(), SS58_FORMAT) diff --git a/bittensor/core/settings.py b/bittensor/core/settings.py index 2853886df2..8846b746ea 100644 --- a/bittensor/core/settings.py +++ b/bittensor/core/settings.py @@ -89,190 +89,6 @@ "types": { "Balance": "u64", # Need to override default u128 }, - "runtime_api": { - "DelegateInfoRuntimeApi": { - "methods": { - "get_delegated": { - "params": [ - { - "name": "coldkey", - "type": "Vec", - }, - ], - "type": "Vec", - }, - "get_delegates": { - "params": [], - "type": "Vec", - }, - } - }, - "NeuronInfoRuntimeApi": { - "methods": { - "get_neuron_lite": { - "params": [ - { - "name": "netuid", - "type": "u16", - }, - { - "name": "uid", - "type": "u16", - }, - ], - "type": "Vec", - }, - "get_neurons_lite": { - "params": [ - { - "name": "netuid", - "type": "u16", - }, - ], - "type": "Vec", - }, - "get_neuron": { - "params": [ - { - "name": "netuid", - "type": "u16", - }, - { - "name": "uid", - "type": "u16", - }, - ], - "type": "Vec", - }, - "get_neurons": { - "params": [ - { - "name": "netuid", - "type": "u16", - }, - ], - "type": "Vec", - }, - } - }, - "StakeInfoRuntimeApi": { - "methods": { - "get_stake_info_for_coldkey": { - "params": [ - { - "name": "coldkey_account_vec", - "type": "Vec", - }, - ], - "type": "Vec", - }, - "get_stake_info_for_coldkeys": { - "params": [ - { - "name": "coldkey_account_vecs", - "type": "Vec>", - }, - ], - "type": "Vec", - }, - }, - }, - "ValidatorIPRuntimeApi": { - "methods": { - "get_associated_validator_ip_info_for_subnet": { - "params": [ - { - "name": "netuid", - "type": "u16", - }, - ], - "type": "Vec", - }, - }, - }, - "SubnetInfoRuntimeApi": { - "methods": { - "get_subnet_hyperparams": { - "params": [ - { - "name": "netuid", - "type": "u16", - }, - ], - "type": "Vec", - }, - "get_subnet_info": { - "params": [ - { - "name": "netuid", - "type": "u16", - }, - ], - "type": "Vec", - }, - "get_subnets_info": { - "params": [], - "type": "Vec", - }, - "get_subnet_state": { - "params": [ - {"name": "netuid", "type": "u16"}, - ], - "type": "Vec", - }, - "get_all_dynamic_info": { - "params": [], - "type": "Vec", - }, - "get_dynamic_info": { - "params": [{"name": "netuid", "type": "u16"}], - "type": "Vec", - }, - "get_metagraph": { - "params": [{"name": "netuid", "type": "u16"}], - "type": "Vec", - }, - "get_all_metagraphs": { - "params": [], - "type": "Vec", - }, - } - }, - "SubnetRegistrationRuntimeApi": { - "methods": {"get_network_registration_cost": {"params": [], "type": "u64"}} - }, - "ColdkeySwapRuntimeApi": { - "methods": { - "get_scheduled_coldkey_swap": { - "params": [ - { - "name": "coldkey_account_vec", - "type": "Vec", - }, - ], - "type": "Vec", - }, - "get_remaining_arbitration_period": { - "params": [ - { - "name": "coldkey_account_vec", - "type": "Vec", - }, - ], - "type": "Vec", - }, - "get_coldkey_swap_destinations": { - "params": [ - { - "name": "coldkey_account_vec", - "type": "Vec", - }, - ], - "type": "Vec", - }, - } - }, - }, } diff --git a/bittensor/core/subtensor.py b/bittensor/core/subtensor.py index a03e811f98..d1369c5a6a 100644 --- a/bittensor/core/subtensor.py +++ b/bittensor/core/subtensor.py @@ -9,13 +9,10 @@ from async_substrate_interface.sync_substrate import SubstrateInterface from async_substrate_interface.utils import hex_to_bytes, json from numpy.typing import NDArray -from scalecodec.base import RuntimeConfiguration -from scalecodec.type_registry import load_type_registry_preset from bittensor.core.async_subtensor import ProposalVoteData from bittensor.core.axon import Axon from bittensor.core.chain_data import ( - custom_rpc_type_registry, decode_account_id, MetagraphInfo, WeightCommitInfo, @@ -73,7 +70,6 @@ from bittensor.utils import ( torch, format_error_message, - ss58_to_vec_u8, decode_hex_identity_dict, u16_normalized_float, _decode_hex_identity_dict, @@ -272,7 +268,7 @@ def query_runtime_api( method: str, params: Optional[Union[list[list[int]], dict[str, int], list[int]]] = None, block: Optional[int] = None, - ) -> Optional[str]: + ) -> Any: """ Queries the runtime API of the Bittensor blockchain, providing a way to interact with the underlying runtime and retrieve data encoded in Scale Bytes format. This function is essential for advanced users who need to @@ -290,39 +286,12 @@ def query_runtime_api( This function enables access to the deeper layers of the Bittensor blockchain, allowing for detailed and specific interactions with the network's runtime environment. """ - # TODO why doesn't this just use SubstrateInterface.runtime_call ? block_hash = self.determine_block_hash(block) - - call_definition = TYPE_REGISTRY["runtime_api"][runtime_api]["methods"][method] - - data = ( - "0x" - if params is None - else self.encode_params(call_definition=call_definition, params=params) + result = self.substrate.runtime_call( + runtime_api, method, params, block_hash ) - api_method = f"{runtime_api}_{method}" - json_result = self.substrate.rpc_request( - method="state_call", - params=[api_method, data, block_hash] if block_hash else [api_method, data], - ) - - if json_result is None: - return None - - return_type = call_definition["type"] - - as_scale_bytes = scalecodec.ScaleBytes(json_result["result"]) # type: ignore - - rpc_runtime_config = RuntimeConfiguration() - rpc_runtime_config.update_type_registry(load_type_registry_preset("legacy")) - rpc_runtime_config.update_type_registry(custom_rpc_type_registry) - - obj = rpc_runtime_config.create_scale_object(return_type, as_scale_bytes) - if obj.data.to_hex() == "0x0400": # RPC returned None result - return None - - return obj.decode() + return result.value def query_subtensor( self, name: str, block: Optional[int] = None, params: Optional[list] = None @@ -547,13 +516,16 @@ def get_all_subnets_info(self, block: Optional[int] = None) -> list["SubnetInfo" Gaining insights into the subnets' details assists in understanding the network's composition, the roles of different subnets, and their unique features. """ - hex_bytes_result = self.query_runtime_api( - "SubnetInfoRuntimeApi", "get_subnets_info", params=[], block=block + result = self.query_runtime_api( + runtime_api="SubnetInfoRuntimeApi", + method="get_subnets_info", + params=[], + block=block, ) - if not hex_bytes_result: + if not result: return [] else: - return SubnetInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + return SubnetInfo.list_from_any(result) def get_balance(self, address: str, block: Optional[int] = None) -> Balance: """ @@ -807,18 +779,17 @@ def get_delegate_by_hotkey( network's consensus and governance structures. """ - block_hash = self.determine_block_hash(block) - encoded_hotkey = ss58_to_vec_u8(hotkey_ss58) - - json_body = self.substrate.rpc_request( - method="delegateInfo_getDelegate", # custom rpc method - params=([encoded_hotkey, block_hash] if block_hash else [encoded_hotkey]), + result = self.query_runtime_api( + runtime_api="DelegateInfoRuntimeApi", + method="get_delegate", + params=[hotkey_ss58], + block=block, ) - if not (result := json_body.get("result", None)): + if not result: return None - return DelegateInfo.from_vec_u8(bytes(result)) + return DelegateInfo.from_any(result) def get_delegate_identities( self, block: Optional[int] = None @@ -925,17 +896,17 @@ def get_delegated( the network's delegation and consensus mechanisms. """ - block_hash = self.determine_block_hash(block) - encoded_coldkey = ss58_to_vec_u8(coldkey_ss58) - json_body = self.substrate.rpc_request( - method="delegateInfo_getDelegated", - params=([block_hash, encoded_coldkey] if block_hash else [encoded_coldkey]), + result = self.query_runtime_api( + runtime_api="DelegateInfoRuntimeApi", + method="get_delegated", + params=[coldkey_ss58], + block=block, ) - if not (result := json_body.get("result")): + if not result: return [] - return DelegateInfo.delegated_list_from_vec_u8(bytes(result)) + return DelegateInfo.delegated_list_from_any(result) def get_delegates(self, block: Optional[int] = None) -> list["DelegateInfo"]: """ @@ -947,14 +918,14 @@ def get_delegates(self, block: Optional[int] = None) -> list["DelegateInfo"]: Returns: List of DelegateInfo objects, or an empty list if there are no delegates. """ - hex_bytes_result = self.query_runtime_api( + result = self.query_runtime_api( runtime_api="DelegateInfoRuntimeApi", method="get_delegates", params=[], block=block, ) - if hex_bytes_result: - return DelegateInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + if result: + return DelegateInfo.list_from_any(result) else: return [] @@ -1146,15 +1117,17 @@ def get_neuron_for_pubkey_and_subnet( if uid is None: return NeuronInfo.get_null_neuron() - params = [netuid, uid.value] - json_body = self.substrate.rpc_request( - method="neuronInfo_getNeuron", params=params, block_hash=block_hash + result = self.query_runtime_api( + runtime_api="NeuronInfoRuntimeApi", + method="get_neuron", + params=[netuid, uid.value], + block=block, ) - if not (result := json_body.get("result", None)): + if not result: return NeuronInfo.get_null_neuron() - return NeuronInfo.from_vec_u8(bytes(result)) + return NeuronInfo.from_any(result) def get_stake( self, @@ -1251,19 +1224,17 @@ def get_stake_info_for_coldkey( Stake information is vital for account holders to assess their investment and participation in the network's delegation and consensus processes. """ - encoded_coldkey = ss58_to_vec_u8(coldkey_ss58) - - hex_bytes_result = self.query_runtime_api( + result = self.query_runtime_api( runtime_api="StakeInfoRuntimeApi", method="get_stake_info_for_coldkey", - params=[encoded_coldkey], + params=[coldkey_ss58], block=block, ) - if not hex_bytes_result: + if not result: return [] - return StakeInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + return StakeInfo.list_from_any(result) def get_subnet_burn_cost(self, block: Optional[int] = None) -> Optional[str]: """ @@ -1305,17 +1276,17 @@ def get_subnet_hyperparameters( Understanding the hyperparameters is crucial for comprehending how subnets are configured and managed, and how they interact with the network's consensus and incentive mechanisms. """ - hex_bytes_result = self.query_runtime_api( + result = self.query_runtime_api( runtime_api="SubnetInfoRuntimeApi", method="get_subnet_hyperparams", params=[netuid], block=block, ) - if not hex_bytes_result: + if not result: return None - return SubnetHyperparameters.from_vec_u8(hex_to_bytes(hex_bytes_result)) + return SubnetHyperparameters.from_any(result) def get_subnet_reveal_period_epochs( self, netuid: int, block: Optional[int] = None @@ -1815,18 +1786,17 @@ def neuron_for_uid( if uid is None: return NeuronInfo.get_null_neuron() - block_hash = self.determine_block_hash(block) - - params = [netuid, uid, block_hash] if block_hash else [netuid, uid] - json_body = self.substrate.rpc_request( - method="neuronInfo_getNeuron", # custom rpc method - params=params, + result = self.query_runtime_api( + runtime_api="NeuronInfoRuntimeApi", + method="get_neuron", + params=[netuid, uid], + block=block, ) - if not (result := json_body.get("result", None)): + + if not result: return NeuronInfo.get_null_neuron() - bytes_result = bytes(result) - return NeuronInfo.from_vec_u8(bytes_result) + return NeuronInfo.from_any(result) def neurons(self, netuid: int, block: Optional[int] = None) -> list["NeuronInfo"]: """ @@ -1844,17 +1814,17 @@ def neurons(self, netuid: int, block: Optional[int] = None) -> list["NeuronInfo" Understanding the distribution and status of neurons within a subnet is key to comprehending the network's decentralized structure and the dynamics of its consensus and governance processes. """ - hex_bytes_result = self.query_runtime_api( + result = self.query_runtime_api( runtime_api="NeuronInfoRuntimeApi", method="get_neurons", params=[netuid], block=block, ) - if not hex_bytes_result: + if not result: return [] - return NeuronInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + return NeuronInfo.list_from_any(result) def neurons_lite( self, netuid: int, block: Optional[int] = None @@ -1874,17 +1844,17 @@ def neurons_lite( This function offers a quick overview of the neuron population within a subnet, facilitating efficient analysis of the network's decentralized structure and neuron dynamics. """ - hex_bytes_result = self.query_runtime_api( + result = self.query_runtime_api( runtime_api="NeuronInfoRuntimeApi", method="get_neurons_lite", params=[netuid], block=block, ) - if not hex_bytes_result: + if not result: return [] - return NeuronInfoLite.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) + return NeuronInfoLite.list_from_any(result) def query_identity(self, key: str, block: Optional[int] = None) -> dict: """ diff --git a/tests/helpers/integration_websocket_data.py b/tests/helpers/integration_websocket_data.py index 1427a3285e..d79a4dab01 100644 --- a/tests/helpers/integration_websocket_data.py +++ b/tests/helpers/integration_websocket_data.py @@ -43,191 +43,6 @@ }, }, }, - "rpc_methods": { - "[]": { - "jsonrpc": "2.0", - "result": { - "methods": [ - "account_nextIndex", - "archive_unstable_body", - "archive_unstable_call", - "archive_unstable_finalizedHeight", - "archive_unstable_genesisHash", - "archive_unstable_hashByHeight", - "archive_unstable_header", - "archive_unstable_storage", - "author_hasKey", - "author_hasSessionKeys", - "author_insertKey", - "author_pendingExtrinsics", - "author_removeExtrinsic", - "author_rotateKeys", - "author_submitAndWatchExtrinsic", - "author_submitExtrinsic", - "author_unwatchExtrinsic", - "chainHead_v1_body", - "chainHead_v1_call", - "chainHead_v1_continue", - "chainHead_v1_follow", - "chainHead_v1_header", - "chainHead_v1_stopOperation", - "chainHead_v1_storage", - "chainHead_v1_unfollow", - "chainHead_v1_unpin", - "chainSpec_v1_chainName", - "chainSpec_v1_genesisHash", - "chainSpec_v1_properties", - "chain_getBlock", - "chain_getBlockHash", - "chain_getFinalisedHead", - "chain_getFinalizedHead", - "chain_getHead", - "chain_getHeader", - "chain_getRuntimeVersion", - "chain_subscribeAllHeads", - "chain_subscribeFinalisedHeads", - "chain_subscribeFinalizedHeads", - "chain_subscribeNewHead", - "chain_subscribeNewHeads", - "chain_subscribeRuntimeVersion", - "chain_unsubscribeAllHeads", - "chain_unsubscribeFinalisedHeads", - "chain_unsubscribeFinalizedHeads", - "chain_unsubscribeNewHead", - "chain_unsubscribeNewHeads", - "chain_unsubscribeRuntimeVersion", - "childstate_getKeys", - "childstate_getKeysPaged", - "childstate_getKeysPagedAt", - "childstate_getStorage", - "childstate_getStorageEntries", - "childstate_getStorageHash", - "childstate_getStorageSize", - "debug_getBadBlocks", - "debug_getRawBlock", - "debug_getRawHeader", - "debug_getRawReceipts", - "debug_getRawTransaction", - "delegateInfo_getDelegate", - "delegateInfo_getDelegated", - "delegateInfo_getDelegates", - "eth_accounts", - "eth_blockNumber", - "eth_call", - "eth_chainId", - "eth_coinbase", - "eth_estimateGas", - "eth_feeHistory", - "eth_gasPrice", - "eth_getBalance", - "eth_getBlockByHash", - "eth_getBlockByNumber", - "eth_getBlockReceipts", - "eth_getBlockTransactionCountByHash", - "eth_getBlockTransactionCountByNumber", - "eth_getCode", - "eth_getFilterChanges", - "eth_getFilterLogs", - "eth_getLogs", - "eth_getStorageAt", - "eth_getTransactionByBlockHashAndIndex", - "eth_getTransactionByBlockNumberAndIndex", - "eth_getTransactionByHash", - "eth_getTransactionCount", - "eth_getTransactionReceipt", - "eth_getUncleByBlockHashAndIndex", - "eth_getUncleByBlockNumberAndIndex", - "eth_getUncleCountByBlockHash", - "eth_getUncleCountByBlockNumber", - "eth_getWork", - "eth_hashrate", - "eth_maxPriorityFeePerGas", - "eth_mining", - "eth_newBlockFilter", - "eth_newFilter", - "eth_newPendingTransactionFilter", - "eth_protocolVersion", - "eth_sendRawTransaction", - "eth_sendTransaction", - "eth_submitHashrate", - "eth_submitWork", - "eth_subscribe", - "eth_syncing", - "eth_uninstallFilter", - "eth_unsubscribe", - "net_listening", - "net_peerCount", - "net_version", - "neuronInfo_getNeuron", - "neuronInfo_getNeuronLite", - "neuronInfo_getNeurons", - "neuronInfo_getNeuronsLite", - "offchain_localStorageGet", - "offchain_localStorageSet", - "payment_queryFeeDetails", - "payment_queryInfo", - "rpc_methods", - "state_call", - "state_callAt", - "state_getChildReadProof", - "state_getKeys", - "state_getKeysPaged", - "state_getKeysPagedAt", - "state_getMetadata", - "state_getPairs", - "state_getReadProof", - "state_getRuntimeVersion", - "state_getStorage", - "state_getStorageAt", - "state_getStorageHash", - "state_getStorageHashAt", - "state_getStorageSize", - "state_getStorageSizeAt", - "state_queryStorage", - "state_queryStorageAt", - "state_subscribeRuntimeVersion", - "state_subscribeStorage", - "state_traceBlock", - "state_unsubscribeRuntimeVersion", - "state_unsubscribeStorage", - "subnetInfo_getLockCost", - "subnetInfo_getSubnetHyperparams", - "subnetInfo_getSubnetInfo", - "subnetInfo_getSubnetInfo_v2", - "subnetInfo_getSubnetsInf_v2", - "subnetInfo_getSubnetsInfo", - "subscribe_newHead", - "system_accountNextIndex", - "system_addLogFilter", - "system_addReservedPeer", - "system_chain", - "system_chainType", - "system_dryRun", - "system_dryRunAt", - "system_health", - "system_localListenAddresses", - "system_localPeerId", - "system_name", - "system_nodeRoles", - "system_peers", - "system_properties", - "system_removeReservedPeer", - "system_reservedPeers", - "system_resetLogFilter", - "system_syncState", - "system_unstable_networkState", - "system_version", - "transactionWatch_v1_submitAndWatch", - "transactionWatch_v1_unwatch", - "transaction_v1_broadcast", - "transaction_v1_stop", - "unsubscribe_newHead", - "web3_clientVersion", - "web3_sha3", - ] - }, - } - }, "state_getRuntimeVersion": { '["0x119e135f8ae6eac1f3fc47fc14838afcfdbee13e8dba14657ae150f4d56f6df2"]': { "jsonrpc": "2.0", @@ -264,16 +79,15 @@ } }, "state_getStorageAt": { - '["0x658faa385070e074c85bf6b568cf05550e30450fc4d507a846032a7fa65d9a431700", null]': { + '["0x658faa385070e074c85bf6b568cf05550e30450fc4d507a846032a7fa65d9a430100", null]': { "jsonrpc": "2.0", "result": "0x01", }, - '["0x658faa385070e074c85bf6b568cf0555696e262a16e52255a69d8acd793541461700", null]': { + '["0x658faa385070e074c85bf6b568cf0555696e262a16e52255a69d8acd793541460100", null]': { "jsonrpc": "2.0", - "result": "0x4ce0d61400000000000eeb150000000000c89016000000000051b6190000000000d6e71b00000000001b111e0000000000525d1e0000000000083a2200000000000e3a220000000000bb702200000000009ecc310000000000cb41240000000000dc41240000000000eb4124000000000051222500000000005563280000000000f4552b000000000052562b0000000000fb372d0000000000", + "result": "0x04a800000000000000", }, }, - "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, }, "bonds": { "chain_getHead": { @@ -898,62 +712,136 @@ "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, }, "get_all_subnets_info": { - "state_call": { - '["SubnetInfoRuntimeApi_get_subnets_info", "0x"]': { - "jsonrpc": "2.0", - "result": "0x760d0100dd03010028feff0100025a62020140010200feff0300c80102010200040000310202286bee0000000000000000000000000000000000000000000000000000000000000000010428feff01000000010204feff0300c87901010404500000893902286beed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d010828feff0100025a62020001020110a10fc87c0104090ea10f00000e93104702286beed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d010c28feff010013ffffffffffffffff214e010104feff0300c8010401049905a10500005d1e04aa29477c7ad9689f38bdcf6e0a52b67346e09d3a132677fd654c58f4fb569143011028feff0100025a6202817001020110a10fc86c0104110ea10f00000002286beed2b77364d1c3b445cd69bd59f1a87dcb26c9ce3f46437d55b88b43f1c177e776011428feff0100025a62020001020110a10fc8500104150ea10f00000002286bee545734b760233cff9db36ae17ec01cd00639209af337d818eb5ff60995347b1b011828feff0100025a62020001020110a10fc8340104190ea10f00000002286bee545734b760233cff9db36ae17ec01cd00639209af337d818eb5ff60995347b1b011c28feff0100025a62020001020110a10fc81c01041d0ea10f00000002286bee545734b760233cff9db36ae17ec01cd00639209af337d818eb5ff60995347b1b012028feff0100025a6202214e010204feff0300c859020104b891010000a9a804f88542cc87224bf8cd4aabf49dd06f89c6032f6a6b15c86b5c3293d492bcc276012428feff0100025a6202214e01020101fd07c8340104250ea10f00004c0460101454e0638a1e1aaae8859324b47b86e70d137eae8a2ffb29dbc7efc58b57012828feff0100025a6202214e010104feff0300c8480104290ea10f00000004cabf3601a75fdb45d95cfdeec3ee4779eb37e9ec982aa7632dfbddd4a607fd34012c28feff010013ffffffffffffffff214e0c04feff0300c86c010414a105000000049eded74323104f9ce9cb6b07d4ad1095fca84700a910637effd43060dba23a6e013028feff010013ffffffffffffffff214e010104feff0300c86d01010418a105000000044cafab2196e7acade8ded4c4ffa483a6fbc83b1f211e2a555f05e74c782d7f41013428feff010013ffffffffffffffff214e010104feff0300c8b801041ca10500000004784d6f92a188c629a89e1f9dff61988361b5ae4455fea456f32dbc7f2c2c4814013828feff010013ffffffffffffffff214e010104feff0300c848010420a105000000049c15f9024e0f7d6e0fd1797c1ab35b3a619f0dbffd45c27e8fe332168c7a0b76013c28feff010013ffffffffffffffff214e010104feff0300c80104010424a1050000a675010004ce461b7b509fe67688b9e217849c8dbb6a45c00bcf3b77698f90288a34dab25a014028feff010013ffffffffffffffff214e010104feff0300c820010428a10500000004aa72a3f3be29d530b858b98bf207763bf60cccecd18f343e3428dacb8d848a1e014428feff010013ffffffffffffffff214e010104feff0300c81801042ca10500000004aa72a3f3be29d530b858b98bf207763bf60cccecd18f343e3428dacb8d848a1e014828feff010013ffffffffffffffff214e010104feff0300c8e4010430a1050000ae55010004fa19f3c1916abb9c8fe3b15ce5d36e9941f40b00c2b2e5aee38463e8e8444c51014c28feff010013ffffffffffffffff214e010104feff0300c868010434a105000000042c1f081c25cfab215fe7f6d785208a70f5d5de9b78441cd6837ce0fa5af48403015028feff010013ffffffffffffffff214e010104feff0300c860010438a1050000000460165e8d9e5dbc5784efb3996b4decd66adb05f1c295113f30077925b6e16e7e015428feff010013ffffffffffffffff214e0c04feff0300c85801043ca105000000042e09742a7fcdec892fe7e484ade70ce31a2362103bf683c69f6755c8cd890c61015828feff0100419c8170010104feff0300c801040104590ea10f00005a63100002093d00cabf3601a75fdb45d95cfdeec3ee4779eb37e9ec982aa7632dfbddd4a607fd34015c28feff0100025a6202214e010104feff0300c84c01045d0ea10f00000004f6146686eaae2f2fe1b2802f86666265785305aaee08f10a26e2018020bf6902016028feff0100025a6202214e010104feff0300c8c5010104610ea10f000015010400e258276eebf75010a79b2d97b47ff77ce9d5eed1e45d27a165b3f85f604b00016428feff010013ffffffffffffffff214e010104feff0300c8610201044ca10500000c0452baa947bcfd423ba837a805ccc0f6f846933fb0e9aa30bb317adfae43dee00b016828feff010013ffffffffffffffff214e010104feff0300c820010450a10500000004f6146686eaae2f2fe1b2802f86666265785305aaee08f10a26e2018020bf6902016c28feff010013ffffffffffffffff214e010104feff0300c8ac010454a1050000000452baa947bcfd423ba837a805ccc0f6f846933fb0e9aa30bb317adfae43dee00b017028feff010013ffffffffffffffff214e010104feff0300c8d0010458a10500000004f283651894ca4ae7ef252a850cdff364636c90db22c4df2a8e52d5ec0d8b4305017428feff010013ffffffffffffffff214e010104feff0300c82401045ca10500000004f2e6a87d26c36ed8b52703410891c9bdda5659918e115e9701339df6744b1047017828feff010013ffffffffffffffff214e010104feff0300c82c010460a10500000004c47fa889cc99165e57e1311d8631281a9c7d25c969d81597436ea9b79d15cc02017c28feff010013ffffffffffffffff214e010104feff0300c84101010464a10500000004c47fa889cc99165e57e1311d8631281a9c7d25c969d81597436ea9b79d15cc02018028feff010013ffffffffffffffff214e010104feff0300c8f901010468a105000056b1ad0d043c3093ce8800882069e5dd77d99ed634731f84498bba383757ecf30cb794ca5a018428feff010013ffffffffffffffff214e010104feff0300c83401046ca10500000004ae52013cb556e37df85553e8cd090c5c0ee25d05e1f22fde2899993d13332d33018828feff010013ffffffffffffffff214e010104feff0300c8dc010470a105000000044e0b2aaafc29f2393261b9aecb4e934658d871c0cd0e03b2a9bb8b510478613a018c28feff010013ffffffffffffffff214e010104feff0300c814010474a10500000004e44900413c6497d9fd0935d39789a74c693d8132f7c30c4df47eb1bedffa5c48019028feff010013ffffffffffffffff214e010104feff0300c818010478a1050000650304bc736a93c0cc60ba45e4aa656309e86ba7db12ff9d17fb0fb959e0edc677af1a019428feff010013ffffffffffffffff214e010104feff0300c84c01047ca10500000004cabf3601a75fdb45d95cfdeec3ee4779eb37e9ec982aa7632dfbddd4a607fd34019828feff010013ffffffffffffffff214e010104feff0300c83502010480a105000041130400cf02147e8f297c3379cc2891cf2bec1d771050a99244d7f4a08b9b34ec112a019c28feff010013ffffffffffffffff214e010104feff0300c864010484a1050000000432ef3983ef112af1081ad1ed96c4e9ba1d8d0e09664ae0d43e337b5ed89dc46301a028feff010013ffffffffffffffff214e010104feff0300c890010488a1050000000462981343120d52859357e1ce44559c70dfc80af594e4b5cabfb877029c67fe5501a428feff010013ffffffffffffffff214e010104feff0300c8a801048ca10500000004382b0c4b1b74314d201b6236f4d8c5a0974eae7940b3365a262ff95d207e421f01a828feff010013ffffffffffffffff214e010104feff0300c854010490a10500000004f8d6d28d7987616966fd863f97facac92c5f15398cfe11e09718960faebf073701ac28feff010013ffffffffffffffff214e010104feff0300c81c010494a105000000044650f668dacc57530a916dcffd6e48f6bfb3455bca892011cb4ead9e28496b4d01b028feff010013ffffffffffffffff214e010104feff0300c824010498a105000000049cd9caf4886a26f3c4d6e090ef7c637f80a42a88fee38a9d356cfa53020da53b01b428feff010013ffffffffffffffff214e010104feff0300c81001049ca1050000000472c37bdba84a4d5addec7974683b1aede7e6132af5031b1b7a5c560663e4216601b828feff010013ffffffffffffffff214e010104feff0300c8080104a0a105000000049867c7af9c5242c73b06e306ec6c22474ec5fa20f3b3d8b23652b3edcf48e35e01bc28feff010013ffffffffffffffff214e010104feff0300c87c0104a4a10500000004f62982f69cd326757775461ea8999554d3b784798ed09a73657d9a1c7685c70e01c028feff010013ffffffffffffffff214e010104feff0300c8080104a8a10500000004066029174005cab99602769451ef7b3b522981953a5f92b1c173bec13049997001c428feff010013ffffffffffffffff214e010104feff0300c8440104aca105000000043255130e936c142bf173137a8842c953c0c2d7746dc2c83fb573663c130d5e5201c828feff010013ffffffffffffffff214e010104feff0300c8140104b0a105000000045481d9339236b9f5ec8cbaff62faaafbc0cdf18d083b90959112f7f1b660553901cc28feff010013ffffffffffffffff214e010104feff0300c8e9010104b4a1050000367e3100046ef967c23cac38431dd1ff76ffad3d357924b0b4c52d86149f2981db1d5cf25b01d028feff010013ffffffffffffffff214e010104feff0300c84c0104b8a105000000046c3503742199e5978ef1c2690bfba4f281f59ed4b6b0f3ae8250e87bbb658d5801d428feff010013ffffffffffffffff214e010104feff0300c8340104bca105000000046428c1017d5e553f421598a26daf5a77844dca3a2f8f80cad8b51f16f632f35701d828feff010013ffffffffffffffff214e010104feff0300c8040104c0a105000000045a6c8783f6328eb976ec60c4f7fe075b817ede4a42b32a3bf18a6cf438c3ba2a01dc28feff010013ffffffffffffffff214e010104feff0300c81c0104c4a10500000004243cef52f666203a62f360d8b5474e3eddd4803aebb95f18ef0e8089d969194501e028feff010013ffffffffffffffff214e010104feff0300c8100104c8a1050000b10104287b5425fc2a87f8c3acf8a962798286db3d20719fe48fe9b8f664a1ddaafb6301e428feff010013ffffffffffffffff214e010104feff0300c8140104cca10500000004f8d6d28d7987616966fd863f97facac92c5f15398cfe11e09718960faebf073701e828feff010013ffffffffffffffff214e010104feff0300c8080104d0a10500000004ba43bd94ebbbb95eda10b7f82a3fabb3946f8f2f89a4ae3645dca8f5619ecc6f01ec28feff010013ffffffffffffffff214e010104feff0300c8140104d4a10500000004704f85febf2a6a1a71ed8e8d1e33af23796c802c6477c07751dcb35a09cf9d6001f028feff010013ffffffffffffffff214e010104feff0300c8140104d8a1050000000414908cb9fe96a7858ddc9f5af7fe6b2474dd1eeaa21c25d1f727056d7e2b142e01f428feff010013ffffffffffffffff214e010104feff0300c801040104dca10500005a3aee0404ae8354c4c102911a1b58875e439213a3d625b3896c3435967dddaa1d486ed70e01f828feff010013ffffffffffffffff214e010104feff0300c8300104e0a10500000004385922bb4363e72f17b4b0076ac167d19002f14c1b416c62e6286160067db73e01fc28feff010013ffffffffffffffff214e010104feff0300c8280104e4a10500000004cabf3601a75fdb45d95cfdeec3ee4779eb37e9ec982aa7632dfbddd4a607fd3401010128feff0100025a6202014001020110a10fc80901010404910100000000000000000000000000000000000000000000000000000000000000000000000001050128feff010013ffffffffffffffff214e010104feff0300c85d020104eca10500000004dcac67c6e135c1fb0234ebe2e2ccda083be6f91ebf18bccb8e922014d5080a1301090128feff010013ffffffffffffffff214e01010110a10fc8040104f0a105000096f2b13f042e1cf99a40a714e7df90a96f5c45168df1568893335a51cee93c543f1c39d106010d0128feff010013ffffffffffffffff214e010104feff0300c82c0104f4a105000000044069cd29a83311187c0f2930bc85695dfdf9e6f4646af9f6e2eafd2b7cef2b4101110128feff010013ffffffffffffffff214e010104feff0300c8040104f8a10500000004d2b77364d1c3b445cd69bd59f1a87dcb26c9ce3f46437d55b88b43f1c177e77601150128feff010013ffffffffffffffff214e010104feff0300c81c0104fca10500000004562d2afdb196526fe60bdc57c99f61c326cf7bf64377ebb269f9ffe5d4fe660701190128feff010013ffffffffffffffff214e010104feff0300c82001040101a105000000042ca75380b47a9a7465bac949527ef9f5a11856a7168797d4b78e1d457e47e947011d0128feff010013ffffffffffffffff214e010104feff0300c81801040501a10500000004b6c908350e87d29190aae491ac5f05d6c3262658125d5184da8446459829555901210128feff010013ffffffffffffffff214e010104feff0300c84801040901a105000091010458b93695d1b7cbaa6694e16b923c0ea1270bc3a11da44ccbdcc073ea3b09986401250128feff010013ffffffffffffffff214e010104feff0300c85401040d01a1050000000002599642053134e8f9699342e55fa074d8114df91e48bcf534740ba200be3e2d01290128feff010013ffffffffffffffff214e010104feff0300c86801041101a10500000004a22ce27c67f902395783b074b05a5372102c50cced56a792309fb10381b4d35c012d0128feff010013ffffffffffffffff214e010104feff0300c82801041501a105000098046c18068fdb7d1adb1bb5fbfed9578b3bdef882bbd79fd1c8709aa9087dcb3b4501310128feff010013ffffffffffffffff214e010104feff0300c8a90201041901a10500000004d849c3d25149fc5b8f00d2e4b3a9cf6a355af3c8aea5c1415f894e8f5e68522b01350128feff010013ffffffffffffffff214e010104feff0300c8190101041d01a10500000000141f1d5c5b356fa67490c9281c432e776b7706840801a652ac2a86152515683e01390128feff010013ffffffffffffffff214e010104feff0300c8590101042101a105000000047c5e19496686cf8a2f632709ac337d1b1c94210624f715910e3c89a8607ba34c013d0128feff010013ffffffffffffffff214e010104feff0300c89001042501a105000000045cf7811df39b6057753cff0822157f19351d292e5ea660710bc783ec44fe1b1201410128feff010013ffffffffffffffff214e010104feff0300c8b001042901a10500005910044e0b2aaafc29f2393261b9aecb4e934658d871c0cd0e03b2a9bb8b510478613a01450128feff010013ffffffffffffffff214e010104feff0300c81c01042d01a10500000004cce86023da931c965f5730beb54df83bdcd356edae149326622a07eb9d6f023101490128feff010013ffffffffffffffff214e010104feff0300c83801043101a105000000047081208ce88f99da3e45677997c82da7217cce89f1ed7e7482b1ac0543d75775014d0128feff010013ffffffffffffffff214e010104feff0300c81801043501a1050000deb00100049c4a7a07880883c14fd19b8e011bcb958d14656e73e7b572e7c50d1456b0e60e01510128feff010013ffffffffffffffff214e010104feff0300c81801043901a10500000004cabf3601a75fdb45d95cfdeec3ee4779eb37e9ec982aa7632dfbddd4a607fd3401550128feff010013ffffffffffffffff214e010104feff0300c81001043d01a105000000041c0857f7a760f66378e3962fa49ec6fc4905bd8728943556fc14ef7223cc1d0f01590128feff010013ffffffffffffffff214e010104feff0300c81401044101a105000000049a9baa94fa4e9bcb51740b491513d28333eafc9667e302db0b9a042b08de2d34015d0128feff010013ffffffffffffffff214e010104feff0300c8ad0201044501a105000008040c7fe2932483a11b56515d3bd501ab2efe19cda3428488bbbbacf2aeba628b1d01610128feff010013ffffffffffffffff214e010104feff0300c8110201044901a1050000080402cc620c7885c1c6007c9d88d3f4276e197bb8620c02c28d9c638a877733592001650128feff010013ffffffffffffffff214e010104feff0300c87d0101044d01a10500009d0a04bc736a93c0cc60ba45e4aa656309e86ba7db12ff9d17fb0fb959e0edc677af1a01690128feff010013ffffffffffffffff214e010104feff0300c81401045101a105000000042c077963acf22bb9ceb35cceeb60ddd92900e4dcca6530dc25732e9bae7e240d016d0128feff010013ffffffffffffffff214e010104feff0300c81401045501a10500000004bc0f52cb129e482919639de704710bc352ad0875a17b857f63fd2c345c57880901710128feff010013ffffffffffffffffc15d010104feff0300c8bd0201045901a10500002e5081010498189717e30483c50257ee0b32e016b8d51b3b5e069f0f8bc29324f8723c017f01750128feff010013ffffffffffffffff214e010104feff0300c8ad0201045d01a10500000004467438014a82998e9b0796d3b5b6c948a87c02c5a67dc604d8fb05c429e1b41501790128feff010013ffffffffffffffff214e010104feff0300c81001046101a10500000004cabf3601a75fdb45d95cfdeec3ee4779eb37e9ec982aa7632dfbddd4a607fd34017d0128feff010013ffffffffffffffff214e010104feff0300c81c01046501a1050000000418ad7c0e9f700b034f5c7ef2bc80cd9d4fa4d8c39f636bb631fef7647105137501810128feff010013ffffffffffffffff214e010104feff0300c8f901010400040000220c2f5204d868f60727d5cfaa22309f04df53c475b0169c7a4372c82485dd828e745de81c01850128feff010013ffffffffffffffff31750404feff0300c8a401046d01a105000086ca0300049c78ec2b3154e3f9ec61ba535e2194ef4c168dff9fdc57801f92229021ec146f01890128feff010013ffffffffffffffff214e010104feff0300c8090101047101a10500000004c21295ef014e2b6b24b401c4189627b7bc10d855376a762b8f5ac7652c04144d018d0128feff010013ffffffffffffffff214e010104feff0300c84c01047501a10500000004b8b090d259b562a21a1aaccd4cf325d1acee257b58d53f2681dd05a9d96d112301910128feff010013ffffffffffffffff214e010104feff0300c8350101047901a1050000a63d0900040aff7c60342e1090c9249fe503297824ebe84ecb7a4bf2a48ed1ca97132b564601950128feff010013ffffffffffffffff214e010104feff0300c80c01047d01a1050000000410958b33fc945ef3a7e2f986d9de174a75b277590d66d984500098d32e51f90601990128feff010013ffffffffffffffff214e010104feff0300c88401048101a1050000290e04ae8354c4c102911a1b58875e439213a3d625b3896c3435967dddaa1d486ed70e019d0128feff010013ffffffffffffffff214e010104feff0300c80401048501a10500000004da507701de58f8ba575d4a257cac9a521351bcab4eb79f53cd80a8ad911a755601a10128feff010013ffffffffffffffff214e010104feff0300c8cd0201048901a10500000004bc61b83982c8bcf5cc27e0331b20b2dd3e3ce465a2247b38db806f7790c6cb1701a50128feff010013ffffffffffffffff214e010104feff0300c80401048d01a10500000004cabf3601a75fdb45d95cfdeec3ee4779eb37e9ec982aa7632dfbddd4a607fd3401a90128feff010013ffffffffffffffff214e010104feff0300c80801049101a10500000004da507701de58f8ba575d4a257cac9a521351bcab4eb79f53cd80a8ad911a755601ad0128feff010013ffffffffffffffff214e010104feff0300c80401049501a10500000004a0b74e1ef41081197f29e8cbc456b21e793773f11d4edc711b26784aff59217b01b10128feff010013ffffffffffffffff214e010104feff0300c80c01049901a10500000004bc61b83982c8bcf5cc27e0331b20b2dd3e3ce465a2247b38db806f7790c6cb1701b50128feff010013ffffffffffffffff214e010104feff0300c80401049d01a105000000040aff7c60342e1090c9249fe503297824ebe84ecb7a4bf2a48ed1ca97132b564601b90128feff010013ffffffffffffffff214e010104feff0300c8080104a101a105000000044064631b31d92d852e137bc24310ec8bd86baf98ae2b03f1f4ba5d63d543897401bd0128feff010013ffffffffffffffff214e010104feff0300c8080104a501a105000000044064631b31d92d852e137bc24310ec8bd86baf98ae2b03f1f4ba5d63d543897401c10128feff010013ffffffffffffffff214e010104feff0300c8180104a901a1050000000700e40b5402f88542cc87224bf8cd4aabf49dd06f89c6032f6a6b15c86b5c3293d492bcc27601c50128feff010013ffffffffffffffff214e010104feff0300c8280104ad01a105000000046ec0eae062cede94212a0e73245db91cc13e257e6d673234a4b6d2791d9e340a01c90128feff010013ffffffffffffffff214e010104feff0300c8380104b101a105000000046ec0eae062cede94212a0e73245db91cc13e257e6d673234a4b6d2791d9e340a01cd0128feff010013ffffffffffffffff214e010104feff0300c83c0104b501a10500001e08070004788f2b1ac959b16dfd4d9c89f5b18ebc74d09871cda393a38d0856fb2a3fb54701d10128feff010013ffffffffffffffff214e010104feff0300c80d030104b901a10500000004aea85b4974fa81ea2d7d4f32c48812f2ccd1bc4d33993ef561c619b514d20f1e01d50128feff010013ffffffffffffffff214e010104feff0300c8100104bd01a10500000004b4d81a55e74730810604042874a2f49c6b086265f93f0dddfd39c82df2580c2801d90128feff010013ffffffffffffffff214e010104feff0300c865030104c101a10500000004a2ff6a9c3f5e50653c47819edcf4ab2eb94b48676f6eaee096c03b27708bd40101dd0128feff010013ffffffffffffffff214e010104feff0300c85d010104c501a1050000080494e9915614debc1df7e6467b62bd072ad5271c0e9c52da18c5c41c2c96ed3b6701e10128feff010013ffffffffffffffff214e010104feff0300c84c0104c901a105000000045a6c8783f6328eb976ec60c4f7fe075b817ede4a42b32a3bf18a6cf438c3ba2a01e50128feff010013ffffffffffffffff214e010104feff0300c8040104cd01a10500000004b67e7cc8c21432c5313c160396d647acdadd258af4806e20cf7a9e98ae49452001e90128feff010013ffffffffffffffff214e010104feff0300c8040104d101a10500000004b67e7cc8c21432c5313c160396d647acdadd258af4806e20cf7a9e98ae49452001ed0128feff010013ffffffffffffffff214e010104feff0300c8980104d501a1050000150104029c392906a0a017628ea03318c728d06294196390f13310c4cc47767d15073201f10128feff010013ffffffffffffffff214e010104feff0300c8040104d901a10500000004f219738d34359f9bae71932e806cc820a13e804bd9a30e884e232a71fb831b1301f50128feff010013ffffffffffffffff214e010104feff0300c8040104dd01a10500000004b67e7cc8c21432c5313c160396d647acdadd258af4806e20cf7a9e98ae49452001f90128feff010013ffffffffffffffff214e010104feff0300c8040104e101a1050000000498124a43481bc08ab174cf5214c8bd5f5d655da79105e26453dafa7c39bc2f7401fd0128feff010013ffffffffffffffff214e010104feff0300c8400104e501a10500000004cabf3601a75fdb45d95cfdeec3ee4779eb37e9ec982aa7632dfbddd4a607fd3401010228feff010013ffffffffffffffff214e010104feff0300c80c0104e901a10500000000e4185238bc9a20d310aaba4e6d0829812421c212f12e5154d1d55f079053a07801050228feff010013ffffffffffffffff214e010104feff0300c8080104ed01a10500000004ca32d7e056d12c126ffb3473211f5433038578d9ad5ee6025cafaf388d61445901090228feff010013ffffffffffffffff214e010104feff0300c80c0104f101a105000090042e10a36666eeceb1c4fedec194b9dad328fb394b557108ef3157cd00e1f67d63010d0228feff010013ffffffffffffffff214e010104feff0300c8140104f501a105000000049ca45ad90467d0cd912ea33d34e46e3a53c81eca841a466e63410234c439441f01110228feff010013ffffffffffffffff214e010104feff0300c8080104f901a105000000042684f1e6edd65d1d5126fdcc9b938ef888c636ef865154590f3b836167fba95f01150228feff010013ffffffffffffffff214e010104feff0300c8840104fd01a10500000004720952a3a738425806538be8514951f1f28ea41313cf6d1195e28ded76defd6a01190228feff010013ffffffffffffffff214e010114feff0300c87801040102a1050000710104161efad0a0ee3457f73b773db22eb6c3322f49a8cbf14b46233ca5eaed4fda25011d0228feff010013ffffffffffffffff214e010104feff0300c82001040502a105000000042ad643a435e0a78ffc03c351a705a68ef0645c805ca08780f0948c51dcd9952201210228feff010013ffffffffffffffff214e010104feff0300c81801040902a10500000004da618f84f833dc38b54f31cca63c408134bcce60f38c16c2f64fd4cf37068b0f01250228feff010013ffffffffffffffff214e010104feff0300c80401040d02a1050000000438fb2438348d1d376ec3adab05380da91d4fbea5693aaf6724a8846523a9095101290228feff010013ffffffffffffffff214e010104feff0300c8010201041102a1050000667e310004d4d3dce26a8ba3fbd49d1a8f3da83fddaa3766d4344885b4e6034e948647954a012d0228feff010013ffffffffffffffff214e010104feff0300c80801041502a10500000004c85fe6ebfecf63bfb863b8ab2428625a89f408f71d1bd1762bbb5beb1aaa784501310228feff010013ffffffffffffffff214e010104feff0300c81c01041902a10500000004921e3a08d1df8f952d7a726ce9814d3f704016184ee5c0bef9cd02d7ccf2941001350228feff010013ffffffffffffffff214e010104feff0300c80d0201041d02a105000000044e893a6773cfcbca6d0d341f447a1f09f476183ebd2aa552d81a2bcfd3a09d1d01390228feff010013ffffffffffffffff214e010104feff0300c81c01042102a1050000cd0a046e3def08c71e9c9ae953bfd0db7562a93b7e4256471a04ce87650a2e18a8c34f013d0228feff010013ffffffffffffffff214e010104feff0300c81801042502a1050000000410958b33fc945ef3a7e2f986d9de174a75b277590d66d984500098d32e51f90601410228feff010013ffffffffffffffff214e010104feff0300c80401042902a10500000004a2546ee63c4aabf1ba1df58eedc03608ebb0c6c1fc6a7db13d9fc357be93b61a01450228feff010013ffffffffffffffff214e010104feff0300c80401042d02a1050000000416300bc028c9dc5ec552055e2f1459c00e123510f1cf2b2910c2ed8af7fdda1a01490228feff010013ffffffffffffffff214e010104feff0300c82801043102a10500000004f2c1602920841065e9c51576fd9933cb3b2bf68141444ffcc0534352c5603310014d0228feff010013ffffffffffffffff214e010104feff0300c80c01043502a10500000004b8c763135cef8b29f90190e886b8fd5851313732904323e2021a8ccc732efb6c01510228feff010013ffffffffffffffff214e010104feff0300c80401043902a10500000004785b8b6a7ddacad7ac6df5a55319f1b68d6dd90f1b1fb81a73538877fd4d367401550228feff010013ffffffffffffffff214e010104feff0300c80c01043d02a1050000000416300bc028c9dc5ec552055e2f1459c00e123510f1cf2b2910c2ed8af7fdda1a01590228feff010013ffffffffffffffff214e010104feff0300c80801044102a10500000004c26cde1b916da78e6d466be0ec85df92d0e41952e2932059506f957c5df4f61d015d0228feff010013ffffffffffffffff214e010104feff0300c80401044502a10500000004e04f3a2b9c39597f59981eae01595bdb0a6b32e0017bd995805061b9d7bafd6d01610228feff010013ffffffffffffffff214e010104feff0300c80401044902a10500000004c26cde1b916da78e6d466be0ec85df92d0e41952e2932059506f957c5df4f61d01650228feff010013ffffffffffffffff214e010104feff0300c80401044d02a10500000004c26cde1b916da78e6d466be0ec85df92d0e41952e2932059506f957c5df4f61d01690228feff010013ffffffffffffffff214e010104feff0300c80401045102a1050000000410958b33fc945ef3a7e2f986d9de174a75b277590d66d984500098d32e51f906016d0228feff010013ffffffffffffffff214e010104feff0300c84d0101045502a105000000044e0432b09d21c191b4b25ac7616cf43d75c2ed092e3ed23ebfa390d07680a83401710228feff010013ffffffffffffffff214e010104feff0300c80401045902a105000000042239b60c1eb3cd7ddea7a2934e290e713cdea006129e2960dba3c1a9281d042001750228feff010013ffffffffffffffff214e010104feff0300c83801045d02a10500000004d868f60727d5cfaa22309f04df53c475b0169c7a4372c82485dd828e745de81c01790228feff010013ffffffffffffffff214e010104feff0300c80401046102a105000000048e7fe1bf8ab18fd50b136895ee607b568a790243517f27d76c7ddb0f6ac6dd20017d0228feff010013ffffffffffffffff214e010104feff0300c82001046502a105000000040e429d885b61386d3f639166534f4d7882627d9fb540ec96619a9ef91c4af35601810228feff010013ffffffffffffffff214e010104feff0300c80801046902a105000000041257de87a71abb164403f7cb9ea65d0721f8bb89d8bd85754deceedd91e8605301850228feff010013ffffffffffffffff214e010104feff0300c80c01046d02a1050000000426fcf3c21137f92dac2f4039a3c9885b7696a20347177eeb60d20ea68ff5cd5b01890228feff010013ffffffffffffffff214e010104feff0300c81001047102a10500000004e833288b965a5325d27efa376c571179a7ce6cc5908470dd86275d9eef83562c018d0228feff010013ffffffffffffffff214e010104feff0300c86c01047502a105000000044c344d80452b90c876b99369151b26156409b5875a22c07c1693a82e2b35986801910228feff010013ffffffffffffffff01e1010104feff0300c82001047902a105000000025a620264d07d502ad2cdcf29b27682d70763421d27ca814ae2bfefbddcaab871ff0b2301950228feff010013ffffffffffffffff214e010104feff0300c8d401047d02a10500001501042001e6ca766ae6def412109f344e2fbbefab098147fea271333ce3701e88355f01990228feff010013ffffffffffffffff214e010104feff0300c85c01048102a10500000004ce28b1b257a89f311ac782667e3f7af340117daef84ca049a72c9c5f6421f33a019d0228feff010013ffffffffffffffff214e010104feff0300c81801048502a105000000046830702062b0d0924d337807c18bd102676e299776149bb2d4f5e49b0194e73701a10228feff010013ffffffffffffffff214e010104feff0300c8bd0301048902a1050000000426299eb393ac0cb8f3122bdccf96e0951f81564deccfb01388abe8083c14a96f01a50228feff010013ffffffffffffffff214e010104feff0300c8d90301048d02a1050000000426299eb393ac0cb8f3122bdccf96e0951f81564deccfb01388abe8083c14a96f01a90228feff010013ffffffffffffffff214e010104feff0300c80c01049102a10500000004bc677a5d3da894932b49479192497d919a73444771028e8891ce14a14958520301ad0228feff010013ffffffffffffffff214e010104feff0300c8e401049502a10500000004ae23f59c62637058a98ac980bb8d9910f479509d9b3d482837d3210ac29a0f5901b10228feff010013ffffffffffffffff214e010104feff0300c80d0201049902a1050000000498d3aab78ce2f0c9f3bc7c075fd2a5509e81bec998e67ef95604e589a10b9f7201b50228feff010013ffffffffffffffff214e010104feff0300c82801049d02a105000000042cc129858d576c3b2ff3686c9df3a6969dee293ff87a7e455e727b0fcae6d22301b90228feff010000214e010104feff0300c84d010104a102a105000000002c706a060e1dd966aba8300f48a6be49ec5ef5ef7f56ac0bca33e32abf47753b01bd0228feff010013ffffffffffffffff214e010104feff0300c80c0104a502a10500000004f81ac18c34e8f647b7cc260ce62b3cb8e4a0576fd22ab4c005f0f820decd596a01c10228feff010013ffffffffffffffff214e010104feff0300c829010104a902a1050000000460ebd421a5b19fe326b93643588fb91c3b3ed8f882e89326ed281e94cab4ff0e01c50228feff010013ffffffffffffffff214e010104feff0300c8080104ad02a10500000004f81ac18c34e8f647b7cc260ce62b3cb8e4a0576fd22ab4c005f0f820decd596a01c90228feff010013ffffffffffffffff214e010104feff0300c8280104b102a105000000044e0b2aaafc29f2393261b9aecb4e934658d871c0cd0e03b2a9bb8b510478613a01cd0228feff010013ffffffffffffffff214e010104feff0300c8140104b502a105000000046c3503742199e5978ef1c2690bfba4f281f59ed4b6b0f3ae8250e87bbb658d5801d10228feff010013ffffffffffffffff214e010104feff0300c8e00104b902a1050000a40492afe6f8c459227b6b1a8c781a38e6ea1d57be68e6eec9d284fefb822fc4143e01d50228feff010013ffffffffffffffff214e010104feff0300c879010104bd02a105000000005cddfb0337a71d2ef6312b6f6750e55f53404967673542bd917e4cfe4310200301d90228feff010013ffffffffffffffff214e010104feff0300c8380104c102a1050000000474a935fec56f3862eeaf3e2d70d9742dbba0fb79c18c109d31c01610f758e17e01dd0228feff010013ffffffffffffffff214e010104feff0300c8700104c502a1050000a18e04b0bf6a8083d5c2914689c2d0a761baf8655a7f1558ca1b221eaf8cb7d942bc4001e10228feff010013ffffffffffffffff214e010104feff0300c8080104c902a105000000042096d288ed0ef4fc6c5b510bb038184bb8c3999ab0a2e824a0670f0a2b691a6601e50228feff010013ffffffffffffffff214e010104feff0300c8040104cd02a10500000004c61585185e3e38e41b1ffaf3415e0e44535efc260d4a283135d6290995c2bf4901e90228feff010013ffffffffffffffff214e010104feff0300c8040104d102a10500000004bc736a93c0cc60ba45e4aa656309e86ba7db12ff9d17fb0fb959e0edc677af1a01ed0228feff010013ffffffffffffffff214e010104feff0300c8000104d502a10500000004cb891e3e509b3d088b18c0bdac4c57bbf7af9a7f48be88593c8464a805c7589901f10228feff010013ffffffffffffffff214e010104feff0300c8100104d902a105000000049eac515ad2fa5d8dbb6f9789ff1e983e93f131b518d59e3bd55066e19d12ac7c01f50228feff010013ffffffffffffffff214e010104feff0300c8040104dd02a105000000047884f886831b3df75de913cb4e87d703c13b0256673a2000d33f0863eae2205f01f90228feff010013ffffffffffffffff214e010104feff0300c8040104e102a105000000047884f886831b3df75de913cb4e87d703c13b0256673a2000d33f0863eae2205f01fd0228feff010013ffffffffffffffff214e010104feff0300c8040104e502a10500000004d61582800a31f20815eaf12df6b08e53e736a316941cab42fa319cb34f79854701010328feff010013ffffffffffffffff214e010104feff0300c8640104e902a105000000042e226f8afd0950c55e65f6e8620f3c2a1cab5f9a0b45ae16023e9d254610fc2601050328feff010013ffffffffffffffff214e010104feff0300c80c0104ed02a105000000042a89d979b0fa36843dcdfd380fd9ed9d84b79fd4f6b6f51481cdd241a598327601090328feff010013ffffffffffffffff214e010104feff0300c8040104f102a105000000042a89d979b0fa36843dcdfd380fd9ed9d84b79fd4f6b6f51481cdd241a5983276010d0328feff010013ffffffffffffffff214e010104feff0300c80c0104f502a10500000004a22cca87f973c39b20bb2fe043c8d08395913ead78749678a10971284c2a1f4401110328feff010013ffffffffffffffff214e010104feff0300c8180104f902a105000000045c87e6890ba3e666b0021a8251a36100ac52650195ff51aa00efc5c3fc04b25101150328feff010013ffffffffffffffff214e010104feff0300c8580104fd02a1050000210104965fcb3292491234fa2467fca6e6c9ceebf16d196625b6d664edba9a0807ca0401190328feff010013ffffffffffffffff214e010104feff0300c80401040103a10500000004c6e3016e3c689109fe815e2450deea12bc7cc156cf594b5b04a8978af8b9ae52011d0328feff0100025a6202214e010104feff0300c82c01040503a1050000000284d7170ebd5759c939fe54296f138d7b28745751005cb8c22c27d8d96e7fc5de4c787501210328feff010013ffffffffffffffff214e010104feff0300c81001040903a10500000002286bee7417b92f59afc9e516059444b66db8e69745db91f422739ecf88e53962095a7c01250328feff010013ffffffffffffffff214e010104feff0300c80c01040d03a10500000004f6aa2e51b4f78061a2eed5f18b5cf0b8a6a513e0f01dd9551fb35d5c625ebb5101290328feff010013ffffffffffffffff214e010104feff0300c8bc01041103a105000000048270981d68c8a4bbb7d62f12bea32322f798332034e569ea7aea8a6759df4b42012d0328feff010013ffffffffffffffff214e010104feff0300c83001041503a105000044048ec05cbec265c3b3e839ded71b722602d1421646b96ad819df763cc8e0d48f2a01310328feff010013ffffffffffffffff214e010104feff0300c82c01041903a1050000e912046820887e492454131cf89922a0369adcdb38c48b6981a0791948b1e91dd7ee1f01350328feff010013ffffffffffffffff214e010104feff0300c81c01041d03a105000000046231b9b8f2534ce782af830fcc1743dd61bef59e41d7120daf3f5f7625b7b31d01390328feff010013ffffffffffffffff214e010104feff0300c80801042103a105000000044c5d28f0187dbdb7fe2be86a2de475dc13bb757462e0ab9ecbaa093528c87a15013d0328feff010013ffffffffffffffff214e010104feff0300c81001042503a10500000004600b40c88f29657d76509e2a97acb5ed847079dc6e88f4031c34fd4c46e35e5401410328feff010013ffffffffffffffff214e010104feff0300c86c01042903a10500000004e275a22dab76aa1bf9db37cbf76e90f290a5e20652e2869b59f0b0711ca4f20d01450328feff010013ffffffffffffffff214e010104feff0300c80c01042d03a10500000004167291393eb7bf3873eaf587f80172234c8159d0213dd03989905af9a371173e01490328feff010013ffffffffffffffff214e010104feff0300c80401043103a105000000048eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48014d0328feff010013ffffffffffffffff214e010104feff0300c80c01043503a10500000004a28e86072a4b7215dd3c7c6aedfc8679549549ee4077ae81baad5e7f4c4e053c01510328feff010013ffffffffffffffff214e010104feff0300c8500104000400000004cce86023da931c965f5730beb54df83bdcd356edae149326622a07eb9d6f023101550328feff010013ffffffffffffffff214e010104feff0300c81801043d03a1050000590504ae278c523c5d5e0278d296a40089e9c2d2e83df934ced5dd283f7ca931a6744801590328feff010013ffffffffffffffff214e010104feff0300c81801044103a10500000004bee8212193998958977b4609b91747a2b9879f512a3c6981c9c6c8b05cbb476d015d0328feff010013ffffffffffffffff214e010104feff0300c80801044503a105000000042096d288ed0ef4fc6c5b510bb038184bb8c3999ab0a2e824a0670f0a2b691a6601610328feff010013ffffffffffffffff214e010104feff0300c80401044903a105000000042096d288ed0ef4fc6c5b510bb038184bb8c3999ab0a2e824a0670f0a2b691a6601650328feff010013ffffffffffffffff214e010104feff0300c89001044d03a1050000094404c6aed2621eae09d0edce51309061697c26edb9994a5341315c6a5329560f973e01690328feff010013ffffffffffffffff214e010104feff0300c81001045103a105000000041846172c481ff3ec2a644bbff46b08566798d799ff568b832b5a6d73263e2e1a016d0328feff010013ffffffffffffffff214e010104feff0300c80401045503a105000000881e56e8937de6f995c94957d587a71f305e806604a185438361e393896aa03b6101710328feff010004214e010104feff0300c8590101045903a105000000dc1846172c481ff3ec2a644bbff46b08566798d799ff568b832b5a6d73263e2e1a01750328feff010013ffffffffffffffff214e010104feff0300c80401045d03a1050000003d01d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d01790328feff010013ffffffffffffffff214e010104feff0300c82801046103a1050000001502101f5e7ec4042b882a1b9e4bb3d0071686fb4277f7a8a7e2b7a04965a777751f017d0328feff0100a10f214e010104feff0300c89001046503a10500000091025e9fbe002b8938fe32272911e028eb12b8c5dacf940b42aa9f06969b2f18190301810328feff010013ffffffffffffffff214e010104feff0300c80401046903a1050000007105dce5f748cbc0587ade043bb45bc4a204b513446ceff7d8f40fc04a203879bf0801850328feff010013ffffffffffffffff214e010104feff0300c81401046d03a10500000029082ab01699210c939cbeef200d87138d001801ffa29d70d939f022d5cdf0fa9a1401890328feff010013ffffffffffffffff214e010104feff0300c80c01047103a1050000884d154013122bab03e02e19d00211efc50b92402c1fbf38d48e68c02020be6ce34b76018d0328feff010013ffffffffffffffff214e010104feff0300c80401047503a105000000352b73e54b664571974c351a3ec31b77457a5c7e407e02c7bba869418f03aa3c4bc401910328feff010013ffffffffffffffff214e010104feff0300c80c01047903a10500000059325eea96f4e0299103455a1adcb8b151671eebd0f9dba78fb797f1f9b56460d03801950328feff010013ffffffffffffffff214e010104feff0300c80801047d03a1050000006558002326240a609c72641c6a3fcad3ad2ee33f2db95f6c16e181f7c62fa063834b01990328feff010013ffffffffffffffff214e010104feff0300c82001048103a1050000bae4cd00bdbc9e51e2ae2ef754202057c705d83bd3dec7ccac3d65962a0bfc87dd68acbe1362019d0328feff010013ffffffffffffffff214e010104feff0300c80c01048503a1050000000ad602004e69579598dacfaf868fd3da108240dcac14399ba37284caea9f9fb4a536e22d01a10328feff010013ffffffffffffffff214e010104feff0300c89c01048903a1050000094404c6aed2621eae09d0edce51309061697c26edb9994a5341315c6a5329560f973e01a50328feff010013ffffffffffffffff214e010104feff0300c81001048d03a1050000001e7704000e429d885b61386d3f639166534f4d7882627d9fb540ec96619a9ef91c4af35601a90328feff010013ffffffffffffffff214e010104feff0300c80c01049103a105000000fe4505008a68f5033ee2b421019fb11e349f645be407004d32ea32bd0690e07c634c6b2401ad0328feff010013ffffffffffffffff214e010104feff0300c80401049503a10500000056631000a4fd4fcc0ebfdadd67ddc28e54c5d5c5f81432f309e09c0aa006e250c345677401b10328feff010013ffffffffffffffff214e010104feff0300c83001049903a1050000a404b4acf171326fd530b4f50fe68260a1d7ac8ee918469400e81604420379cb524401b50328feff010013ffffffffffffffff214e010104feff0300c81001049d03a1050000000078291b047688e8e91f99a0eaaaa0a9bda2d3e286767417df7c434fdf55b0e64501b90328feff010013ffffffffffffffff214e010104feff0300c8080104a103a1050000004ac42b002c5a12354279d049a1d8f29e42e7476c42aecc832a333c5f5823e572f47d657501bd03280200020013ffffffffffffffff214e010104feff0300c8080104a503a1050000000b00a0724e180934a2e742e406a2de9b308e2aba1cf911638daf8665db7ae0673861bdf0e4064c01c10328feff010013ffffffffffffffff214e010104feff0300c8080104a903a1050000005a8f83034269c309fd10916776c24e6afc6a2876037f2a7cc53e547de1fa5d03b262907401c50328feff010013ffffffffffffffff214e010104feff0300c8400104ad03a1050000003ed23205062ed2cbd984cda1964f6c63382840b248ece865dd8562460c0f0f8a77bfdb7301c90328feff010013ffffffffffffffff214e010104feff0300c8080104b103a1050000007e88f904de5251d30f454cdeaa942e3979a22ac2a3b824458ba03f3afc592cb78a905d2901cd0328feff010013ffffffffffffffff214e010104feff0300c8040104b503a105000000bef498075c239ed29d89fcf63035c36cba4d21ac077485beae41c1f7ca03ceb7c7fa5f7f01d10328feff010013ffffffffffffffff214e010104feff0300c80c0104b903a1050000004e3cd2090edbd5fb628bb9ba85a5d8351ee2b9146840c0c7eeba4a38ac000e147c14933c01d50328feff010013ffffffffffffffff214e010104feff0300c81c0104bd03a105000000aa66150b24b6f83352f4d04fb7ecee93f39ff5fbb752eca4289a870072961981010d973d01d90328feff010013ffffffffffffffff214e010104feff0300c8080104c103a10500000052410cd09e51e2ae2ef754202057c705d83bd3dec7ccac3d65962a0bfc87dd68acbe1362", - } - }, - "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, - }, - "get_balance": { "chain_getHead": { "[]": { "jsonrpc": "2.0", - "result": "0x1b3f85dc8c83cada6d1782c955973a509a37c62af3d6ba29f5fd816aee37eb3b", + "result": "0xe9729c54c0e59c611198b560a7a93e52154100187d04dfc09d1dc1a6572d4006", } }, "chain_getHeader": { - '["0x1b3f85dc8c83cada6d1782c955973a509a37c62af3d6ba29f5fd816aee37eb3b"]': { + '["0xe9729c54c0e59c611198b560a7a93e52154100187d04dfc09d1dc1a6572d4006"]': { "jsonrpc": "2.0", "result": { "digest": { "logs": [ - "0x066175726120ab489a0800000000", - "0x0466726f6e88015b559367fb27665be180a32109a44b153dd14cafb22eb908ac9e79a308916c9a00", - "0x056175726101012030b4a878800704102801d12f2dfe4b3f66bd8c3fbe236e4881ed1b9bdbaf6c8eb6200f9db52945187c3c1f46d8b4c08c1b50e2002d94594e0c751069ca7d8d", + "0x0661757261209b489a0800000000", + "0x0466726f6e8801fa9bcb7befe1394a353134de30ad705326185473f91cd6be31397c06759e007800", + "0x0561757261010128b382541b4a78e5c9ff3cee4ae48fe3c5337add9f1baad15b72939990218773794b348babefd9fa28312c5b5097b52b034d90a331a747dcfcd03fa37a7fb482", ] }, - "extrinsicsRoot": "0xf7eaa2bb07e7650b27ee819ee07c987207ad40220f250e4eebb1178e19734242", - "number": "0x31ce9e", - "parentHash": "0xd867f39bb9e2a626945183af01065b61d0695d435a765bfd0ce5f821fbed8f82", - "stateRoot": "0x3096ed3b5859801b59e2fb348ef560e87f473a799dea9be12982b969fdd1dfaf", + "extrinsicsRoot": "0xfabdc25842a79c97f6029f17f0f7521ec5f9b41815932f1dcc2cb0752fa0ca9a", + "number": "0x31ce8e", + "parentHash": "0xae0ef35761d050ada6d4f09efec39ca430d4f4c50b927741b32fd487d382ead8", + "stateRoot": "0x7da2cf163b71981ea914cc9f8ddecf662faee1f6f04acf5e814a16f086ddbe78", + }, + }, + "[null]": { + "jsonrpc": "2.0", + "result": { + "digest": { + "logs": [ + "0x0661757261209c489a0800000000", + "0x0466726f6e8801b81937c0aed82aace40c1860c8f8be871ed90466eb702dcd50fef49a70ca8dcf00", + "0x056175726101016a8bbee0a2b31058eff0df90b3b194cc7824e735e09b957136291639ff36c2047102e48742ac2ac14fe1634b652bba055b00383b06cea6482c56755b74c3c88b", + ] + }, + "extrinsicsRoot": "0x42acc4ffcaba39f003a14f13e2dc69e5b93198724a019515f31e22baf0b240f7", + "number": "0x31ce8f", + "parentHash": "0xe9729c54c0e59c611198b560a7a93e52154100187d04dfc09d1dc1a6572d4006", + "stateRoot": "0x319de5cb67bbf31e93a7db2e75b9bca48ce8d0b91d5156ce2c738eb178700d98", }, + }, + }, + "state_call": { + '["SubnetInfoRuntimeApi_get_subnets_info", "", null]': { + "jsonrpc": "2.0", + "result": "0x0c010028feff0100025a62020140010100feff0300c800010180910100000002286bee000000000000000000000000000000000000000000000000000000000000000000010428feff0100025a6202214e010104feff0300c80401049903a10500000002286beed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d00010c28feff0100025a6202014001020110a10fc8000140988d0100000002286bee000000000000000000000000000000000000000000000000000000000000000000", } }, - "rpc_methods": { - "[]": { + "state_getRuntimeVersion": { + '["0xae0ef35761d050ada6d4f09efec39ca430d4f4c50b927741b32fd487d382ead8"]': { "jsonrpc": "2.0", "result": { - "methods": [ - "account_nextIndex", - "archive_unstable_body", - "archive_unstable_call", - "archive_unstable_finalizedHeight", - "archive_unstable_genesisHash", - "archive_unstable_hashByHeight", - "archive_unstable_header", - "archive_unstable_storage", - "author_hasKey", - "author_hasSessionKeys", - "author_insertKey", - "author_pendingExtrinsics", - "author_removeExtrinsic", - "author_rotateKeys", - "author_submitAndWatchExtrinsic", - "author_submitExtrinsic", - "author_unwatchExtrinsic", - "chainHead_v1_body", + "apis": [ + ["0xdf6acb689907609b", 5], + ["0x37e397fc7c91f5e4", 2], + ["0x40fe3ad401f8959a", 6], + ["0xfbc577b9d747efd6", 1], + ["0xd2bc9897eed08f15", 3], + ["0xf78b278be53f454c", 2], + ["0xdd718d5cc53262d4", 1], + ["0xab3c0572291feb8b", 1], + ["0xed99c5acb25eedf5", 3], + ["0xbc9d89904f5b923f", 1], + ["0x37c8bb1350a9a2a8", 4], + ["0xf3ff14d5ab527059", 3], + ["0x582211f65bb14b89", 5], + ["0xe65b00e46cedd0aa", 2], + ["0x42e62be4a39e5b60", 1], + ["0x806df4ccaa9ed485", 1], + ["0x8375104b299b74c5", 1], + ["0x5d1fbfbe852f2807", 1], + ["0xc6886e2f8e598b0a", 1], + ], + "authoringVersion": 1, + "implName": "node-subtensor", + "implVersion": 1, + "specName": "node-subtensor", + "specVersion": 208, + "stateVersion": 1, + "transactionVersion": 1, + }, + } + }, + }, + "get_balance": { + "chain_getHead": { + "[]": { + "jsonrpc": "2.0", + "result": "0x1b3f85dc8c83cada6d1782c955973a509a37c62af3d6ba29f5fd816aee37eb3b", + } + }, + "chain_getHeader": { + '["0x1b3f85dc8c83cada6d1782c955973a509a37c62af3d6ba29f5fd816aee37eb3b"]': { + "jsonrpc": "2.0", + "result": { + "digest": { + "logs": [ + "0x066175726120ab489a0800000000", + "0x0466726f6e88015b559367fb27665be180a32109a44b153dd14cafb22eb908ac9e79a308916c9a00", + "0x056175726101012030b4a878800704102801d12f2dfe4b3f66bd8c3fbe236e4881ed1b9bdbaf6c8eb6200f9db52945187c3c1f46d8b4c08c1b50e2002d94594e0c751069ca7d8d", + ] + }, + "extrinsicsRoot": "0xf7eaa2bb07e7650b27ee819ee07c987207ad40220f250e4eebb1178e19734242", + "number": "0x31ce9e", + "parentHash": "0xd867f39bb9e2a626945183af01065b61d0695d435a765bfd0ce5f821fbed8f82", + "stateRoot": "0x3096ed3b5859801b59e2fb348ef560e87f473a799dea9be12982b969fdd1dfaf", + }, + } + }, + "rpc_methods": { + "[]": { + "jsonrpc": "2.0", + "result": { + "methods": [ + "account_nextIndex", + "archive_unstable_body", + "archive_unstable_call", + "archive_unstable_finalizedHeight", + "archive_unstable_genesisHash", + "archive_unstable_hashByHeight", + "archive_unstable_header", + "archive_unstable_storage", + "author_hasKey", + "author_hasSessionKeys", + "author_insertKey", + "author_pendingExtrinsics", + "author_removeExtrinsic", + "author_rotateKeys", + "author_submitAndWatchExtrinsic", + "author_submitExtrinsic", + "author_unwatchExtrinsic", + "chainHead_v1_body", "chainHead_v1_call", "chainHead_v1_continue", "chainHead_v1_follow", @@ -2318,449 +2206,78 @@ ["0xd2bc9897eed08f15", 3], ["0xf78b278be53f454c", 2], ["0xdd718d5cc53262d4", 1], - ["0xab3c0572291feb8b", 1], - ["0xed99c5acb25eedf5", 3], - ["0xbc9d89904f5b923f", 1], - ["0x37c8bb1350a9a2a8", 4], - ["0xf3ff14d5ab527059", 3], - ["0x582211f65bb14b89", 5], - ["0xe65b00e46cedd0aa", 2], - ["0x42e62be4a39e5b60", 1], - ["0x806df4ccaa9ed485", 1], - ["0x8375104b299b74c5", 1], - ["0x5d1fbfbe852f2807", 1], - ["0xc6886e2f8e598b0a", 1], - ], - "authoringVersion": 1, - "implName": "node-subtensor", - "implVersion": 1, - "specName": "node-subtensor", - "specVersion": 208, - "stateVersion": 1, - "transactionVersion": 1, - }, - } - }, - "state_queryStorageAt": { - '[["0x658faa385070e074c85bf6b568cf0555ea6aa4e81a33d2c120ef55203e0eb5603e9947bb89c47cd7ad643c5d30c0e6954af7598952f87683204a2a0c2266f941a74899bd69b0ce56e42a82820f6894461700"], null]': { - "jsonrpc": "2.0", - "result": [ - { - "block": "0x1e326794f8c851e3b5675e603bf726120b074348a6c0d3e8ea354f6880a49f7b", - "changes": [ - [ - "0x658faa385070e074c85bf6b568cf0555ea6aa4e81a33d2c120ef55203e0eb5603e9947bb89c47cd7ad643c5d30c0e6954af7598952f87683204a2a0c2266f941a74899bd69b0ce56e42a82820f6894461700", - "0x01", - ] - ], - } - ], - } - }, - "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, - }, - "get_neuron_for_pubkey_and_subnet": { - "chain_getHead": { - "[]": { - "jsonrpc": "2.0", - "result": "0x9d58a80049c3eaabf68f6bc83b1dd3f36bc3dcc7d75be17ee53dfc678e4ee111", - } - }, - "chain_getHeader": { - '["0x9d58a80049c3eaabf68f6bc83b1dd3f36bc3dcc7d75be17ee53dfc678e4ee111"]': { - "jsonrpc": "2.0", - "result": { - "digest": { - "logs": [ - "0x066175726120a0489a0800000000", - "0x0466726f6e8801b2557a32e7b78d386e67769c083405a148fe57d80528d9aca8eb9ddbbfac288800", - "0x05617572610101b8a3e510b65d00ebc479d3102632250e7354a619d7719757df6b0666c1eaa0039debd861b6ae79fcbc4f82b87d5efbc5ca089e318918e5274d0380782c91188b", - ] - }, - "extrinsicsRoot": "0x226f5c8e7d52bebaa5fb56a9a9f8344667533c2f9edac2eed9c91c64a9cc653c", - "number": "0x31ce93", - "parentHash": "0x9259b771b0f59b1ed8f38f604ab4f4a3e63dc0988754e664be2d40d58970958c", - "stateRoot": "0x8d8552df3fa7fb8569216cc69516dd3067af8d5bad60cf363c1337719bd31a12", - }, - } - }, - "neuronInfo_getNeuron": { - "[23, 5]": { - "jsonrpc": "2.0", - "result": [ - 74, - 247, - 89, - 137, - 82, - 248, - 118, - 131, - 32, - 74, - 42, - 12, - 34, - 102, - 249, - 65, - 167, - 72, - 153, - 189, - 105, - 176, - 206, - 86, - 228, - 42, - 130, - 130, - 15, - 104, - 148, - 70, - 18, - 87, - 222, - 135, - 167, - 26, - 187, - 22, - 68, - 3, - 247, - 203, - 158, - 166, - 93, - 7, - 33, - 248, - 187, - 137, - 216, - 189, - 133, - 117, - 77, - 236, - 238, - 221, - 145, - 232, - 96, - 83, - 20, - 92, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 18, - 87, - 222, - 135, - 167, - 26, - 187, - 22, - 68, - 3, - 247, - 203, - 158, - 166, - 93, - 7, - 33, - 248, - 187, - 137, - 216, - 189, - 133, - 117, - 77, - 236, - 238, - 221, - 145, - 232, - 96, - 83, - 3, - 176, - 236, - 104, - 179, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 110, - 68, - 120, - 0, - 1, - 0, - 0, - 0, - ], - } - }, - "rpc_methods": { - "[]": { - "jsonrpc": "2.0", - "result": { - "methods": [ - "account_nextIndex", - "archive_unstable_body", - "archive_unstable_call", - "archive_unstable_finalizedHeight", - "archive_unstable_genesisHash", - "archive_unstable_hashByHeight", - "archive_unstable_header", - "archive_unstable_storage", - "author_hasKey", - "author_hasSessionKeys", - "author_insertKey", - "author_pendingExtrinsics", - "author_removeExtrinsic", - "author_rotateKeys", - "author_submitAndWatchExtrinsic", - "author_submitExtrinsic", - "author_unwatchExtrinsic", - "chainHead_v1_body", - "chainHead_v1_call", - "chainHead_v1_continue", - "chainHead_v1_follow", - "chainHead_v1_header", - "chainHead_v1_stopOperation", - "chainHead_v1_storage", - "chainHead_v1_unfollow", - "chainHead_v1_unpin", - "chainSpec_v1_chainName", - "chainSpec_v1_genesisHash", - "chainSpec_v1_properties", - "chain_getBlock", - "chain_getBlockHash", - "chain_getFinalisedHead", - "chain_getFinalizedHead", - "chain_getHead", - "chain_getHeader", - "chain_getRuntimeVersion", - "chain_subscribeAllHeads", - "chain_subscribeFinalisedHeads", - "chain_subscribeFinalizedHeads", - "chain_subscribeNewHead", - "chain_subscribeNewHeads", - "chain_subscribeRuntimeVersion", - "chain_unsubscribeAllHeads", - "chain_unsubscribeFinalisedHeads", - "chain_unsubscribeFinalizedHeads", - "chain_unsubscribeNewHead", - "chain_unsubscribeNewHeads", - "chain_unsubscribeRuntimeVersion", - "childstate_getKeys", - "childstate_getKeysPaged", - "childstate_getKeysPagedAt", - "childstate_getStorage", - "childstate_getStorageEntries", - "childstate_getStorageHash", - "childstate_getStorageSize", - "debug_getBadBlocks", - "debug_getRawBlock", - "debug_getRawHeader", - "debug_getRawReceipts", - "debug_getRawTransaction", - "delegateInfo_getDelegate", - "delegateInfo_getDelegated", - "delegateInfo_getDelegates", - "eth_accounts", - "eth_blockNumber", - "eth_call", - "eth_chainId", - "eth_coinbase", - "eth_estimateGas", - "eth_feeHistory", - "eth_gasPrice", - "eth_getBalance", - "eth_getBlockByHash", - "eth_getBlockByNumber", - "eth_getBlockReceipts", - "eth_getBlockTransactionCountByHash", - "eth_getBlockTransactionCountByNumber", - "eth_getCode", - "eth_getFilterChanges", - "eth_getFilterLogs", - "eth_getLogs", - "eth_getStorageAt", - "eth_getTransactionByBlockHashAndIndex", - "eth_getTransactionByBlockNumberAndIndex", - "eth_getTransactionByHash", - "eth_getTransactionCount", - "eth_getTransactionReceipt", - "eth_getUncleByBlockHashAndIndex", - "eth_getUncleByBlockNumberAndIndex", - "eth_getUncleCountByBlockHash", - "eth_getUncleCountByBlockNumber", - "eth_getWork", - "eth_hashrate", - "eth_maxPriorityFeePerGas", - "eth_mining", - "eth_newBlockFilter", - "eth_newFilter", - "eth_newPendingTransactionFilter", - "eth_protocolVersion", - "eth_sendRawTransaction", - "eth_sendTransaction", - "eth_submitHashrate", - "eth_submitWork", - "eth_subscribe", - "eth_syncing", - "eth_uninstallFilter", - "eth_unsubscribe", - "net_listening", - "net_peerCount", - "net_version", - "neuronInfo_getNeuron", - "neuronInfo_getNeuronLite", - "neuronInfo_getNeurons", - "neuronInfo_getNeuronsLite", - "offchain_localStorageGet", - "offchain_localStorageSet", - "payment_queryFeeDetails", - "payment_queryInfo", - "rpc_methods", - "state_call", - "state_callAt", - "state_getChildReadProof", - "state_getKeys", - "state_getKeysPaged", - "state_getKeysPagedAt", - "state_getMetadata", - "state_getPairs", - "state_getReadProof", - "state_getRuntimeVersion", - "state_getStorage", - "state_getStorageAt", - "state_getStorageHash", - "state_getStorageHashAt", - "state_getStorageSize", - "state_getStorageSizeAt", - "state_queryStorage", - "state_queryStorageAt", - "state_subscribeRuntimeVersion", - "state_subscribeStorage", - "state_traceBlock", - "state_unsubscribeRuntimeVersion", - "state_unsubscribeStorage", - "subnetInfo_getLockCost", - "subnetInfo_getSubnetHyperparams", - "subnetInfo_getSubnetInfo", - "subnetInfo_getSubnetInfo_v2", - "subnetInfo_getSubnetsInf_v2", - "subnetInfo_getSubnetsInfo", - "subscribe_newHead", - "system_accountNextIndex", - "system_addLogFilter", - "system_addReservedPeer", - "system_chain", - "system_chainType", - "system_dryRun", - "system_dryRunAt", - "system_health", - "system_localListenAddresses", - "system_localPeerId", - "system_name", - "system_nodeRoles", - "system_peers", - "system_properties", - "system_removeReservedPeer", - "system_reservedPeers", - "system_resetLogFilter", - "system_syncState", - "system_unstable_networkState", - "system_version", - "transactionWatch_v1_submitAndWatch", - "transactionWatch_v1_unwatch", - "transaction_v1_broadcast", - "transaction_v1_stop", - "unsubscribe_newHead", - "web3_clientVersion", - "web3_sha3", - ] + ["0xab3c0572291feb8b", 1], + ["0xed99c5acb25eedf5", 3], + ["0xbc9d89904f5b923f", 1], + ["0x37c8bb1350a9a2a8", 4], + ["0xf3ff14d5ab527059", 3], + ["0x582211f65bb14b89", 5], + ["0xe65b00e46cedd0aa", 2], + ["0x42e62be4a39e5b60", 1], + ["0x806df4ccaa9ed485", 1], + ["0x8375104b299b74c5", 1], + ["0x5d1fbfbe852f2807", 1], + ["0xc6886e2f8e598b0a", 1], + ], + "authoringVersion": 1, + "implName": "node-subtensor", + "implVersion": 1, + "specName": "node-subtensor", + "specVersion": 208, + "stateVersion": 1, + "transactionVersion": 1, + }, + } + }, + "state_queryStorageAt": { + '[["0x658faa385070e074c85bf6b568cf0555ea6aa4e81a33d2c120ef55203e0eb5603e9947bb89c47cd7ad643c5d30c0e6954af7598952f87683204a2a0c2266f941a74899bd69b0ce56e42a82820f6894461700"], null]': { + "jsonrpc": "2.0", + "result": [ + { + "block": "0x1e326794f8c851e3b5675e603bf726120b074348a6c0d3e8ea354f6880a49f7b", + "changes": [ + [ + "0x658faa385070e074c85bf6b568cf0555ea6aa4e81a33d2c120ef55203e0eb5603e9947bb89c47cd7ad643c5d30c0e6954af7598952f87683204a2a0c2266f941a74899bd69b0ce56e42a82820f6894461700", + "0x01", + ] + ], + } + ], + } + }, + "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, + }, + "get_neuron_for_pubkey_and_subnet": { + "chain_getHead": { + "[]": { + "jsonrpc": "2.0", + "result": "0x9d58a80049c3eaabf68f6bc83b1dd3f36bc3dcc7d75be17ee53dfc678e4ee111", + } + }, + "chain_getHeader": { + '["0x9d58a80049c3eaabf68f6bc83b1dd3f36bc3dcc7d75be17ee53dfc678e4ee111"]': { + "jsonrpc": "2.0", + "result": { + "digest": { + "logs": [ + "0x066175726120a0489a0800000000", + "0x0466726f6e8801b2557a32e7b78d386e67769c083405a148fe57d80528d9aca8eb9ddbbfac288800", + "0x05617572610101b8a3e510b65d00ebc479d3102632250e7354a619d7719757df6b0666c1eaa0039debd861b6ae79fcbc4f82b87d5efbc5ca089e318918e5274d0380782c91188b", + ] + }, + "extrinsicsRoot": "0x226f5c8e7d52bebaa5fb56a9a9f8344667533c2f9edac2eed9c91c64a9cc653c", + "number": "0x31ce93", + "parentHash": "0x9259b771b0f59b1ed8f38f604ab4f4a3e63dc0988754e664be2d40d58970958c", + "stateRoot": "0x8d8552df3fa7fb8569216cc69516dd3067af8d5bad60cf363c1337719bd31a12", }, } }, + "state_call": { + '["NeuronInfoRuntimeApi_get_neuron", "01000500", null]': { + "jsonrpc": "2.0", + "result": "0x016a4368adc8781240b59c45ccacbf5a7ee0ca3a7adc7e893c27b4956e172c0220d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0000000000000000a10201000000", + }, + }, "state_getRuntimeVersion": { '["0x9259b771b0f59b1ed8f38f604ab4f4a3e63dc0988754e664be2d40d58970958c"]': { "jsonrpc": "2.0", @@ -2797,12 +2314,11 @@ } }, "state_getStorageAt": { - '["0x658faa385070e074c85bf6b568cf0555aab1b4e78e1ea8305462ee53b3686dc817003e9947bb89c47cd7ad643c5d30c0e6954af7598952f87683204a2a0c2266f941a74899bd69b0ce56e42a82820f689446", null]': { + '["0x658faa385070e074c85bf6b568cf0555aab1b4e78e1ea8305462ee53b3686dc801000107dcdbd6d7a9d789ac7a30a57647f66a4368adc8781240b59c45ccacbf5a7ee0ca3a7adc7e893c27b4956e172c0220", null]': { "jsonrpc": "2.0", "result": "0x0500", } }, - "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, }, "get_prometheus_info": { "chain_getHead": { @@ -6196,195 +5712,10 @@ }, }, }, - "rpc_methods": { - "[]": { - "jsonrpc": "2.0", - "result": { - "methods": [ - "account_nextIndex", - "archive_unstable_body", - "archive_unstable_call", - "archive_unstable_finalizedHeight", - "archive_unstable_genesisHash", - "archive_unstable_hashByHeight", - "archive_unstable_header", - "archive_unstable_storage", - "author_hasKey", - "author_hasSessionKeys", - "author_insertKey", - "author_pendingExtrinsics", - "author_removeExtrinsic", - "author_rotateKeys", - "author_submitAndWatchExtrinsic", - "author_submitExtrinsic", - "author_unwatchExtrinsic", - "chainHead_v1_body", - "chainHead_v1_call", - "chainHead_v1_continue", - "chainHead_v1_follow", - "chainHead_v1_header", - "chainHead_v1_stopOperation", - "chainHead_v1_storage", - "chainHead_v1_unfollow", - "chainHead_v1_unpin", - "chainSpec_v1_chainName", - "chainSpec_v1_genesisHash", - "chainSpec_v1_properties", - "chain_getBlock", - "chain_getBlockHash", - "chain_getFinalisedHead", - "chain_getFinalizedHead", - "chain_getHead", - "chain_getHeader", - "chain_getRuntimeVersion", - "chain_subscribeAllHeads", - "chain_subscribeFinalisedHeads", - "chain_subscribeFinalizedHeads", - "chain_subscribeNewHead", - "chain_subscribeNewHeads", - "chain_subscribeRuntimeVersion", - "chain_unsubscribeAllHeads", - "chain_unsubscribeFinalisedHeads", - "chain_unsubscribeFinalizedHeads", - "chain_unsubscribeNewHead", - "chain_unsubscribeNewHeads", - "chain_unsubscribeRuntimeVersion", - "childstate_getKeys", - "childstate_getKeysPaged", - "childstate_getKeysPagedAt", - "childstate_getStorage", - "childstate_getStorageEntries", - "childstate_getStorageHash", - "childstate_getStorageSize", - "debug_getBadBlocks", - "debug_getRawBlock", - "debug_getRawHeader", - "debug_getRawReceipts", - "debug_getRawTransaction", - "delegateInfo_getDelegate", - "delegateInfo_getDelegated", - "delegateInfo_getDelegates", - "eth_accounts", - "eth_blockNumber", - "eth_call", - "eth_chainId", - "eth_coinbase", - "eth_estimateGas", - "eth_feeHistory", - "eth_gasPrice", - "eth_getBalance", - "eth_getBlockByHash", - "eth_getBlockByNumber", - "eth_getBlockReceipts", - "eth_getBlockTransactionCountByHash", - "eth_getBlockTransactionCountByNumber", - "eth_getCode", - "eth_getFilterChanges", - "eth_getFilterLogs", - "eth_getLogs", - "eth_getStorageAt", - "eth_getTransactionByBlockHashAndIndex", - "eth_getTransactionByBlockNumberAndIndex", - "eth_getTransactionByHash", - "eth_getTransactionCount", - "eth_getTransactionReceipt", - "eth_getUncleByBlockHashAndIndex", - "eth_getUncleByBlockNumberAndIndex", - "eth_getUncleCountByBlockHash", - "eth_getUncleCountByBlockNumber", - "eth_getWork", - "eth_hashrate", - "eth_maxPriorityFeePerGas", - "eth_mining", - "eth_newBlockFilter", - "eth_newFilter", - "eth_newPendingTransactionFilter", - "eth_protocolVersion", - "eth_sendRawTransaction", - "eth_sendTransaction", - "eth_submitHashrate", - "eth_submitWork", - "eth_subscribe", - "eth_syncing", - "eth_uninstallFilter", - "eth_unsubscribe", - "net_listening", - "net_peerCount", - "net_version", - "neuronInfo_getNeuron", - "neuronInfo_getNeuronLite", - "neuronInfo_getNeurons", - "neuronInfo_getNeuronsLite", - "offchain_localStorageGet", - "offchain_localStorageSet", - "payment_queryFeeDetails", - "payment_queryInfo", - "rpc_methods", - "state_call", - "state_callAt", - "state_getChildReadProof", - "state_getKeys", - "state_getKeysPaged", - "state_getKeysPagedAt", - "state_getMetadata", - "state_getPairs", - "state_getReadProof", - "state_getRuntimeVersion", - "state_getStorage", - "state_getStorageAt", - "state_getStorageHash", - "state_getStorageHashAt", - "state_getStorageSize", - "state_getStorageSizeAt", - "state_queryStorage", - "state_queryStorageAt", - "state_subscribeRuntimeVersion", - "state_subscribeStorage", - "state_traceBlock", - "state_unsubscribeRuntimeVersion", - "state_unsubscribeStorage", - "subnetInfo_getLockCost", - "subnetInfo_getSubnetHyperparams", - "subnetInfo_getSubnetInfo", - "subnetInfo_getSubnetInfo_v2", - "subnetInfo_getSubnetsInf_v2", - "subnetInfo_getSubnetsInfo", - "subscribe_newHead", - "system_accountNextIndex", - "system_addLogFilter", - "system_addReservedPeer", - "system_chain", - "system_chainType", - "system_dryRun", - "system_dryRunAt", - "system_health", - "system_localListenAddresses", - "system_localPeerId", - "system_name", - "system_nodeRoles", - "system_peers", - "system_properties", - "system_removeReservedPeer", - "system_reservedPeers", - "system_resetLogFilter", - "system_syncState", - "system_unstable_networkState", - "system_version", - "transactionWatch_v1_submitAndWatch", - "transactionWatch_v1_unwatch", - "transaction_v1_broadcast", - "transaction_v1_stop", - "unsubscribe_newHead", - "web3_clientVersion", - "web3_sha3", - ] - }, - } - }, "state_call": { - '["NeuronInfoRuntimeApi_get_neurons_lite", "0x1700"]': { + '["NeuronInfoRuntimeApi_get_neurons_lite", "0100", null]': { "jsonrpc": "2.0", - "result": "0x35364cb26667d9765b6aaa76c1b7f0f2786c03257a090081bb483b1e6862e409f64e3f6aa1c0384f95f3ec8f764309523a653a5bd814632fe2eff931d35c606a5e0c65005c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046aa1c0384f95f3ec8f764309523a653a5bd814632fe2eff931d35c606a5e0c65620bb70000000000000000825b53000100c0dcbc2b619e07312e6fa2e1b9c91eb6826c77ab732fa1670bfa175c3cc06b01d89c740d9dfede764de5284c89dcedac74aa23b2d303a668e251620b78d79949045c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d89c740d9dfede764de5284c89dcedac74aa23b2d303a668e251620b78d7994907f1a79e0402000000000000003aac57000100e6e23c10ab6ed114577d8fa56f976d350aabea07e0382c6ab0313f1fd5b4ed7c9aa545ce482f48c3160fa706bbafe923bb8248403141729d95c96699b615f04d085c00e390160000000000b40200001329d44300000000000000000000000049080404000000000000000000000000000000000000000000000000000000000000000000049aa545ce482f48c3160fa706bbafe923bb8248403141729d95c96699b615f04d000000000000000022435a000100866eda07c029ea2856de08c183ddff461cb6ce83f8ec49150ef5647eee8f4c6b40469c545b3d0396a76ca1c41a6c090266e2e532adc9fde080d9e90d2e7b093d0c5c00dfb8190000000000b5020000026fb5d50000000000000000000000009aac04040000000000000000000000000000000000000000000000000000000000000000000440469c545b3d0396a76ca1c41a6c090266e2e532adc9fde080d9e90d2e7b093dea2b0e000000000000000046d9660001000cc6dd507099d72736a92d6f889e4024e3431ac57eb9eb1fe0ca3302c6d4c867509b91e2cf336358ec2f3fe6e0598e2909c29a57597765240dfa8db41e7dd46a105c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004509b91e2cf336358ec2f3fe6e0598e2909c29a57597765240dfa8db41e7dd46a00000000000000005a9f6f0001004af7598952f87683204a2a0c2266f941a74899bd69b0ce56e42a82820f6894461257de87a71abb164403f7cb9ea65d0721f8bb89d8bd85754deceedd91e86053145c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041257de87a71abb164403f7cb9ea65d0721f8bb89d8bd85754deceedd91e8605303b0ec68b3000000000000006e4478000100ba7c215ab878d9231d11bdaa5e4717b90d3b85df986abc669de607b1da6a020c74d879f5f872947565597d2f0c310fa0658d168ecd68a2ad3d5ec63438561643185c00265e1e0000000000b5020000583937a2000000000000000000000000d54f04040000000000000000000000000000000000000000000000000000000000000000000474d879f5f872947565597d2f0c310fa0658d168ecd68a2ad3d5ec6343856164307ed6f74c302000000000000004a7579000100084667e9ab96aca6c12c3094d740142cc4d36e423ede27b752978ffc70841b4dda618f84f833dc38b54f31cca63c408134bcce60f38c16c2f64fd4cf37068b0f1c5c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004da618f84f833dc38b54f31cca63c408134bcce60f38c16c2f64fd4cf37068b0f07bfb78a48170000000000000022e888000100f4b1b7c1237c118a43504f0b1f312c027fb7517cb46911d9a9ab1c432be0b039da618f84f833dc38b54f31cca63c408134bcce60f38c16c2f64fd4cf37068b0f205c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004da618f84f833dc38b54f31cca63c408134bcce60f38c16c2f64fd4cf37068b0f0753238a4817000000000000003ae888000100446ad8dfc37a54c8c1030e70eedd53b7b410cec1376a0aae42fd376b9749272f002326240a609c72641c6a3fcad3ad2ee33f2db95f6c16e181f7c62fa063834b245c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004002326240a609c72641c6a3fcad3ad2ee33f2db95f6c16e181f7c62fa063834b07fcbacd2e0200000000000000eec2890001008a90be061598f4b592afbd546bcb6beadb3c02f5c129df2e11b698f9543dbd412aa58acc7df6cea78de0928a5c6c2e79f3d24e5893d6a5971738cfbc03ca8f33285c010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042aa58acc7df6cea78de0928a5c6c2e79f3d24e5893d6a5971738cfbc03ca8f330f65f486c4ba2401000000000000007a32c70001feff03000efdb10e8dfe2e73b6f29ce09aaad2c374dc22e2a64fcad4a77ed547e9175a08de74e52b42323230d99ec6f46fc1bf01b03f54f11f02fddb9d9668535e8ed4632c5c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004de74e52b42323230d99ec6f46fc1bf01b03f54f11f02fddb9d9668535e8ed46300000000000000002e0791000100984a52dfdfbba392625d238ff859ec78d79b04f8ad456c9ab8d8426a085d4e73de74e52b42323230d99ec6f46fc1bf01b03f54f11f02fddb9d9668535e8ed463305c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004de74e52b42323230d99ec6f46fc1bf01b03f54f11f02fddb9d9668535e8ed46307b7ec18d01f00000000000000720791000100c260f03b11e0e67574deb81febf89f6afb697d6c36d165f4ecb65522ea433805de74e52b42323230d99ec6f46fc1bf01b03f54f11f02fddb9d9668535e8ed463345c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004de74e52b42323230d99ec6f46fc1bf01b03f54f11f02fddb9d9668535e8ed4630000000000000000ae079100010024126de9392aa70486873b23182a00ee1b9e2f394a46d409230871113a76be56b88597476f139767a85863d096b7668620bcf7cb531a950006f18b26d4b30600385c00792d2b0000000000b60200004a024d940000000000000000000000009756040400000000000000000000000000000000000000000000000000000000000000000004b88597476f139767a85863d096b7668620bcf7cb531a950006f18b26d4b306000771d8c05f520000000000000046899400010062380cd8c9bbe606cfda6572b6da580ec035ec57b18dc3d64acbcef53c3efc71143906b4ea1ab0986976c98468b8371bd54cba3330c0e895a1762d8e96c12c023c5c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004143906b4ea1ab0986976c98468b8371bd54cba3330c0e895a1762d8e96c12c024a930c0000000000000000568da100010006c112ee93775bb184b6bf00f22adee24091efe725c249db3ba01b15274b2a2f9ef89253596e8764aecef9a452db36da8188153e0f707f1a0a37011583b5e82d405c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049ef89253596e8764aecef9a452db36da8188153e0f707f1a0a37011583b5e82d07e68ca9693100000000000000d257ad000100e45433ff9820f9d62b98feff2a95281d14ff6028a9b3c78063a11bbd0fc7bd549ef89253596e8764aecef9a452db36da8188153e0f707f1a0a37011583b5e82d445c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049ef89253596e8764aecef9a452db36da8188153e0f707f1a0a37011583b5e82d5a9c11a7000000000000004a59ad000100fa01f3e6d839007cc8179e6cb40fb87d4b87502315568340cc51255d4b526d59b24a20c37c76fe89b0ab49ef5ef0e5ceeb33964ef89a496944e9b31cb4915d1b485c004bc72d0000000000b60200008cbc4c94000000000000000000000000464a040400000000000000000000000000000000000000000000000000000000000000000004b24a20c37c76fe89b0ab49ef5ef0e5ceeb33964ef89a496944e9b31cb4915d1bd51500000000000000eedfb4000100", + "result": "0x046a4368adc8781240b59c45ccacbf5a7ee0ca3a7adc7e893c27b4956e172c0220d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d000401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d000000000000000071530100", }, '["SubnetInfoRuntimeApi_get_subnet_state", "0x1700"]': { "jsonrpc": "2.0", @@ -6426,7 +5757,7 @@ }, } }, - "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, + # "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, "chain_getBlockHash": { "[3264143]": { "jsonrpc": "2.0", diff --git a/tests/helpers/registry b/tests/helpers/registry index a19c2d2b28d4e25b5c1212ae82cd8a3f2f2b3417..cfce236fdb3011fe476aae599c10517b32b63129 100644 GIT binary patch delta 26177 zcmeHweSDO~wf}QwUjqpQNMI8JJb?rfNJ2sqNJ78_2oOjhAwfY2$tL@RtR%Z(UkFig zp^7b4toVpiDpc`8EB8tjQ{2*OE4R|0w9?A$#j8bHxrJU)vCxW@R@&cp=Gn~)p|>x$ zzt8WV%V*7V&b*$PIWu$SoHOIs&kud}+p)3q)j+J$p#_}7HT&V%4@|UD|I}1Nt9mNU zLy2DDTWZ;8eZ6Hqy~^`e08F-K>K|DW>9r_YM6c_0)>L{!4_c?uzw7&~)9D@klr@*$ z)tN1uKGbtW|n8=rjGeZ3ZLKKegpjjGk$qNQHWped?k)M5{WT?d@8i zvDxX@8e283q@-e_<_RcCO2Pu4)8jHL)kK|yzQ+g?HCMduEK0UJ zC^k5=KvDG6k5l3nm|sWAfZMZ9^|tEoGaIQ&KQz-r)q2XT>6V)LD{jr#t7hdVE=zcC zzPF>p9mw`+8#QOUx-nnv(!WqVUf(zCIeqD@0$Sd)WtNFdH3?7YpD&)EA1L|-)#}@d ze-)~q=M1#8-KM$MwFUerq!WFox$MffXu+*oOQ{HPwggIpc{AtERTPDC>q|~Sa=F?Pvu%$)w`&)zU?cFMhm~NC0Qbn;j&xqo> z+Pu+{+Ps1FS~m)E21IHAZoffiPLphKw51`}ZSFu@h0o{p`IS2JtI^hIn*u(!$M0?t z4KeyeZ4L(1E~Hld-VROGWS*S<{Z|>#Iu<(JU<0$#MlOG6qt9Tel9B~(f2ZgsS(8#9 z`^|Erea!}a&JHiw!#TJsTV-)M%7>zXvdU-^U6B$ELR1Z-FM6X{v|3Y*e5xB1=_8g+ z)E_G8j8zo&lJb(GSobKe@JnWv(&L!@kQLMNa3&@9e6Rc{VNUkJuk$B!XiSf*!o}!~ zo)e2w8Rq5(m1j(EQ7132rWF0ck|+Bk`TCnnH}?;iq3^G%qPO%bRV(Nnu8v~K`r7K# z^e*4&U}N>=%but6k1kKA_w>ojS4P37mv4!Jl{KrP;A=HqQLwePI|^D?^hCjTS2V?( zR}`~7K3;iGudGYMs^O`7g)a9@uWuu|%s=wbH2wQ4wJ2DBYY|=6Q_T+jz^%WakNKYQ zEV<{&+r|@p%C~H%1pctfV)Qesp1@+$wR*8wY+hM?m076g#oNy^d>?%{S^q}EL@Yn2 z8fFZOBZ^;~H#1iud%zo~k61gM67}-6ce6OsoorO9h*HeT2qN{4V9{)KMs9-wOi@e; zm{oQqQ7?5m^dXHSC`nIgOiCU{lvc6H9WeNX6vqloY+t~vWb4Zt9V7E1(F>gcXS-rj zlq9{oaRH6fzuWi{rRsM#-A?KHn@wqe|Im~+E}hJ=^SxbWb3J7e$iN>({;@C=SnAB8 zJmeg$hn(do$wvmMqmD@XZw!73#lnPNiafT=Q&-(^ogw;O{>- zH{tKlmS+6*v^;>=t1S}%C%UrP9O6wE$f2)ssZ_3Sb`@c1d(o9Mvz+Xuojy0X*1b_{ z40LyD{`i$M3TKL5s*t@jvtYJbfL^K)y<`T#4y960)~1K5DK@wN`t2}~1i8+mjTnQf zd787u>zVKMw7S>LZ*zLqX)ctYF4MYdg6)3IOb#EGFqglUs7$PLD+IPI*wL(^nPlEl zcf)#vx#`im)J|kJYZ?AbF{$jepo}?`mHHBGrG2$P&MOW2*R@&X)PJE(oRUcc7lFtI zQzw>|b&BFd4r{!k=^3qS$lbH8^$$cH`qs926zqAm?N6359iqq$q~Hh6E-F%jBA`fr zsMDeU#&4#5`cFHj7i}damK+|hufy5Cl}PkKmbX*$VeGt~-k`J&>~_w8*Vk>N zQMT$2caGNI@s`pyJ*jitjBP|k%R5D$Qe#IzU#QskG~Y(eb(2VCo8H!$PTNt;)RY}W z^);F=y3);Wcl!OM!TcH6Hg@Pu-W;86$fuq9%nhZqOZRV>N}2jsH>BY2cQ)KXyY(@? zIr+Q$_;jz}Q~XinAGVJa{Ll*rC|)@L$Ye*9T{+nEdEY;q*dfyM9?InzW;T)z_iWs# zo7fQ6E_co^(2`cidA&Z|mdlUBrm>m^LRq(3)2d3ai#d!5G_2>LY9 z@=JQn17pTq5`9)C`|Jupv;6{HB;~5C=2~Ah*9TYAFG#tjfA+xg)a$ZkQ<`_O1~TAKdV2klrAzy4sle(H-UbU^>;i#fwa zFiKgWIsIObAFH80^}&*uM21m`V_48~AIeJ{$Bfa#-qSmJ8|D zhhitY+jT(y@6!AM8LV&qQleh6bGs2Eu%0VBDUz^fsNM!iU1ZlEdc2z&cziV__KfAF zkpz0@m-mpfCvNvn27&&`C!Dler#(w2jG%ry7*^%gpvSsjX%J*#Nz>QwSxg#eOX@kf zr`$wtefU%P<_>0W)6bcc^`@s(*9N3Bi`g5LfWx758zFm?%>XQM%2tW*QIu^Gc-En8 zH$wI(I{>gf%1-gw#T5J$bF6|gc8icSWv}>bXZmwbr|5rt>OsBkpT_F@_odQ7{RjJI z;4heh$2+h}9MTUzovh#X^lCZ`=xI74anC=kEjenGxo3~^vMB5rQ}9#F@dXZ4b6kM- zJr3oBh&#y?`~(H3un(N-EB&-6ZD{;_97W`Y^ksec{z+qYFjB=DB!p>&QX=B=4t@Ez z)E@W#Pi&zDQj~6l#M&5%jHQ%_RD4r`ytk0I8GTt4E&j_8!fjM&&r{!T57}Go2(|~@5RrSu zcc(}%Tau&b8@^SnANl&6!YxzPrbtVg)C@spf4b&omb?*@9X$ked420uaT3sDj!q1{ zft->0B02wJBQr}bM@owl8ZhV<^g=Rd6SRt2a@0FAP*GOou#uUi=H%owD377aXeW&o zy>uhVqK`65M(8;Q$C6*)`|W)Fo`bi9nx?AqaBWWPpk}!zdWaE6B_X35UDO`Q zB)UVMz4{I$vtKpx31J?Kxya}AbVsvCo96aJN?VTeMb1DP`c5RXUl~|dZ%_0)DX6_g ziIS9_#%I^CP>sQpE%H1UWlQ^CV9SC?@;0X*XSr`uni#Uh5bx$Hu2p&TXE@8q6d4N~ z97W!V;(Yi2n#bmD!hjDTIWpjqAe=;#{4Lg2#Hjl==VS!k~b4_i;?IQ z&Xe58s)*Rl|Q4jx_nimP-`^KUtV2ZS>IS!d3#0Uyw&v;b#mo0)EkXb zc8@4oS^|{>e!^O{(vS0R@1Urfr^VOZDbB=3wSBq~{pho9Yn!TK!O@EkEe);d9eoUY zlR?wmrp%H@WD?BO0Y!B}AQm+lrRKD&_$Ra%{(#o$m)t6~4Njj{@{EYf%TX)QIwzD% z&VZ)g(G*!8>f607>ua3d?IEwz)zpA}75`@BsCAmp?QD17rQ!6h2K_>BBvy;2PN&Zu z=x+44INLP{TrRBziYt!*n$&>L=?(;$C?P*bMW|@G$lvM}3wX2)gT#zBXjC%qXbS{7 z{Uy_m&CJDUrq2impi&F$Xi>8(ZD%-p=<*4)^ey-NqJTq@r(M*h^mOHC?x=@~pHcj{YT96%3j?X`-YDQ6hc2$1<%!YRadH9DR z>hyVC!4?hs#2robp{k1c?oJRDfYzn7-tFn0S5=o^lsC7jK@|tXoNC!M1^v4Q2N^K{ zaxD6HlGC>y8m34GHmObXogS~pjV|l$)ktUMC>V8vok9jbVd$Z>!>~7q>Ws}u>IWmq zRLON}SDPFAN0+<39a=5bxe-IAJaTzEL6S@U&E1J~I{dhemeACUvSo6|L$^{XSt6UTx$Xb`A+?kRUIk^gXMxiy1x^8e%hgoqG9pYv2w1(dm zLlex0iH;iRwHQ*_Y2wF5(OTX;geFieFCRvY{L>*cg-&yIC~ap~7(W(|_?TGAHeY3Q z*2oKVDBl-LY36H;P8eb7ag@fcBfTi^U>uD#Cz|Mh5tlZMQYeYfiAV8I4I`CO4Oksc zspfQ3l%##bX*|m|@ngg3ZYmT>K1b#Jm3X?JR`Od$A@lwbG?A^g@VSDh$s^H%h6wVt zk*IN-h4vXWrjDXY z^7iQPml9}{nJ)3#xipH8O{VeW44-z;47wq#B$+la#66or=qM+DdIFUJ{pAGuxtXr= z=QF9q5axMeI<1X>52e#O1GG}C)8!J<{=Y>eeg6B&^n4`U_ovVs1{i)egG@x%{?P?q z=U>gCJVvJQsT|sDG8#82?3+RD451vM6T_^KYFMhpMD_E$n@XW(u91p-|8k#uo!bMs zH6GKrUG~)^{`f4?dvjJ7Q4)(3s{hO7k>NchG?j*s2~2#6DHapXa!LH+Y;v#|6E~Go zE{ikq!cwYbBTW1Yr8LP*49oydF6Wm^DFMm!+My0Ueh$qONt@?TNF@E`94hEj_2CGU zXyWN}X_`^@&i*7gZlPhuQ7Va-l~IS$!8o7wH6nbujB<%3nfSzcR25+fYhQx2@N@I% z8W|Cj**Nsm0?Lkd-oy&JWE&Wl5pJrcCDuquacN>f?)17nfvCnd{C*u>H)V`7nH`2^ zLudrwB76KYuSXnUK;`*CR6^Yg zDlwz0+R!WVD9ayhqmgQ!iE1K>8^J|B@22j0Y$F3WC@uV68$BF3>+;TaiZv9&S>f02 zq%RE)pB8?mohlez4nvXrMC9Zg&G(#-($NmCHc%q}zz5EAhClI9S~S_oyC@~Rd?S4q zM`>~5<}zSjH~AtJg%R*l1O|)vum}8&?U@uFy_r6wjJyGzc6m^zU6!3zXp(vgJ}*SG zsW^OZh(;3?^Ico8s?6bUZlSzY6()*b0PV6u3GLcCXL}zW+od)4VevktQ>pB}-u`y~sXnQ?@IlOTzjUC^YASD2kNAWf~Z&Jqv8AfuRr1g@8^oP;|ltU|9wRVlD#9 zHZTx#30RJSftV}6rW+WDxe6@Tz(CA3V0i`xVy*+5A+bUbLr{q28yJYOm_v$EV4$ET z29bpZ24doX%``9&GXmHw0|POMz={kE#3TVLHZTw~4p@nSftXZavkeTyqysCJ*h~4I4BXX{RffxiRw-^|RL7hsOfq|Gy{NZi1G*pSE;V0%rwE)3v0BZ#Z=@8&b z0g4oMWwih;5^NBlRf0|d+9aq6Fh+uI0S=L1hX994aDxD0qC{aq0mh;40Cx*`m;^Tq zaJU4w3NT)R+XOg5g4+c+Qi3}KI7)&$1(+zoT>=~}!QBEJBf-4_bVzWY0FxwmK=6(! zS;7YeI97s(1ehYh!vY*9!6O13FTtY%oFKuM1(+(qV*;EgLBaN>NfJCEz%&V-6kxgp zPYH0cg7(`bubZaG;I~C^h6K+FFjIo(1UOZKg1t@CBzRGPSrWV?z-$R#5nzr4uL^Lw z1g{AY#!1w6U4VHKB*D9;84|XDJ52c!6g+H#V*?Tk1~wH+P;jpamOF$B)-}zNpx|3m zkpuQIsVpO>n6R>pnoiqNZCU2u@d6xk;I0 z?k~nbF@2*PBi2X!%6VuzHf9)fZT#C`fXG$BKllRa_#nKTD*3VPl*%g2V%tfqHXGYc zt)*|YV&VW>VPGI;7qB`512MaS)f*Uy*$Zr?fq|HPz-~1#5OV<7Z3YHn4gy=Hgv3}B zfto`=R~wNa<}k3^B~}b#jsUyEz(CAVU~3Ev#Jmiw!N5SwF<@&A48$A<)@WcL<^-@N z0|PN9fjO0g5UMW*HK%|!8<8O9G_V!}12Jy{bHSlS2-KkFEKn_if}C?eTO%mwxd3!s z1O-7Cfwo0ZA*ld$M^KP-MQmDkMsN^y718S>D2TcSv^|1?s_Q^IA}Girh%X)k6@tD6 zs5gRwtQer35fo&_0o@QmLDmSMK7oe1^724eB5;2s8gwNA4Mb3oH4bPnf`Y76pc^A7 z$Vvy=6+uB(CeTd=Dn$NlpxqG^WaR<9D}sWo!rOu09l=3YG0=M=D9D-vbaMm+S>-_Q zji4Z_0%$0Lf~-oQTOugPs^;FE5DIJ2X{K_y4X+g7JPEEA;Cu--2ylS}odT?opeDeD z5_Ai2kpw#gxLAT41XwA-pa7Rhuv>sjCAe9DRTy8$0$T-KEx~O9TqeQo0$eV^9RjS8 z;7$S7N^q9|S4eQT0O1#c!uATVUV{4sxKe@#1bC|i4+`)$2_6awc$I_?3vjgrj|lK~ z2_6;T9TI$5fNLapOn`7@LUqRlxK@HE1lTA+F?~!;5m_(yfb9|#lfl#>K`{|b z9tp-+(Elc{gvAUnbxKfhziER61>>815)@2tf?EfO5Dae$NKi1lDJVg~=%$Sl6ijaF zlAvI4(3>FM+x<`V7nN6D|C>YsvuLK1Xn+&F@7T^{c zS__a>3$4I?kI`f}K>qV%G%4i>(fNL6snU8ChHS%wY;O4MWAuJ%Qj^bY< zwia~?4*%zil#zH#eQ&(Bv7@o2&FS_ux?N^cqhQ2lRgzU-rv;>=t6FhuwK`vrFEOem};Ol1!K z!p~?T)WoNMM&0;a`8kc@t!F5iG`{r=rBaap(;1pLcB=)RNtHEug@wiS&{z9m{)bzD z@Z->oJij|bDJA7_ZIqsQl(x?4Z-g4BMY|!aUHI|!g*l9Z+wVh}J9 zjY0dy@_#u?Q~xovrc*b6=NB|Prd#mIW{a}fsO=D{p*Vix=P+Sx6+snf+ty#w#InAo zmv%Te39s`;INvp*yZT~e=l$i5idIhBxZ_-o=6UJ zR#5xf3r*%P{3rQA?Brik&fh^)GXMCOG?RAmY3FGr+iu}CHEid<8ZXc-z@EH->0HTwaDnR9?6cg|OSI1?$DY*%gDOT! zIE31%NPfZJu*kw7d%!}^N>@?8Fwr7FS|oza?ZO#W-?=m))W^^-Tly=Ud!6raa5bO5 z6~@TcZuo7uR9T(sluo4Z(2g1ho29ENd@o=Z6^7o3&-eo21!Tm*+AI86L8Adk8nZ#u zaSOfM-_tc{IDGyOC?>}nFtP}jA4!VWD@@RuPuOe?KYHQI?*tjJz6zQmHGZ~E^T69w zIOj{_cb7NV4qtRl71j>e%4K8ujPq<{NMsa--kcGHDtxeV`&Exug}aTr6^2@|0tpY7 z0mb{_f9y4i^J%yPV7TFnnsO8ujHg~{B5EobNc1DptS_jH#0bjcZzP@XyNwox4&1;k z3DP6EU;qc$9W`?N>7XTRo-l74{=#rbjip?e%3IbqdZY(&JoS%<--E$ghb$x=pJbt! zn+O){bP$?`Dx+jYIcTwG^xYfCsusRgf}u2@La`|ot{H`edBtYMOr@Fu!@wa+!N!(S z=abR;*1Hlzq$E_dxcp9t^d>6M1lXGt3;ZE5kq%pw!#8brf+P{TZAyr^T4eQekX9%| zSU0^L9ymfAu~28fT{G&;Q6jxL;QWhr_Dz(d77E-Xu}qs+ApFjhBNpk&D}40W(LR`7 z=KnmBO<~6@{75#-fPouMt+BmL7D`LXVJhTPDvLC>cOHrj?f6aG+4kor&)+xLAq*3| zTm;XZu+RW6^vFyZFznHxJ8@I$Zkk<5p$vm>g!|q}3zaVKbZ!W0Mp2=qTDPbHlgaCf zhucm5425#V8atM+ z{T0QSDruFjo*5n9@+&wGFna_4+IzH$s`#JYqj#BoH9vQeZlfk%{5};jd!;~=`4``( zVtRwW`aTteI+ww+qvp>akqIEeEb0QU6GnSMz(O02Q~M zG?`iTcER;e$cxccv_;$+6NTig>8&E-%v|r4bt%K_wFW^sAHYOc!|(invP{G6PQLpC zT1^k}-+n-IP4V^$UhpBUpe+9R4`FT`VP5(8M{s}m$%jS<{L8cqJ@x2is)g8f9v@Q*y6>)!U_sn)1w!V#{GltfoW}8Yu8_wx-h7@v z|1st9dw)ZdXaaxwHxwk5JAO-EQ>u9c2$`bKeb&y8{+4E#C!$k%&Bv6<9UoI6P2$Tw zhC4$VKlCv*n$pd$ijt=C;;WQunrwdENcq53Z2D99p{q0pE&AXp1(3bz6Li~DzULEK zNz?dmKB07UlH+#>%;xpKqXm@1cmIwWX*$35J6dAOH9w;}UmwL+e~Pm5_?A!6J2Uuy zd>{z)n4f|KSfHbS^Lc4BU4M-}xC$=AXL`Ikt=+xK6W@ zR?WvHLoi3BztU6gYj(r6OG@SC{FXn`gyFfB9^rE2l8mU#<4^txT|J-w`cG6!3wCAU zzD>ohJK1zvxa%uy>X@3kE@x+XJ0xmXckdlVWf512O{2xUida@orMVv0VzA-LYQ=VJ z`1)4$uL%UzgM*bN{2Z}TTFS>W_-j=0dd9M;ntzV5d|Jj|Wb77N&Oc!wqlOoln9Ee# zZ}{!}-%V^HJ8P^8^0LM`KHJQ^$qkH(gb><$vrri8J0-fI)SWRZ8)_!c|U>B`{vtNr5HHH*B|#?>M0R=Uo+hOmyI1Y;Ha(V_CO@?Q^O zD{+HumAK!Q$kz;I#Vp3k`B3aU_@>&~tO0e$S#cpQIXoej%{Q|VR_=;twJg!f!|}+N zWaYn!XEPR_BFc&gePe^LevT&PgDWUEDk!(|DWlock_u~o!HMDv z2Dku`#gx{|ARsG&)DCBNv)GZ|;}4Ezg<~tMB;|XBii{XzBXqaG>Ez64mYZmSEHt1@ zD3GmO9mBG0mza4mRa$x77<6d0m2V!yN*VC)jA4_2_cnY;Eof$QtjbC&&vLL9w%Qto zXG|BxHpp&rS{;g0CQsBNUE=Q7B^qCy%x1yaWM?uM`ZCtGeRpDQ_*pU=mf#j8YgVO0 z7PJ8cZ7>Q7MhfcgS5T0bk7f4`=@xl{R%Npl_Z`QC-yMtFDL9>u9M7CsjsoM^WZD*f zVm#(0+in#%8#cJs$4 zv2?cA3Pr=%@LQAE?`iZtQSAY%f*-CwI4uXQFI$y^{JnIxY6Q-gDdjF)i}w5Fb;v`! zb}~zcryxEF*7$bsI{#t5b24*;j#w!HlC&3^rb7c*1x4J*i#YWOUOX%+E+*xO)vjuR zHi+Hcj%XQBW?QLD-mjcjwS0NC^d5%V?I`k?L}t74vNcv@!?`2ak-{^kuyJ&ZFPy?s z@oAgFCgStp6qba~fhnw_pzrveA;@l&)%8(LMq{kTwT>$9ItZ}G`S=Vrc8Sv>ZsfIL z;njR6Fl>t@1Yr#8c~sNlKh-y$s;l0OD0=<>q+Sr`B6R90F%W3wY4JT_Ro)g~Fu_^zJ!n`!Wk%vEKB2o*-|$%1bkjG~t$ZtI$Xw^QS`ClIjWg@tvKL@;H)uD2yi%oic*{&)d@eO4!BL@ ztm}pcHDq1Lb>Njqp|~93H_A}GC`4_-YF<(ThxMkMRnpyazSrZ?qzY}JabZJY=BCK? z3Y3Xsfru8xqtH<4N{?~o)m+AD%Ve$*mC3WB*oEE3M!z_+4fj8Qnay7iN#)s0HAY-@ zxn1Z0IDJP+UnPsZwcokgxJ+y@--FD_k&1AWA18H@5vO&7ApU$ROB;Vxj9At+>vb#H zEVdZi2wS2p$u`cGZp*YO*Z9=waAn<)!*a2WO8BK5HjR;uPn!-eK{g#brbQyNSxh8w z>vT4GXq=5=D|}9PO4-6MOlQx>n?~4T`Kj5^?A=qw#>YE}RCw)SOj|JOiIJ?|FJr1X z$!6Rl<5Z4CZk&x5l(Xr!R2z=IsWx$4Z&*si-xeWCx{W_l&hm};OdJ1UIhzxk4ez>Y zc+6u@lOYrMjCo9Dc{W}@k7X__wBgcqh;rH%h~0n1ohZR@`QSK0=xs+Guyg|SxT zk5^VA`3lXCCB+WM(5K85v>I9L%h#Kgr$nD(X|`G;+=DfnSsIe>^De|-^K5z=e~5m`)YPeA%FD%}Gb zwI7Yby=JBk8sdNLSRGjPG5{h7H*!x)Uk4N4n_E#cXEY zjsbM+wDs@ZouW+xyLV?K@7hZ2-9i3JC36fB_a-*tj)q_2%h)cPzVEICp0HMdN1lg3&n@+vnlwY=ZX&4lmmRz5*!B(^8HId^dbJ^B`iJb@POhD4leGXQQQ$* zti0OEJFA$L-?Ef-n2!z!dSfZ%_m}ynOWBO9mj@JjY;d8+j6#p~E8$K$&d*dqwbQq! z8A|P5TsbkI*d3PM(TF-U3q>-TeiG^W*!z?ifwl-IoI=IX0f4y-iBH+=j@Hgb7;;K0 zHfb$EUbdVK<6o#|@i-YYEyoo9Ml~CbyA0p0W)6CrKe?Qx3&1seA9ml=Wo%S_Upw9&(2lc%yXUOYJ!kp4W$4u1{M0g*VwE<9-Td$}Ho*u= zy=6Cqi0F|6R}~fI+<=x}=-=`SgIa!p=PhUBU~+(jou%Osibk9taYx%|wh-^c`vO8Q z>=Gu90X+~J*aH^_wCMQY1Hf_YGU)6}1Jb=cIGvC#knYNWbY};r3kmT939q76=Gcq2 zOSUW6tp?<(96YHjkpsW$B9r~1$U=6^5{q52*yGDOg$_H==npmrG>;#*5q+I4jc!k? zx4@+d-)Ptn1eUu1SV*9iz{~@VDk}A*_4^Bp6zYq{NmnR`UZPyw0qVWC3tgPY+u_DF ze!NT*W2a3*D9q?R{`9-niviBWaXAA^uI39h4lcgHr>%42{SK)|@ZbC%@dBw-5S0nb z6|8xGCS56Hub|H(&0BEa$j$9XwcxZ6Ee?3`CP||UB2YINN2I%|qSH0P!WHTxK; z9 z92ZK1@Q8gAln%<22JzJo_7D08MI{7$L4Uvqj?|wgY>%aVJk>8nKMqfGxy5dVXIKW6 znT6Lw0*%2=D3!HAWR~?6Y%ptYzovvDx1!H7x?j$i{&T9|qyd3q(j+wF9S#3qnYf@6 zra4??z!gk9cX1=hO1j|TkbFHwT&qbP%*0?*!Ni$@WwY%{_J6mw^yk>3K8~$|#d6@% zvUmX3hN3TX(ci?j|1ho%{e5iv598X<4U6bs$+rEN@_)v)p}&i5{{m;_4Okts2QwC! zNibHS-5lztZz~?0u-Hgg{NHjOHagtfHrC2I2@hT?tD<+iZ}u@v;@!DHNpg+85l=@ndIrUoi8`eDJOt55T%8}3WR_LrB5UPm5-B=cRx1zDb>jJHT?m-ol$`m2c7tuG&u~UIq3Gcuae7rl>AQtB6 z2GA(gCH_IR$2Z?(*QNw1VGP^`Rk3~tK*(tet%``8;F%DpsEouw{G20JymGsOpK*C) zk5VCm3hhee0N$=1%(B%6%U1ujEW1Fk>>4ew7+3y$FwQwUAa&z@-`~KMe}VJ?H)uGZ%-(ckd?+F+3ZaWiql^s&&P_M=#nA*10>O5|U29M+RZiEP*vEy| z3v(Y=^1vK}*-HvC81JOUmSDi!+Bzsj4S(cocs_6M0kVgv$#7PJ90=tp#^cWytcpIk zDceEGzv<>NWpek%T-YdPt#jkL8`_kn&|;Cfw{|)CZlIVy!YMIyLr!Tx*d(Th8xja4 z@EbBIRMxMzob8=$&Os&ocWc`wyj_4X0A(9-*R!#UKld69A33Oq0DtN=8qIfnhisu< z87D(l*Vu*^I|osfX2e0iIVh^8-Hk`cTv(q#Y@_B8j~2M1g(|gTIu0J=;LT({C zOVLyA3~AC%J$PdfO7Fi~h&Dvo8=I}H7Q{5z75v2U0JJ&n(C?*=5KnF@RMY$Zz(Ibb zhGj7e;1lXt3T!)kP8}?qoB4Y2*~WL*v3wX!@Cxl1exVN5 zgPq(|58LNnKC7PP(K+s}N2!80E(MwvOC+!q@0Ff+rX~DS)kp=o}qM}=tu9B^Z9|$xu5kAw! z-Z3E)|Kc}T3jgEXEGGQ(yIGdmw1EY~aa&kB!7uZ!t?W+P5WcV#I#NVz<}>eSZ53rT zI7DC#kVf&PaIC-)-^#YKZFmtZ`VZQEbwPD`jhYd8s47d1xNc;s+1Yc|41VfdFU$NH-YfsDi%(VWcGHW;g#{FywNV#@DTjpqBaGK6tj-$70v1EHxZDvYCxN#fv zhtvf(L>{EQ_SJ_0~bPsfJ|Mq3J1{T2SyIFx5@1||x z=fI2n^SfDzbtlrA_w&53Kt=!VZk7Ul(e>RRYX{Hz3d@#7nKv2Ho4&#l5WeFpY^L!U z&;Ro)P;|+l@jU4XHpW^@DDHkE{qiT6gVhqx+s#JvvOTzJ_rMcuf>GpCMv|dA8^V8# zbVleNBh<2oO|tIpM;MX~uiiJE z`QazoY-D+v|N2R`KeRx+KxE7>93O=;1pH*N9A_s4Ia@Ka@!F7NC5Sm#Qw7h++y%K1X(LYv2@s`cMaJEDh9-0F81)`iSgSPgjv9)9 zK?@F%8}qsQDRv2y?Y4c)Ni-yU^l4_d34RE_dJvx9&_Pao4hr0}yy`hj)l2+==g|Cf z{728RR-52cb20H#htWY*&$FlPR~Wsb&;>Y*$3mew^f0uC7y0Xlna73~MqX8r|Ea@R z%C5*T2cBYiO`)rnAyDrJ+(PnH=sKg<`HB~?vRva&yueCrc$4J~1oNN2z$Tl?3V#ZF z51VREGSR<>XZElkddX3|_t;?N?xXBG)WOrg&5F(0 zCi*bk{B3rh8B6!CzKb<#DY&u4LyNDXkcfGjB*#m6VY&3v{zc_Glh1BNBk?Z5|&!W_u2O>t1UznKJ$H6 zK$ukV$JsaV`QCAMkWPi&KVVN1c8HkQU}oOOr@e+AJI({IVcU3{Kl2)x`7D3`HCBiP zQa!=a?HI}!ysUYSSD(NR7RTH1F~wmk+i`*=v5W9SIl(6JADw_BbR2*C1RFbSmqif0 z%>tJxF>vgM%xfwqIrCHbt{<`lTREnx0+OEpAQ;WbpUD8Bx4VY&+YFiNy-UJv1u#a_mklnk01Kz-ftbbJmH5w-8pgOtFzv< z&D}ZSs50@V|JCFueQ0UL&^w2;m;B&B*PYq%uG+W>9|j+KH058X4IA^TlINEGXziOV z=AZBRH0I?gp{lRX{+A_JzjpEe+`06XuWo$*z1`!let7-1|+rtZ7vfs&AZ&z&8K+a62! zx9`TBT(Dza_jCCv4Rf2C+x^)=kGzMWxw6;gW&2uNit(5gCYZZry*RI!?~%q{m+)=9 zsgpC@f8i+(4lpyvVf47UP3>@Y4z$9;xGN2~rByiE$w};zhFiSgtVVYt1^S##ft9cz z!mrm=9>8_tP`rpth{G18;k69Rd|}^}`wt$R!rSQ{ql?q4AH)zr_ro3iYW8)ju1I4dP3Rhs8L8LdaT>gC=2b&5K0Big zpnVpqCVN@5hic%=DxN+QJt+H0iNCCt3wwH>1G;>7O+5LJb{nY&w7DPAa2ZdG5DN;l zO`TrYF+#$>JRn|+$1dCgUjWb(2x4?(xsVg^26nLB3Dv*xpgSIn#Hf6;?_EN}Mu7H1 z5b5jc0o9f*#)E4MHN4YT4?kRQFyK(%6AX@jc3fKUehUsU9e7p@Z-Sv|cm^MRFSdX2 z)L5jOy70wnzrn!`L8$$QGX~Llzkx#1>nDk)qn` zgOVR(5@RdKh!)?Xjj-*{l9;i1CffE3TYVBsvhnZyh$UB!v+Zx2FZVog%JfUeb{DMQ z&?|$0bld&~GI!L0SokDo+TKgGRmIQ8b{LxyIo>L}`1sf1odvV~n%7yOxzGl?_paC3 z3+76j`62$uNr)iMlW<3!hVSvx%kWf#r#q1Xt?M-b_ZcYInE!y2v@Xn z{^N_-gW`Dn`)nybYu;ydF>#dO2BT~$=ihptt;vs*&)Va0Vf0B+Bf6c zxWZHR3rcF*Zi(DLvZ!EFJd_;J(z3)%_xquS@CQ!VPTCX)oNYuzytpP3_qW$l_?K%r zXHyDVj92&!v0k~zhkXb?*-L!xhineJV&gSuz&4+~#zs!f$%-b$vL{T5WmtU;mk+#U z)DG2%Id)S3-XEvnYRwuT{$yWbKQNWsuJcbWL8>XVg=c=m9wM{T0@sfp{F-GhAy~O^ zYpXG8F*KJ&p+@wE_`hku2BsABPvSB!h^Enc6D8XD+{<{KdYqlNUuMax((Ou_$Yj{J zM4!Sw5PfzNhKACT3`-B8>?wvdL z-v8!#&U5zruJzk%z3cmP|MZ2(r~cSKlJ5Uif3499cn9qZI~@6Eol5O5^hLC+v&`sE z^t`xdBgfh6Tr=rK`x)0VdIkT}MAIf7M6cUR%~bl8-DZxVH|%}pIC{%IY39&xZ4S$( zKiWBAS@fY@6*itO*$;>1(O>Liz+c!`!*Yo1%<$oqZI_2zk&MWG_Po5AG|PS{Z>~{le1DmE`CrIwf0~y|v+eZ! zc{Imv&Y!8zH6FG9mOtD+oj;t)I={*fC%VOUO{%7Owl%4V=G$*g8fT{z<{9NN`){)s z6`Zh#Po7{bh}8YOnVRs21ZUKGy#7pYh(8bKMEkY!ZhBKJt|gCsV8PyAm}@_} zaC0xsvDYk`PjA}KELwux_iS&#+o0*17HvfM2XlOGzOka;ATyVJxFmf)M;^>d(ap@>*>cW!N1xarShp zWc-bBvlg>3P;a#uS_;uDgfVqgYrq@u)ns{E11-fe@@%`)%A{QT9cv1??8Lf7_+M9d zJO1COTZ8{`Yrg~Ee_A^X`0cgXXhueTAr;!i^#xR7Z>%3Xv5>;2u5a-*`U1WUR&}6# zz1133F+P8y%(EhuXA|?Lc=C{EMKaF}h<9rx_V4S*p%V!DD#FX)%xAQ6JLZl_wAh}1 z$8buu{dWuvUknd3N~^GU-LZ-*$?gu1?F?Uco~X+Hs9^?Kow<#FcO_KG*S)0ShYD6u zpjpzPK=avUt*fZf{!!~l{Fk(iEode!lH5)HmPT(wGm)`Oqb&b=s|7jYZ@TW3*63}j z^#=Sc?T(GsY)=R*nc7BFuyDP!4D}nu8o_i^b-<5u{3c&di`8niY_MwE?C!u2YO_xT z(y874GLV_PnP}M}t7Vq2b-g!GQ$Mr8+uAy{ZNm6sP1_8qUfOE^ux%=Bv)^mWL}v8g zkc|J)8&=YG``a6e^0xQZh#j&<;7?P3ypuHikPo{kO4|jbhpRfeTjpMTXXM65blPh_ zapz3h*ZGG#ZJiE)NIiz9qty!L>85+4;tr~w*Z67D?lwEp%xqg}= z?dkW$+CRB}FrBr#?vIZ@D>G}l%B*vMM))Z@P1<=C`i0)mFWww_A1CdC?R#Kh>O~d6 z1sT9)3QulbUtQyGv7&DE`)bi2Xjf#WBy@iAz#o{dhB7QI?pmk}T-;j**T_zN*lia- zluWzql@E;_NKDB~R2S8%X=Hog`OHJZ`=KY$_!?;uY(IHtPQ(CqiZj|ycqrX2e0bQ9 zU6ee-+u&`gvB<53Q@F2om%Z-cjDFGb#R06vsu$xDLN8|b(U8C*GXq`h5POI_g})w5 z3R8Glt=;i(ET^#Qt5@#ypt9b*GmFyggZR&|-`+U_E`Qyb2bXb=Oyvw#o%7sB2HKB4 zGPqy1)R4ehuA?D8q@k#fhWtJn3UAU-*sGz?(a>nSBZ_3O`HZe6bzg%0l%0w0Cik)I z&cE9$Nx=j&s@7@^C|CQbUE8U&GxxEvA-~Rcu~yDf&ON@9%0*5s#dhBJgQ+1;`<*>M z&=)h=m!6F4d}MDs!!YtmFO}I%PtF^5!$5)Vt_(uV{aU%yqiKs(p6Rj)_ji39<33;H9%`te9s=O4S@G(?G8u3A^BF;@Y9S) z4Xr+_8Buv|x7+T1D!G5uOm9O2 zMlFpVwBPyhi1;=pkL+C9awnqiOy20szS``Z7d)K>2R{qzeD%3iZ2#NQ^o$!V-5b!q zTCF!aMzwky0&Sf+FMOoi|MqH5@lmEc8F)_wh#|{)ue!n48u$k9(K3Wq$Jbu;+A!YE zoz1WP%=lmGT=A>Plc;OgU6f=$`}cpQt|NERcA~{WG}^mjsX4eco^GLjM`ebffVxy| z6ax}y;K1eXrR}W&tI^OZi4KWH!>CGpCxM3YJ`xLt(Q08NlE*kkbXfYW65mdwVMYnl z5r^tYG|D)_bkceAfh5W>x|zBi-fY;YjVzhEpO{h!ex?-+cH<;*!zESgNi zREu|u$Mb2m)A%2oLUj%jTc(f^@_%L`y%1{eqGJ+08*-joKyNxQIINg-;^Y7SfQ0$G(5Oz8m-ik?5L$QBKY|XYT)Z$-z}v@%%@nKo4>mc?aFo4C3`Pp;~;ofEs#)LBrtS z-i0*K=}O(=^+nX=l!F;ngAOB<#?(RG`*L z!-N0UOlMpQr;7JB((%z(ZxD9oCSh1oLD)4k=}naFWTJ4lQ#6)5ne9E5AuZV0PTvcS zT#=*KxA-@;t7-ZNK`gj_{!JcgB^J!yOr`9s#j=7=bdX<;hq;d>+z^JyyO+{=F^T3T ziWTecrG99Bcil^AA!G5=?UWRJ>pS$493=5}5Dq&+kvg7D573h#2Qv!muLfmzb3#T0 zf3Sl-q|v1JEv^r4%9RgPuDEo$UKGE4h^A0PP=A=>h$2MeBjgt2cOsAhV&zWC?TFPW zY8F;v8pSkNYrPG28(tWq*Qz4VTYkrfyO909%AI8Jl0_lS%R{sW z!7?0%Xb*v9It+PmxC3;ILy-wbz_J_$F-O6&9R@L7U}GHyG2LL}90oDRz;YZ0F~`Aj z9R@Kcz{V?<4>2dfCO8aYPU#(*mgi8YIStQzhe6C)u!#b4ucpM*mQ?M%vmwy zF`B1Z8{Ux(BLz<#l?^aeLJX;Z=@LqdaMiMOmx9^S)l@K7!Y~E%C5%w8P{Mu+7D?D& z!4e506)cr-0P+q2mq|QO!Ey-)DY#g|CK5 z6x=Ognu2>JOjmH9gd;ViKU~#yeUx%OD4j5B+OQ@ zTf(sl9+PmKg2yGqjvrz>Az`k9CuQB$$18kFI!{pWw1jyIo|Q0P!E+K~0}Mf&mvEAT z7bGlD@S=o;3SO3QvVvD6oTA`W38yM}O~N8gn}^V3E!D9j0w}AfK25<0K#tb60Y=|} z5zEl8Ph@2Oh+niJ_fM0=wB49vVbI3r5XUOF7?JQeWl@5d{Ww+u35Fbt;!+G}EJ}6t zjzuXU^Vc4yq5nM${r52R-@_1E>3@0{>iDk>Luk4s&Y*-bF%^w|hQlx>ri0CN7{M#@&Mn0`$wxW|TC?X_nj>F&se@qbN zl@5cL?O>}M1~EIpsvHI}JHb{v3}SYHRXYq~c7xsSFo@X;=G9_45Pc!k>;qlnctXqp zuo{O!%t5ePoE>4FodY$8K&=pkoWr1XAqqW5K-Y#S1RVvf4^b%U0`-L`By}4Y%I*kp zh&l%Ebs-8-$3YuH6sk^uHijr=|h(gv?&`l1N3xR8(?I8+Tgqhf# zAqrWp72tP;ICMpT-W{TlH2`#Th(cC0=sh6{S+SrUAqrUupj$!|vQorf_F<}+ium;s zH8`hBI77h<31=#pE#WK$p-BK3hSgNz>;jSR^5qZ5Z@RBrH>~RKi;nER%4a zg5?s_TzaEXFG32`ulz#1i7reL##6$-XV zc&mc#65giZW-QD!eYwJ0C9G6%n}jPA+%Dlt1$RieO2M5H;+zoC?UHb{g1aTGR&cL` zw=1|$La%}cBwVB5K?!S|sp27tYnAh12`vSWNLZ)fQ3=;7*d<}Tg547O6g(#39SR3)UJO6Tp<%G;0R4MvQhjS% zt-rd}3RH)-_^TUzP1QJfUS|cHe@UZb#aCx(6=%5QDNwNW9f}`F+2Vl@u~CyNe)%D_ z<56-EyS@3M^&+KGsn~Uqh9@m{;dHQUQEq;I;j$KQQ>(W|9>&Tem3(O)FD_i9VTBQIcNbB2oP@H09tAyQk`1I1EQ(6yE(Yjs1V4 zHJ!@DZ!Xi6h%#ARsdnXfVX9>6>y2*Cn&o@arzT%1Ur!?RJtf9v@0gd zNbZO=`Ee#$DW-o)DL5in{V8ojkbnG?JpYAP6UF|&P%GYdUr`DDKaDz3ynlrzk|k0; zql%f8uD+`&WYpJJQ-vsW{HkQWdtDlS*q(FIbDAYxT%`HLkBN!)S79zUH$90;6MMJ z(wL1y;u7(4d(m;1C}%#yMwjR|aP(2Ca}jyOy*lUXMhc58ofGWu{Cbf1gU*>^;Bo3F z;td`{tL(97;xY6Y2jqJdcqQJ&S^7ZZvY74SN_$^SjQ#xCLE=>xC+mZZHgV3yOJJ2} za+)4xRETL|oGR`%dA=TPY;)L$Cg;LrXc!Nr!J;UP8}%W^R_QlNycNdd;Ae!hhhju} zIN#}tHHa68CkJt?I2x{0e;&@|dK>~*N%2PTGPJ0Fir_-*;a-a11z4v}>xaGPM6nYO zBgx2SF*=+J#L)hnh|mlB^Fm4%+xv49rHGD1o+2hhauN*{3nRIWhKXa5?AJX;wA3_K zSOa*1k!qmnZcXG2acltcY`F1-!**z z-O~y)vF}YBUU}Rc(XncQwJ{VxS?f}7qjj4vP`|LDR-0}-FJEi2HeP?#*XqGdB~L4? zJYEMQ&>rup3;c)_=eROB#Ds}Zecy;{{Z^}|$sh3G4p(bni?nX?i?^eBh`1+?!)b>2 zZX8d#W&Q$x=oZ8>zZyg8tQKviv3!Bwv&Oj{;R*OX0Xe$BCre81iEx&YBWaHy@lqVS z(V72i91j~keOBB01|ROMT(_QWyzvbQw7bs@>8SI!sFc>WczsRNL&3}Zb*_ueG456X zHZA^*O&))f$J-OB%HOej%9>i+>gs$oKC3BkJvq2dgpeEigs06lp6hGsQMN@jmQ3T) zntI$zYPg;r6?CB7s|p+$JPQ{id>8;R!nWeRiL}Nd??bU=569)zgo<09r`)X&_`%vPy2vcqATmtz5hrk8WVWV{Xn|6_9xl zlE1L2pgzt|X4(tr(zj=QDT_9y)K6<~cE%v)xwS=l;ufG0nsO$UFW+gPqENc8QNX z=#!5ITRU>Y5QhN1 zKEz2&yl~Vd7LDe-q%K%wRW!9&&A9Usuxi6Gqwv+NvjW{N@x*8@;$trH&S;(#`wfwH zx#U%)mHoS&$h%zHG12`MjS4@m9P*;Xdw-+3!LUqz3@7F)*~O<_PIh1Hv%3kmJ_o{Q zZ`OR)(R|h=24r(4pL2=AY)(l!#c3rqHJA|x%4(6M81giF+t*mtzS{Rhb2jHEopX`8 z6{Ass%)oyftzDFE3Au+xpW>ejpfmN z!6jB-jHx?yvK_y0A+Ua)@;`p>nyX+E!$8il`ajDC_!H383YKpw7vf`S{tzC1< zolGYKTxRd~E{SQmJPBvN8*@>`KM+sn@`xcW9AYq;S_Ga(_yE(b4G`TKoEsY*3L&;n z2+?BHc)q7!tb8Zh)Dlc}-#7UBc%HzVVv43mFqTKhw3G;>w$ztt?S49LjPeS{m?BLG}I7t0+l?WUf=8L;0b2=BASWP4aUz*H+rMMy) zYl*4hhr3X@u2Qqo)Jnx~rtCjaOU&$BI}qO2Yc!^QvPPFn6}hA>Hp4wupk4*j69zWI z#JM7ljjVu?F0I40O2NgPfmv`?F{k3OpqS;gndV{)=vCr@VlKtVeX^Ki=Jbl8C@Jv< z)tc9gl<`?DR$F5XVy#&xW35>yFE`}64e3CS}PL z-CSjd^9D=!rtwm8iLPn9Vqu@?N7wq~P}J5CXzyK0xSQG<*H|sR4&Su4@W|y^TdP%D zDC(y3+C&3z(=xR-`9ztv%V(*nZ8p^% zZ;?{MPtaD;Rl1uaReBDvs-| zn%Y+HkLxd?ikvjZ;MrxWt3ioSEwiGdwev zwOCfUcYU}qk9Lu9D-|FgBEk@z{Nn*(8h)t3yWkNm{#4CN>M4vct&%OfDWEQ`Xt7~^ zmG6i0RP;wm`TkzzsYoh*2{7)x=Ohikw%QEYrHFmEb9zLolmVx7@h`XY@|=ttqRI~I zn@ibJ_Kn$;E#De0+P&!1EpgO~kSy_gFIH{2B6AIoosxfpn!>P~)D$96sFn{d3e)gI zZWNS+X(hs5gZW&kczF%_%QA6c4X0<8-w<5s&B2vA!7UE6qY{(FvKnsX3J0IB!E~-t z45{VunUyyLQ+0DNRZcKf&Z`g9@*U(ApVhLbqqo0vb~UbZ&AKtro97d94*^N_!LGL+ zHp(on50z#kqV36HY*fOyF)Z9&x4zoi(1>WAhD(-r6_OTW?DARxy7qrxaj>{aP}KM$2z* zmZ-b&*jG|_e=#=8>&G5B%v58%xgi%iZp?*kHzd$|bC=~u+BsRy7^k$OO(Y1Pe54A|j%izli4W}J#UI)^1^W|p zCuW9)BL7ZIaW;#!ck-AK+fAxpuO_duR!*L*7P3>9U^?t;w2E;TOREpQcPIbNpt9h* z9lRQMID^ICVto5mDxSI*dl?nt5BGB3kV>NE?i@8|34NmH6Pe%U*Qi~5^lg3?se57@ zHb=IJzi&gA`c^RgI~>WzZses{cptV^7Tm{Kv^RLyeLRHY_TdAWJbdEkYiw)8A{n!7 zw`YBPaR2@6BaF)fA4Cow7DW%T#qW&`?thT`5iTr0vje+KN5zF5yp_%b*L{z_khf@S zccN+^3qH7$KOkg(aD&Yw48BU@2Lk^QV%PWi$C$Ym??$HOiiX`hno5GZb~A4ARfs3{ zs%7H4d(j-Lg2q4a8J#W%&+X$ShVEr6IPpi^K)4wF!>44I5*+wr42SS&6xBcB`lvLu zj-F?=x1!r-(S9OJp43z)N=9e(;SD~{OoCN(%F+7tb2yvMqt6B!$_V{qZt8F z(#h`NcYnq+!)c2m;kc)W?~}X@!LXlmiY`udA@7P_LW-Nk%P;Zw%{Df)$R|baPdP=b zf0_G>Z7=hxuy)>KXvV{0-)mR~e)TdZ8u+SUi=eyMBPPGXlTjPayvjp`{R$_ejGlc3 z3fjcGuOLs_#DH!dkH_?Gp6EP=ie25RV}jFA@kTe6-`f$b@ojPLRmkC2+3h$y>^MBr z$u3d+Dkmy+#*@-@gxD(0q+DZmAnro+VrJuYnm*q^e`CX z+cyi#34`|>5WjgH6TXAN%dc|{-SmyAsQCp?K|qJZzF+Wu;rbP7^^xH5U$K{{COGDw zIXq1K?oA#NoP82|`N*P2-^LKvE?#;Y^|4EQ@it~xn?=#TavchN|G)B!;rIyPd5yNZ z#48&)R&4$)dfIKG_%t_#;d_7=HS__4Pou@}P;QCGnO@Oor>mcqToLd!_yX-3;R}J+ zjrrp6Y#Jg?pGK?RB?kPCr-q%!C#D*@ibcQUk;Y!vK9{)jcbqA|9C#!6+gXa3O~XUlqKi(Mgy1=~0EJDwNc!-qsyUE=re@z2qu#5pdMpCSA)_|`eT*FcxF{CzaS z6tU%f9wt9X_%Qgx_jw4RlM4Qc$02LerPojq_5sKAZ|5kf10O0}3Xc2$6LfcmIanKA zQi~HQnSPX6x{LmzVOe?a1vUw-_Wpn8m*qDMUj!HYnezz4*1aF{KbrX_+Cqf5??Y@N zw_HTu(H%T<5sM9Ufp>q5xlNJyhmU!#>4llGUU)8XoZw5UVkceV5|m)oCC)brDNnVO z)Cj_N5kwja^OZ~JuwCL^JaiXree5#sU2QW%cB1$)4}kCd%bYaOQkh!e!d-7!u5FjG zdtHdejHZ_=!aw1dutJi_^@$OmpzFaA&nKLdSb|SpKS19|_|769&jigV#r^*s=1$@L zjAPgCGWSoPS#Q;>Te{w=xfQEF?D_3BqY9MUvP~hEy=GL7a+zZ_S*^a-eP*6xQSNWS z_m8MZ2h6bG2Q0=S<0{+Ux(wn zOYdB7YyC0vy)JWp)J%Le7nzKYXQd`>n^^TZwmh(CdHi$a{{Qhg|I9dV8V`!! ze1R-~;tL+b7fkWS7x*sWqA8xa%EygU=4Dgd{a1d3Pnsg?OP*{{*jZC7_>z77PT(6b z#7SY%qWeq!J;et1e#IY?o)DH2eCTg{n~r^nKapNXG3jC9fla5((P}|mjor@ryo{h% z*Qeu43{(8jrPrhKM4I{*eB86c)bFK~V04)7K?Mqq57!rR>~WfkUB+r`>RK&0m-PGV zO2f*6kM)BedhYil^%ht7DKoOcYKmGcZXc{C^soxCb+FzN-o+umF9++bJ**$1m6#x>mzwb znE0Nl$BC2ix+fX)s_EC4thk%sfWgj)+!Vm-wNVUk>s9FI*17dx=x5E{A}>KNMmYup z3HpO%10$!cryH-)<~h_v}?_e9FS0&RM)m;5*larPJ#hGgaEP zsv)S_*Hq{4HFJV+yjqnXE>F+>ntAnx@qONy-|OqV0dK89%uUu)acHzIS)UL$KeX%r ewFDhb)`z+meS=@Cg*X40tj{pJc-h`C?SBF|m&B0( diff --git a/tests/integration_tests/test_subtensor_integration.py b/tests/integration_tests/test_subtensor_integration.py index a2154b6615..14b561cdd1 100644 --- a/tests/integration_tests/test_subtensor_integration.py +++ b/tests/integration_tests/test_subtensor_integration.py @@ -27,14 +27,15 @@ async def prepare_test(mocker, seed): with open( os.path.join(os.path.dirname(__file__), "..", "helpers", "registry"), "rb" ) as f: - registry = PortableRegistry.from_metadata_v15( - MetadataV15.decode_from_metadata_option(f.read()) - ) + metadata_v15 = MetadataV15.decode_from_metadata_option(f.read()) + registry = PortableRegistry.from_metadata_v15(metadata_v15) subtensor = Subtensor("unknown", _mock=True) mocker.patch( "async_substrate_interface.sync_substrate.connect", mocker.Mock(return_value=FakeConnectContextManager(seed=seed)), ) + subtensor.substrate.metadata_v15 = metadata_v15 + # mocker.patch.object(subtensor.substrate, "metadata_v15", metadata_v15) mocker.patch.object(subtensor.substrate, "registry", registry) return subtensor @@ -47,15 +48,15 @@ async def test_get_all_subnets_info(mocker): assert result[0].owner_ss58 == "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM" assert result[1].kappa == 32767 assert result[1].max_weight_limit == 65535 - assert result[1].blocks_since_epoch == 1 + assert result[1].blocks_since_epoch == 230 @pytest.mark.asyncio async def test_metagraph(mocker): subtensor = await prepare_test(mocker, "metagraph") - result = subtensor.metagraph(23) - assert result.n == 19 - assert result.netuid == 23 + result = subtensor.metagraph(1) + assert result.n == 1 + assert result.netuid == 1 assert result.block == 3264143 @@ -105,8 +106,8 @@ async def test_is_hotkey_registered(mocker): @pytest.mark.asyncio async def test_blocks_since_last_update(mocker): subtensor = await prepare_test(mocker, "blocks_since_last_update") - result = subtensor.blocks_since_last_update(23, 5) - assert result == 1293687 + result = subtensor.blocks_since_last_update(1, 0) + assert result == 3221134 @pytest.mark.asyncio @@ -126,11 +127,13 @@ async def test_subnetwork_n(mocker): @pytest.mark.asyncio -async def test_get_neuron_for_pubkey_and_subnet(hotkey, netuid, mocker): +async def test_get_neuron_for_pubkey_and_subnet(mocker): subtensor = await prepare_test(mocker, "get_neuron_for_pubkey_and_subnet") - result = subtensor.get_neuron_for_pubkey_and_subnet(hotkey, netuid) + result = subtensor.get_neuron_for_pubkey_and_subnet( + "5EU2xVWC7qffsUNGtvakp5WCj7WGJMPkwG1dsm3qnU2Kqvee", 1 + ) assert isinstance(result, NeuronInfo) - assert result.hotkey == hotkey + assert result.hotkey == "5EU2xVWC7qffsUNGtvakp5WCj7WGJMPkwG1dsm3qnU2Kqvee" assert isinstance(result.total_stake, Balance) assert isinstance(result.axon_info, AxonInfo) assert result.is_null is False diff --git a/tests/unit_tests/test_async_subtensor.py b/tests/unit_tests/test_async_subtensor.py index 62ad365e98..b50c1444b5 100644 --- a/tests/unit_tests/test_async_subtensor.py +++ b/tests/unit_tests/test_async_subtensor.py @@ -1,3 +1,5 @@ +import unittest.mock as mock + import pytest from bittensor_wallet import Wallet @@ -300,6 +302,7 @@ async def test_get_subnet_burn_cost(subtensor, mocker): runtime_api="SubnetRegistrationRuntimeApi", method="get_network_registration_cost", params=[], + block=None, block_hash=fake_block_hash, reuse_block=False, ) @@ -391,30 +394,26 @@ async def test_is_hotkey_delegate(subtensor, mocker, hotkey_ss58_in_result): @pytest.mark.parametrize( - "fake_hex_bytes_result, response", [(None, []), ("0xaabbccdd", b"\xaa\xbb\xcc\xdd")] + "fake_result, response", [(None, []), ([mock.Mock()], [mock.Mock()])] ) @pytest.mark.asyncio -async def test_get_delegates(subtensor, mocker, fake_hex_bytes_result, response): +async def test_get_delegates(subtensor, mocker, fake_result, response): """Tests get_delegates method.""" # Preps mocked_query_runtime_api = mocker.AsyncMock( - autospec=subtensor.query_runtime_api, return_value=fake_hex_bytes_result + autospec=subtensor.query_runtime_api, return_value=fake_result ) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_delegate_info_list_from_vec_u8 = mocker.Mock() - async_subtensor.DelegateInfo.list_from_vec_u8 = ( - mocked_delegate_info_list_from_vec_u8 - ) + mocked_delegate_info_list_from_any = mocker.Mock() + async_subtensor.DelegateInfo.list_from_any = mocked_delegate_info_list_from_any # Call result = await subtensor.get_delegates(block_hash=None, reuse_block=False) # Asserts - if fake_hex_bytes_result: - assert result == mocked_delegate_info_list_from_vec_u8.return_value - mocked_delegate_info_list_from_vec_u8.assert_called_once_with( - bytes.fromhex(fake_hex_bytes_result[2:]) - ) + if fake_result: + assert result == mocked_delegate_info_list_from_any.return_value + mocked_delegate_info_list_from_any.assert_called_once_with(fake_result) else: assert result == response @@ -422,32 +421,28 @@ async def test_get_delegates(subtensor, mocker, fake_hex_bytes_result, response) runtime_api="DelegateInfoRuntimeApi", method="get_delegates", params=[], + block=None, block_hash=None, reuse_block=False, ) @pytest.mark.parametrize( - "fake_hex_bytes_result, response", [(None, []), ("0x001122", b"\xaa\xbb\xcc\xdd")] + "fake_result, response", [(None, []), ([mock.Mock()], [mock.Mock()])] ) @pytest.mark.asyncio -async def test_get_stake_info_for_coldkey( - subtensor, mocker, fake_hex_bytes_result, response -): +async def test_get_stake_info_for_coldkey(subtensor, mocker, fake_result, response): """Tests get_stake_info_for_coldkey method.""" # Preps fake_coldkey_ss58 = "fake_coldkey_58" - mocked_ss58_to_vec_u8 = mocker.Mock() - async_subtensor.ss58_to_vec_u8 = mocked_ss58_to_vec_u8 - mocked_query_runtime_api = mocker.AsyncMock( - autospec=subtensor.query_runtime_api, return_value=fake_hex_bytes_result + autospec=subtensor.query_runtime_api, return_value=fake_result ) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_stake_info_list_from_vec_u8 = mocker.Mock() - async_subtensor.StakeInfo.list_from_vec_u8 = mocked_stake_info_list_from_vec_u8 + mocked_stake_info_list_from_any = mocker.Mock() + async_subtensor.StakeInfo.list_from_any = mocked_stake_info_list_from_any # Call result = await subtensor.get_stake_info_for_coldkey( @@ -455,19 +450,17 @@ async def test_get_stake_info_for_coldkey( ) # Asserts - if fake_hex_bytes_result: - assert result == mocked_stake_info_list_from_vec_u8.return_value - mocked_stake_info_list_from_vec_u8.assert_called_once_with( - bytes.fromhex(fake_hex_bytes_result[2:]) - ) + if fake_result: + assert result == mocked_stake_info_list_from_any.return_value + mocked_stake_info_list_from_any.assert_called_once_with(fake_result) else: assert result == response - mocked_ss58_to_vec_u8.assert_called_once_with(fake_coldkey_ss58) mocked_query_runtime_api.assert_called_once_with( runtime_api="StakeInfoRuntimeApi", method="get_stake_info_for_coldkey", - params=[mocked_ss58_to_vec_u8.return_value], + params=[fake_coldkey_ss58], + block=None, block_hash=None, reuse_block=True, ) @@ -513,25 +506,14 @@ async def test_query_runtime_api(subtensor, mocker): fake_block_hash = None reuse_block = False - mocked_encode_params = mocker.AsyncMock() - subtensor.encode_params = mocked_encode_params - - mocked_rpc_request = mocker.AsyncMock( - autospec=async_subtensor.AsyncSubstrateInterface.rpc_request + mocked_runtime_call = mocker.AsyncMock( + autospec=async_subtensor.AsyncSubstrateInterface.runtime_call ) - subtensor.substrate.rpc_request = mocked_rpc_request + subtensor.substrate.runtime_call = mocked_runtime_call mocked_scalecodec = mocker.Mock(autospec=async_subtensor.scalecodec.ScaleBytes) mocker.patch.object(async_subtensor.scalecodec, "ScaleBytes", mocked_scalecodec) - mocked_runtime_configuration = mocker.Mock( - autospec=async_subtensor.RuntimeConfiguration - ) - async_subtensor.RuntimeConfiguration = mocked_runtime_configuration - - mocked_load_type_registry_preset = mocker.Mock() - async_subtensor.load_type_registry_preset = mocked_load_type_registry_preset - # Call result = await subtensor.query_runtime_api( runtime_api=fake_runtime_api, @@ -542,32 +524,14 @@ async def test_query_runtime_api(subtensor, mocker): ) # Asserts - - mocked_encode_params.assert_called_once_with( - call_definition={ - "params": [{"name": "coldkey", "type": "Vec"}], - "type": "Vec", - }, - params=[1, 2, 3], - ) - mocked_rpc_request.assert_called_once_with( - method="state_call", - params=[f"{fake_runtime_api}_{fake_method}", mocked_encode_params.return_value], - reuse_block_hash=reuse_block, - ) - mocked_runtime_configuration.assert_called_once() - assert ( - mocked_runtime_configuration.return_value.update_type_registry.call_count == 2 + mocked_runtime_call.assert_called_once_with( + fake_runtime_api, + fake_method, + fake_params, + fake_block_hash, ) - mocked_runtime_configuration.return_value.create_scale_object.assert_called_once_with( - "Vec", mocked_scalecodec.return_value - ) - - assert ( - result - == mocked_runtime_configuration.return_value.create_scale_object.return_value.decode.return_value - ) + assert result == mocked_runtime_call.return_value.value @pytest.mark.asyncio @@ -1040,9 +1004,8 @@ async def test_neurons(subtensor, mocker): mocked_query_runtime_api = mocker.patch.object( subtensor, "query_runtime_api", return_value="NOT NONE" ) - mocked_hex_to_bytes = mocker.patch.object(async_subtensor, "hex_to_bytes") mocked_neuron_info_list_from_vec_u8 = mocker.patch.object( - async_subtensor.NeuronInfo, "list_from_vec_u8" + async_subtensor.NeuronInfo, "list_from_any" ) # Call result = await subtensor.neurons( @@ -1056,33 +1019,31 @@ async def test_neurons(subtensor, mocker): runtime_api="NeuronInfoRuntimeApi", method="get_neurons", params=[fake_netuid], + block=None, block_hash=fake_block_hash, reuse_block=fake_reuse_block_hash, ) - mocked_hex_to_bytes.assert_called_once_with(mocked_query_runtime_api.return_value) assert result == mocked_neuron_info_list_from_vec_u8.return_value @pytest.mark.parametrize( - "fake_hex_bytes_result, response", - [(None, []), ("0xaabbccdd", b"\xaa\xbb\xcc\xdd")], + "fake_result, response", + [(None, []), (mock.Mock(), mock.Mock())], ids=["none", "with data"], ) @pytest.mark.asyncio -async def test_neurons_lite(subtensor, mocker, fake_hex_bytes_result, response): +async def test_neurons_lite(subtensor, mocker, fake_result, response): """Tests neurons_lite method.""" # Preps fake_netuid = 1 fake_block_hash = "block_hash" fake_reuse_block_hash = False - mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_hex_bytes_result) + mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_result) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_neuron_info_lite_list_from_vec_u8 = mocker.Mock() - async_subtensor.NeuronInfoLite.list_from_vec_u8 = ( - mocked_neuron_info_lite_list_from_vec_u8 - ) + mocked_neuron_info_lite_list_from_any = mocker.Mock() + async_subtensor.NeuronInfoLite.list_from_any = mocked_neuron_info_lite_list_from_any # Call result = await subtensor.neurons_lite( @@ -1097,16 +1058,15 @@ async def test_neurons_lite(subtensor, mocker, fake_hex_bytes_result, response): runtime_api="NeuronInfoRuntimeApi", method="get_neurons_lite", params=[fake_netuid], + block=None, block_hash=fake_block_hash, reuse_block=fake_reuse_block_hash, ) - if fake_hex_bytes_result: - mocked_neuron_info_lite_list_from_vec_u8.assert_called_once_with( - bytes.fromhex(fake_hex_bytes_result[2:]) - ) - assert result == mocked_neuron_info_lite_list_from_vec_u8.return_value + if fake_result: + mocked_neuron_info_lite_list_from_any.assert_called_once_with(fake_result) + assert result == mocked_neuron_info_lite_list_from_any.return_value else: - mocked_neuron_info_lite_list_from_vec_u8.assert_not_called() + mocked_neuron_info_lite_list_from_any.assert_not_called() assert result == [] @@ -1126,11 +1086,11 @@ async def test_get_neuron_for_pubkey_and_subnet_success(subtensor, mocker): ) mocker.patch.object( subtensor.substrate, - "rpc_request", - return_value={"result": fake_result}, + "runtime_call", + return_value=mocker.Mock(value=fake_result), ) mocked_neuron_info = mocker.patch.object( - async_subtensor.NeuronInfo, "from_vec_u8", return_value="fake_neuron_info" + async_subtensor.NeuronInfo, "from_any", return_value="fake_neuron_info" ) # Call @@ -1147,12 +1107,12 @@ async def test_get_neuron_for_pubkey_and_subnet_success(subtensor, mocker): block_hash=None, reuse_block_hash=False, ) - subtensor.substrate.rpc_request.assert_awaited_once() - subtensor.substrate.rpc_request.assert_called_once_with( - method="neuronInfo_getNeuron", - params=[fake_netuid, fake_uid.value], - block_hash=None, - reuse_block_hash=False, + subtensor.substrate.runtime_call.assert_awaited_once() + subtensor.substrate.runtime_call.assert_called_once_with( + "NeuronInfoRuntimeApi", + "get_neuron", + [fake_netuid, fake_uid.value], + None, ) mocked_neuron_info.assert_called_once_with(fake_result) assert result == "fake_neuron_info" @@ -1206,8 +1166,8 @@ async def test_get_neuron_for_pubkey_and_subnet_rpc_result_empty(subtensor, mock ) mocker.patch.object( subtensor.substrate, - "rpc_request", - return_value={"result": None}, + "runtime_call", + return_value=mocker.Mock(value=None), ) mocked_get_null_neuron = mocker.patch.object( async_subtensor.NeuronInfo, "get_null_neuron", return_value="null_neuron" @@ -1226,11 +1186,11 @@ async def test_get_neuron_for_pubkey_and_subnet_rpc_result_empty(subtensor, mock block_hash=None, reuse_block_hash=False, ) - subtensor.substrate.rpc_request.assert_called_once_with( - method="neuronInfo_getNeuron", - params=[fake_netuid, fake_uid], - block_hash=None, - reuse_block_hash=False, + subtensor.substrate.runtime_call.assert_called_once_with( + "NeuronInfoRuntimeApi", + "get_neuron", + [fake_netuid, fake_uid], + None, ) mocked_get_null_neuron.assert_called_once() assert result == "null_neuron" @@ -1247,14 +1207,8 @@ async def test_neuron_for_uid_happy_path(subtensor, mocker): mocked_null_neuron = mocker.Mock() async_subtensor.NeuronInfo.get_null_neuron = mocked_null_neuron - # no result in response - mocked_substrate_rpc_request = mocker.AsyncMock( - return_value={"result": b"some_result"} - ) - subtensor.substrate.rpc_request = mocked_substrate_rpc_request - - mocked_neuron_info_from_vec_u8 = mocker.Mock() - async_subtensor.NeuronInfo.from_vec_u8 = mocked_neuron_info_from_vec_u8 + mocked_neuron_info_from_any = mocker.Mock() + async_subtensor.NeuronInfo.from_any = mocked_neuron_info_from_any # Call result = await subtensor.neuron_for_uid( @@ -1263,10 +1217,10 @@ async def test_neuron_for_uid_happy_path(subtensor, mocker): # Asserts mocked_null_neuron.assert_not_called() - mocked_neuron_info_from_vec_u8.assert_called_once_with( - bytes(mocked_substrate_rpc_request.return_value.get("result")) + mocked_neuron_info_from_any.assert_called_once_with( + subtensor.substrate.runtime_call.return_value.value ) - assert result == mocked_neuron_info_from_vec_u8.return_value + assert result == mocked_neuron_info_from_any.return_value @pytest.mark.asyncio @@ -1302,11 +1256,15 @@ async def test_neuron_for_uid(subtensor, mocker): async_subtensor.NeuronInfo.get_null_neuron = mocked_null_neuron # no result in response - mocked_substrate_rpc_request = mocker.AsyncMock(return_value={}) - subtensor.substrate.rpc_request = mocked_substrate_rpc_request + mocked_substrate_runtime_call = mocker.AsyncMock( + return_value=mocker.Mock( + value=None, + ), + ) + subtensor.substrate.runtime_call = mocked_substrate_runtime_call - mocked_neuron_info_from_vec_u8 = mocker.Mock() - async_subtensor.NeuronInfo.from_vec_u8 = mocked_neuron_info_from_vec_u8 + mocked_neuron_info_from_any = mocker.Mock() + async_subtensor.NeuronInfo.from_any = mocked_neuron_info_from_any # Call result = await subtensor.neuron_for_uid( @@ -1315,7 +1273,7 @@ async def test_neuron_for_uid(subtensor, mocker): # Asserts mocked_null_neuron.assert_called_once() - mocked_neuron_info_from_vec_u8.assert_not_called() + mocked_neuron_info_from_any.assert_not_called() assert result == mocked_null_neuron.return_value @@ -1325,29 +1283,25 @@ async def test_get_delegated_no_block_hash_no_reuse(subtensor, mocker): # Preps fake_coldkey_ss58 = "fake_ss58_address" - mocked_ss58_to_vec_u8 = mocker.Mock(return_value=b"encoded_coldkey") - mocker.patch.object(async_subtensor, "ss58_to_vec_u8", mocked_ss58_to_vec_u8) - - mocked_rpc_request = mocker.AsyncMock(return_value={"result": b"mocked_result"}) - subtensor.substrate.rpc_request = mocked_rpc_request - - mocked_delegated_list_from_vec_u8 = mocker.Mock() - async_subtensor.DelegateInfo.delegated_list_from_vec_u8 = ( - mocked_delegated_list_from_vec_u8 + mocked_delegated_list_from_any = mocker.Mock() + async_subtensor.DelegateInfo.delegated_list_from_any = ( + mocked_delegated_list_from_any ) # Call result = await subtensor.get_delegated(coldkey_ss58=fake_coldkey_ss58) # Asserts - mocked_ss58_to_vec_u8.assert_called_once_with(fake_coldkey_ss58) - mocked_rpc_request.assert_called_once_with( - method="delegateInfo_getDelegated", - params=[b"encoded_coldkey"], - reuse_block_hash=False, + subtensor.substrate.runtime_call.assert_called_once_with( + "DelegateInfoRuntimeApi", + "get_delegated", + [fake_coldkey_ss58], + None, ) - mocked_delegated_list_from_vec_u8.assert_called_once_with(b"mocked_result") - assert result == mocked_delegated_list_from_vec_u8.return_value + mocked_delegated_list_from_any.assert_called_once_with( + subtensor.substrate.runtime_call.return_value.value + ) + assert result == mocked_delegated_list_from_any.return_value @pytest.mark.asyncio @@ -1357,15 +1311,9 @@ async def test_get_delegated_with_block_hash(subtensor, mocker): fake_coldkey_ss58 = "fake_ss58_address" fake_block_hash = "fake_block_hash" - mocked_ss58_to_vec_u8 = mocker.Mock(return_value=b"encoded_coldkey") - mocker.patch.object(async_subtensor, "ss58_to_vec_u8", mocked_ss58_to_vec_u8) - - mocked_rpc_request = mocker.AsyncMock(return_value={"result": b"mocked_result"}) - subtensor.substrate.rpc_request = mocked_rpc_request - - mocked_delegated_list_from_vec_u8 = mocker.Mock() - async_subtensor.DelegateInfo.delegated_list_from_vec_u8 = ( - mocked_delegated_list_from_vec_u8 + mocked_delegated_list_from_any = mocker.Mock() + async_subtensor.DelegateInfo.delegated_list_from_any = ( + mocked_delegated_list_from_any ) # Call @@ -1374,14 +1322,16 @@ async def test_get_delegated_with_block_hash(subtensor, mocker): ) # Asserts - mocked_ss58_to_vec_u8.assert_called_once_with(fake_coldkey_ss58) - mocked_rpc_request.assert_called_once_with( - method="delegateInfo_getDelegated", - params=[fake_block_hash, b"encoded_coldkey"], - reuse_block_hash=False, + subtensor.substrate.runtime_call.assert_called_once_with( + "DelegateInfoRuntimeApi", + "get_delegated", + [fake_coldkey_ss58], + fake_block_hash, + ) + mocked_delegated_list_from_any.assert_called_once_with( + subtensor.substrate.runtime_call.return_value.value ) - mocked_delegated_list_from_vec_u8.assert_called_once_with(b"mocked_result") - assert result == mocked_delegated_list_from_vec_u8.return_value + assert result == mocked_delegated_list_from_any.return_value @pytest.mark.asyncio @@ -1389,18 +1339,11 @@ async def test_get_delegated_with_reuse_block(subtensor, mocker): """Tests get_delegated method with reuse_block=True.""" # Preps fake_coldkey_ss58 = "fake_ss58_address" - subtensor.substrate.last_block_hash = "last_block_hash" reuse_block = True - mocked_ss58_to_vec_u8 = mocker.Mock(return_value=b"encoded_coldkey") - mocker.patch.object(async_subtensor, "ss58_to_vec_u8", mocked_ss58_to_vec_u8) - - mocked_rpc_request = mocker.AsyncMock(return_value={"result": b"mocked_result"}) - subtensor.substrate.rpc_request = mocked_rpc_request - - mocked_delegated_list_from_vec_u8 = mocker.Mock() - async_subtensor.DelegateInfo.delegated_list_from_vec_u8 = ( - mocked_delegated_list_from_vec_u8 + mocked_delegated_list_from_any = mocker.Mock() + async_subtensor.DelegateInfo.delegated_list_from_any = ( + mocked_delegated_list_from_any ) # Call @@ -1409,14 +1352,16 @@ async def test_get_delegated_with_reuse_block(subtensor, mocker): ) # Asserts - mocked_ss58_to_vec_u8.assert_called_once_with(fake_coldkey_ss58) - mocked_rpc_request.assert_called_once_with( - method="delegateInfo_getDelegated", - params=[b"encoded_coldkey"], - reuse_block_hash=reuse_block, + subtensor.substrate.runtime_call.assert_called_once_with( + "DelegateInfoRuntimeApi", + "get_delegated", + [fake_coldkey_ss58], + None, + ) + mocked_delegated_list_from_any.assert_called_once_with( + subtensor.substrate.runtime_call.return_value.value ) - mocked_delegated_list_from_vec_u8.assert_called_once_with(b"mocked_result") - assert result == mocked_delegated_list_from_vec_u8.return_value + assert result == mocked_delegated_list_from_any.return_value @pytest.mark.asyncio @@ -1425,21 +1370,22 @@ async def test_get_delegated_with_empty_result(subtensor, mocker): # Preps fake_coldkey_ss58 = "fake_ss58_address" - mocked_ss58_to_vec_u8 = mocker.Mock(return_value=b"encoded_coldkey") - mocker.patch.object(async_subtensor, "ss58_to_vec_u8", mocked_ss58_to_vec_u8) - - mocked_rpc_request = mocker.AsyncMock(return_value={}) - subtensor.substrate.rpc_request = mocked_rpc_request + mocked_runtime_call = mocker.AsyncMock( + return_value=mocker.Mock( + value=None, + ), + ) + subtensor.substrate.runtime_call = mocked_runtime_call # Call result = await subtensor.get_delegated(coldkey_ss58=fake_coldkey_ss58) # Asserts - mocked_ss58_to_vec_u8.assert_called_once_with(fake_coldkey_ss58) - mocked_rpc_request.assert_called_once_with( - method="delegateInfo_getDelegated", - params=[b"encoded_coldkey"], - reuse_block_hash=False, + mocked_runtime_call.assert_called_once_with( + "DelegateInfoRuntimeApi", + "get_delegated", + [fake_coldkey_ss58], + None, ) assert result == [] @@ -2024,14 +1970,14 @@ async def test_get_subnet_hyperparameters_success(subtensor, mocker): # Preps fake_netuid = 1 fake_block_hash = "block_hash" - fake_hex_bytes_result = "0xaabbccdd" + fake_result = object() - mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_hex_bytes_result) + mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_result) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_from_vec_u8 = mocker.Mock() + mocked_from_any = mocker.Mock() mocker.patch.object( - async_subtensor.SubnetHyperparameters, "from_vec_u8", mocked_from_vec_u8 + async_subtensor.SubnetHyperparameters, "from_any", mocked_from_any ) # Call @@ -2044,12 +1990,11 @@ async def test_get_subnet_hyperparameters_success(subtensor, mocker): runtime_api="SubnetInfoRuntimeApi", method="get_subnet_hyperparams", params=[fake_netuid], + block=None, block_hash=fake_block_hash, reuse_block=False, ) - bytes_result = bytes.fromhex(fake_hex_bytes_result[2:]) - mocked_from_vec_u8.assert_called_once_with(bytes_result) - assert result == mocked_from_vec_u8.return_value + assert result == mocked_from_any.return_value @pytest.mark.asyncio @@ -2069,6 +2014,7 @@ async def test_get_subnet_hyperparameters_no_data(subtensor, mocker): runtime_api="SubnetInfoRuntimeApi", method="get_subnet_hyperparams", params=[fake_netuid], + block=None, block_hash=None, reuse_block=False, ) @@ -2080,14 +2026,14 @@ async def test_get_subnet_hyperparameters_without_0x_prefix(subtensor, mocker): """Tests get_subnet_hyperparameters when hex_bytes_result is without 0x prefix.""" # Preps fake_netuid = 1 - fake_hex_bytes_result = "aabbccdd" # without "0x" prefix + fake_result = object() - mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_hex_bytes_result) + mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_result) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_from_vec_u8 = mocker.Mock() + mocked_from_any = mocker.Mock() mocker.patch.object( - async_subtensor.SubnetHyperparameters, "from_vec_u8", mocked_from_vec_u8 + async_subtensor.SubnetHyperparameters, "from_any", mocked_from_any ) # Call @@ -2098,12 +2044,12 @@ async def test_get_subnet_hyperparameters_without_0x_prefix(subtensor, mocker): runtime_api="SubnetInfoRuntimeApi", method="get_subnet_hyperparams", params=[fake_netuid], + block=None, block_hash=None, reuse_block=False, ) - bytes_result = bytes.fromhex(fake_hex_bytes_result) - mocked_from_vec_u8.assert_called_once_with(bytes_result) - assert result == mocked_from_vec_u8.return_value + mocked_from_any.assert_called_once_with(fake_result) + assert result == mocked_from_any.return_value @pytest.mark.asyncio From 47489bd994d42a15775568afd92744c4b1c3fa8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Wed, 29 Jan 2025 18:35:08 +0100 Subject: [PATCH 02/19] fix: query_runtime_api params --- bittensor/core/subtensor.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bittensor/core/subtensor.py b/bittensor/core/subtensor.py index d1369c5a6a..f9b930f77f 100644 --- a/bittensor/core/subtensor.py +++ b/bittensor/core/subtensor.py @@ -266,7 +266,7 @@ def query_runtime_api( self, runtime_api: str, method: str, - params: Optional[Union[list[list[int]], dict[str, int], list[int]]] = None, + params: Optional[Union[list[Any], dict[str, Any]]] = None, block: Optional[int] = None, ) -> Any: """ @@ -287,9 +287,7 @@ def query_runtime_api( specific interactions with the network's runtime environment. """ block_hash = self.determine_block_hash(block) - result = self.substrate.runtime_call( - runtime_api, method, params, block_hash - ) + result = self.substrate.runtime_call(runtime_api, method, params, block_hash) return result.value From ec453cb6a709e281ed0fa25051b2eeff83929aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Wed, 29 Jan 2025 20:55:30 +0100 Subject: [PATCH 03/19] deps: async-substrate-interface --- requirements/prod.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/prod.txt b/requirements/prod.txt index 0958a2b227..f7895e60c5 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -25,4 +25,4 @@ uvicorn websockets>=14.1 bittensor-commit-reveal>=0.2.0 bittensor-wallet>=3.0.0 -async-substrate-interface==1.0.0rc6 +async-substrate-interface @ git+https://github.com/opentensor/async-substrate-interface.git@staging From 04955f627323578fd0e7fcc8958b13fce4ab1b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Fri, 31 Jan 2025 19:48:27 +0100 Subject: [PATCH 04/19] feat: migrate to async_substrate_interface using btdecode --- bittensor/core/async_subtensor.py | 44 +- bittensor/core/chain_data/__init__.py | 2 +- bittensor/core/chain_data/axon_info.py | 18 +- bittensor/core/chain_data/delegate_info.py | 74 +- .../core/chain_data/delegate_info_lite.py | 4 +- bittensor/core/chain_data/dynamic_info.py | 24 +- bittensor/core/chain_data/info_base.py | 18 +- bittensor/core/chain_data/ip_info.py | 29 +- bittensor/core/chain_data/metagraph_info.py | 32 +- .../core/chain_data/neuron_certificate.py | 9 +- bittensor/core/chain_data/neuron_info.py | 84 +- bittensor/core/chain_data/neuron_info_lite.py | 89 +- bittensor/core/chain_data/prometheus_info.py | 18 +- .../chain_data/scheduled_coldkey_swap_info.py | 35 +- bittensor/core/chain_data/stake_info.py | 53 +- .../core/chain_data/subnet_hyperparameters.py | 64 +- bittensor/core/chain_data/subnet_info.py | 45 +- bittensor/core/chain_data/subnet_state.py | 31 +- bittensor/core/metagraph.py | 19 +- bittensor/core/subtensor.py | 41 +- bittensor/utils/mock/subtensor_mock.py | 2 +- requirements/prod.txt | 4 +- tests/helpers/integration_websocket_data.py | 815 +++++++++++++++++- tests/helpers/registry | Bin 204076 -> 216782 bytes .../test_subtensor_integration.py | 7 +- tests/unit_tests/test_async_subtensor.py | 92 +- tests/unit_tests/test_subtensor.py | 281 +++--- 27 files changed, 1152 insertions(+), 782 deletions(-) diff --git a/bittensor/core/async_subtensor.py b/bittensor/core/async_subtensor.py index 489d4f8917..84524d1f6b 100644 --- a/bittensor/core/async_subtensor.py +++ b/bittensor/core/async_subtensor.py @@ -555,7 +555,7 @@ async def all_subnets( "get_all_dynamic_info", block_hash=block_hash, ) - subnets = DynamicInfo.list_from_vec_u8(bytes.fromhex(query.decode()[2:])) + subnets = DynamicInfo.list_from_dicts(query.decode()) return subnets async def blocks_since_last_update(self, netuid: int, uid: int) -> Optional[int]: @@ -768,7 +768,7 @@ async def get_all_subnets_info( if not result: return [] else: - return SubnetInfo.list_from_any(result) + return SubnetInfo.list_from_dicts(result) async def get_balance( self, @@ -1023,7 +1023,7 @@ async def get_delegate_by_hotkey( if not result: return None - return DelegateInfo.from_any(result) + return DelegateInfo.from_dict(result) async def get_delegate_identities( self, @@ -1172,7 +1172,7 @@ async def get_delegated( if not result: return [] - return DelegateInfo.delegated_list_from_any(result) + return DelegateInfo.delegated_list_from_dicts(result) async def get_delegates( self, @@ -1200,7 +1200,7 @@ async def get_delegates( reuse_block=reuse_block, ) if result: - return DelegateInfo.list_from_any(result) + return DelegateInfo.list_from_dicts(result) else: return [] @@ -1327,8 +1327,7 @@ async def get_metagraph_info( params=[netuid], block_hash=block_hash, ) - metagraph_bytes = bytes.fromhex(query.decode()[2:]) - return MetagraphInfo.from_vec_u8(metagraph_bytes) + return MetagraphInfo.from_dict(query.decode()) async def get_all_metagraphs_info( self, @@ -1357,8 +1356,7 @@ async def get_all_metagraphs_info( "get_all_metagraphs", block_hash=block_hash, ) - metagraphs_bytes = bytes.fromhex(query.decode()[2:]) - return MetagraphInfo.list_from_vec_u8(metagraphs_bytes) + return MetagraphInfo.list_from_dicts(query.decode()) async def get_netuids_for_hotkey( self, @@ -1487,7 +1485,7 @@ async def get_neuron_for_pubkey_and_subnet( if not result: return NeuronInfo.get_null_neuron() - return NeuronInfo.from_any(result) + return NeuronInfo.from_dict(result) async def get_stake( self, @@ -1575,23 +1573,19 @@ async def get_stake_for_coldkey( Returns: Optional[list[StakeInfo]]: A list of StakeInfo objects, or ``None`` if no stake information is found. """ - encoded_coldkey = ss58_to_vec_u8(coldkey_ss58) - block_hash = await self.determine_block_hash( - block=block, block_hash=block_hash, reuse_block=reuse_block - ) - - hex_bytes_result = await self.query_runtime_api( + result = await self.query_runtime_api( runtime_api="StakeInfoRuntimeApi", method="get_stake_info_for_coldkey", - params=[encoded_coldkey], + params=[coldkey_ss58], + block=block, block_hash=block_hash, reuse_block=reuse_block, ) - if hex_bytes_result is None: + if result is None: return [] - stakes = StakeInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) # type: ignore + stakes = StakeInfo.list_from_dicts(result) # type: ignore return [stake for stake in stakes if stake.stake > 0] async def get_stake_info_for_coldkey( @@ -1629,7 +1623,7 @@ async def get_stake_info_for_coldkey( if not result: return [] - return StakeInfo.list_from_any(result) + return StakeInfo.list_from_dicts(result) async def get_subnet_burn_cost( self, @@ -1698,7 +1692,7 @@ async def get_subnet_hyperparameters( if not result: return None - return SubnetHyperparameters.from_any(result) + return SubnetHyperparameters.from_dict(result) async def get_subnet_reveal_period_epochs( self, netuid: int, block: Optional[int] = None, block_hash: Optional[str] = None @@ -2380,7 +2374,7 @@ async def neuron_for_uid( if not result: return NeuronInfo.get_null_neuron() - return NeuronInfo.from_any(result) + return NeuronInfo.from_dict(result) async def neurons( self, @@ -2418,7 +2412,7 @@ async def neurons( if not result: return [] - return NeuronInfo.list_from_any(result) + return NeuronInfo.list_from_dicts(result) async def neurons_lite( self, @@ -2456,7 +2450,7 @@ async def neurons_lite( if not result: return [] - return NeuronInfoLite.list_from_any(result) + return NeuronInfoLite.list_from_dicts(result) async def query_identity( self, @@ -2559,7 +2553,7 @@ async def subnet( params=[netuid], block_hash=block_hash, ) - subnet = DynamicInfo.from_vec_u8(hex_to_bytes(query.decode())) + subnet = DynamicInfo.from_dict(query) return subnet async def subnet_exists( diff --git a/bittensor/core/chain_data/__init__.py b/bittensor/core/chain_data/__init__.py index 93feeaade4..6c42d572a1 100644 --- a/bittensor/core/chain_data/__init__.py +++ b/bittensor/core/chain_data/__init__.py @@ -24,7 +24,7 @@ from .subnet_info import SubnetInfo from .subnet_state import SubnetState from .weight_commit_info import WeightCommitInfo -from .utils import decode_account_id, process_stake_data +from .utils import custom_rpc_type_registry, decode_account_id, process_stake_data ProposalCallData = GenericCall diff --git a/bittensor/core/chain_data/axon_info.py b/bittensor/core/chain_data/axon_info.py index 8d7a920ed7..7751c641de 100644 --- a/bittensor/core/chain_data/axon_info.py +++ b/bittensor/core/chain_data/axon_info.py @@ -6,14 +6,16 @@ from dataclasses import asdict, dataclass from typing import Any, Union +import netaddr from async_substrate_interface.utils import json +from bittensor.core.chain_data.info_base import InfoBase from bittensor.utils import networking from bittensor.utils.btlogging import logging from bittensor.utils.registration import torch, use_torch @dataclass -class AxonInfo: +class AxonInfo(InfoBase): """ The `AxonInfo` class represents information about an axon endpoint in the bittensor network. This includes properties such as IP address, ports, and relevant keys. @@ -79,6 +81,20 @@ def to_string(self) -> str: logging.error(f"Error converting AxonInfo to string: {e}") return AxonInfo(0, "", 0, 0, "", "").to_string() + @classmethod + def from_dict(cls, data): + return AxonInfo( + version=data["version"], + ip=str(netaddr.IPAddress(data["ip"])), + port=data["port"], + ip_type=data["ip_type"], + placeholder1=data["placeholder1"], + placeholder2=data["placeholder2"], + protocol=data["protocol"], + hotkey=data["hotkey"], + coldkey=data["coldkey"], + ) + @classmethod def from_string(cls, json_string: str) -> "AxonInfo": """ diff --git a/bittensor/core/chain_data/delegate_info.py b/bittensor/core/chain_data/delegate_info.py index 459489d591..52cfacc4e3 100644 --- a/bittensor/core/chain_data/delegate_info.py +++ b/bittensor/core/chain_data/delegate_info.py @@ -1,9 +1,6 @@ from dataclasses import dataclass from typing import Any, Optional -import bt_decode -import munch - from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.utils import decode_account_id from bittensor.utils import u16_normalized_float @@ -42,64 +39,33 @@ class DelegateInfo(InfoBase): total_daily_return: Balance # Total daily return of the delegate @classmethod - def _fix_decoded(cls, decoded: "DelegateInfo") -> Optional["DelegateInfo"]: - hotkey = decode_account_id(decoded.delegate_ss58) - owner = decode_account_id(decoded.owner_ss58) + def from_dict(cls, decoded: dict) -> Optional["DelegateInfo"]: nominators = [ - (decode_account_id(x), Balance.from_rao(y)) for x, y in decoded.nominators + (decode_account_id(x), Balance.from_rao(y)) for x, y in decoded["nominators"] ] total_stake = sum((x[1] for x in nominators)) if nominators else Balance(0) + return DelegateInfo( - hotkey_ss58=hotkey, - total_stake=total_stake, + hotkey_ss58=decode_account_id(decoded["delegate_ss58"]), nominators=nominators, - owner_ss58=owner, - take=u16_normalized_float(decoded.take), - validator_permits=decoded.validator_permits, - registrations=decoded.registrations, - return_per_1000=Balance.from_rao(decoded.return_per_1000), - total_daily_return=Balance.from_rao(decoded.total_daily_return), + owner_ss58=decode_account_id(decoded["owner_ss58"]), + registrations=decoded["registrations"], + return_per_1000=Balance.from_rao(decoded["return_per_1000"]), + take=u16_normalized_float(decoded["take"]), + total_daily_return=Balance.from_rao(decoded["total_daily_return"]), + total_stake=total_stake, + validator_permits=decoded["validator_permits"], ) @classmethod - def list_from_vec_u8(cls, vec_u8: bytes) -> list["DelegateInfo"]: - decoded = bt_decode.DelegateInfo.decode_vec(vec_u8) - return [cls._fix_decoded(d) for d in decoded] - - @classmethod - def fix_delegated_list( - cls, delegated_list: list[tuple["DelegateInfo", Balance]] - ) -> list[tuple["DelegateInfo", Balance]]: - results = [] - for d, b in delegated_list: - nominators = [ - (decode_account_id(x), Balance.from_rao(y)) for x, y in d.nominators - ] - total_stake = sum((x[1] for x in nominators)) if nominators else Balance(0) - delegate = DelegateInfo( - hotkey_ss58=decode_account_id(d.delegate_ss58), - total_stake=total_stake, - nominators=nominators, - owner_ss58=decode_account_id(d.owner_ss58), - take=u16_normalized_float(d.take), - validator_permits=d.validator_permits, - registrations=d.registrations, - return_per_1000=Balance.from_rao(d.return_per_1000), - total_daily_return=Balance.from_rao(d.total_daily_return), - ) - results.append((delegate, Balance.from_rao(b))) - return results - - @classmethod - def delegated_list_from_vec_u8( - cls, vec_u8: bytes + def delegated_list_from_dicts( + cls, delegates: list[Any] ) -> list[tuple["DelegateInfo", Balance]]: - decoded = bt_decode.DelegateInfo.decode_delegated(vec_u8) - return cls.fix_delegated_list(decoded) + return [ + ( + DelegateInfo.from_dict(delegate), + Balance.from_rao(balance), - @classmethod - def delegated_list_from_any( - cls, any_list: list[Any] - ) -> list[tuple["DelegateInfo", Balance]]: - any_list = [munch.munchify(any_) for any_ in any_list] - return cls.fix_delegated_list(any_list) + ) + for delegate, balance in delegates + ] diff --git a/bittensor/core/chain_data/delegate_info_lite.py b/bittensor/core/chain_data/delegate_info_lite.py index bf693c1841..da087a4195 100644 --- a/bittensor/core/chain_data/delegate_info_lite.py +++ b/bittensor/core/chain_data/delegate_info_lite.py @@ -1,8 +1,10 @@ from dataclasses import dataclass +from bittensor.core.chain_data.info_base import InfoBase + @dataclass -class DelegateInfoLite: +class DelegateInfoLite(InfoBase): """ Dataclass for `DelegateLiteInfo`. This is a lighter version of :func:``DelegateInfo``. diff --git a/bittensor/core/chain_data/dynamic_info.py b/bittensor/core/chain_data/dynamic_info.py index 7f3ccb90de..11a53ed56e 100644 --- a/bittensor/core/chain_data/dynamic_info.py +++ b/bittensor/core/chain_data/dynamic_info.py @@ -8,6 +8,7 @@ from scalecodec.utils.ss58 import ss58_encode +from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.utils import ( ChainDataType, from_scale_encoding, @@ -18,7 +19,7 @@ @dataclass -class DynamicInfo: +class DynamicInfo(InfoBase): netuid: int owner_hotkey: str owner_coldkey: str @@ -43,26 +44,7 @@ class DynamicInfo: subnet_identity: Optional[SubnetIdentity] @classmethod - def from_vec_u8(cls, vec_u8: Union[list[int], bytes]) -> Optional["DynamicInfo"]: - if len(vec_u8) == 0: - return None - decoded = from_scale_encoding(vec_u8, ChainDataType.DynamicInfo) - if decoded is None: - return None - return DynamicInfo.fix_decoded_values(decoded) - - @classmethod - def list_from_vec_u8(cls, vec_u8: Union[list[int], bytes]) -> list["DynamicInfo"]: - decoded = from_scale_encoding( - vec_u8, ChainDataType.DynamicInfo, is_vec=True, is_option=True - ) - if decoded is None: - return [] - decoded = [DynamicInfo.fix_decoded_values(d) for d in decoded] - return decoded - - @classmethod - def fix_decoded_values(cls, decoded: dict) -> "DynamicInfo": + def from_dict(cls, decoded: dict) -> "DynamicInfo": """Returns a DynamicInfo object from a decoded DynamicInfo dictionary.""" netuid = int(decoded["netuid"]) diff --git a/bittensor/core/chain_data/info_base.py b/bittensor/core/chain_data/info_base.py index acd4e7c0e5..0d354a0e1b 100644 --- a/bittensor/core/chain_data/info_base.py +++ b/bittensor/core/chain_data/info_base.py @@ -1,9 +1,6 @@ -from abc import abstractmethod from dataclasses import dataclass from typing import Any, TypeVar -import munch - T = TypeVar("T", bound="InfoBase") @@ -11,17 +8,10 @@ class InfoBase: """Base dataclass for info objects.""" - @abstractmethod - def _fix_decoded(self, decoded: Any) -> T: - raise NotImplementedError( - "This is an abstract method and must be implemented in a subclass." - ) - @classmethod - def from_any(cls, any_: Any) -> T: - any_ = munch.munchify(any_) - return cls._fix_decoded(any_) + def from_dict(cls, decoded: dict) -> T: + return cls(**decoded) @classmethod - def list_from_any(cls, any_list: list[Any]) -> list[T]: - return [cls.from_any(any_) for any_ in any_list] + def list_from_dicts(cls, any_list: list[Any]) -> list[T]: + return [cls.from_dict(any_) for any_ in any_list] diff --git a/bittensor/core/chain_data/ip_info.py b/bittensor/core/chain_data/ip_info.py index 6bbfabe02e..28357f7068 100644 --- a/bittensor/core/chain_data/ip_info.py +++ b/bittensor/core/chain_data/ip_info.py @@ -1,7 +1,6 @@ from dataclasses import dataclass -from typing import Optional, Any, Union +from typing import Any, Union -from bittensor.core.chain_data.utils import from_scale_encoding, ChainDataType from bittensor.utils import networking as net from bittensor.utils.registration import torch, use_torch @@ -31,33 +30,11 @@ def encode(self) -> dict[str, Any]: } @classmethod - def from_vec_u8(cls, vec_u8: list[int]) -> Optional["IPInfo"]: - """Returns a IPInfo object from a ``vec_u8``.""" - if len(vec_u8) == 0: - return None - - decoded = from_scale_encoding(vec_u8, ChainDataType.IPInfo) - if decoded is None: - return None - - return IPInfo.fix_decoded_values(decoded) - - @classmethod - def list_from_vec_u8(cls, vec_u8: list[int]) -> list["IPInfo"]: - """Returns a list of IPInfo objects from a ``vec_u8``.""" - decoded = from_scale_encoding(vec_u8, ChainDataType.IPInfo, is_vec=True) - - if decoded is None: - return [] - - return [IPInfo.fix_decoded_values(d) for d in decoded] - - @classmethod - def fix_decoded_values(cls, decoded: dict) -> "IPInfo": + def from_dict(cls, decoded: dict) -> "IPInfo": """Returns a SubnetInfo object from a decoded IPInfo dictionary.""" return IPInfo( - ip=net.int_to_ip(decoded["ip"]), ip_type=decoded["ip_type_and_protocol"] >> 4, + ip=net.int_to_ip(decoded["ip"]), protocol=decoded["ip_type_and_protocol"] & 0xF, ) diff --git a/bittensor/core/chain_data/metagraph_info.py b/bittensor/core/chain_data/metagraph_info.py index 228e0bc6db..18d69ca3fd 100644 --- a/bittensor/core/chain_data/metagraph_info.py +++ b/bittensor/core/chain_data/metagraph_info.py @@ -3,6 +3,7 @@ from bittensor.core.chain_data.axon_info import AxonInfo from bittensor.core.chain_data.chain_identity import ChainIdentity +from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.subnet_identity import SubnetIdentity from bittensor.core.chain_data.utils import ( ChainDataType, @@ -20,7 +21,7 @@ def _tbwu(val: int, netuid: Optional[int] = 0) -> Balance: @dataclass -class MetagraphInfo: +class MetagraphInfo(InfoBase): # Subnet index netuid: int @@ -120,34 +121,7 @@ class MetagraphInfo: ] # List of dividend payout in alpha via subnet. @classmethod - def from_vec_u8(cls, vec_u8: bytes) -> Optional["MetagraphInfo"]: - """Returns a Metagraph object from encoded MetagraphInfo vector.""" - if len(vec_u8) == 0: - return None - decoded = from_scale_encoding(vec_u8, ChainDataType.MetagraphInfo) - if decoded is None: - return None - - return MetagraphInfo.fix_decoded_values(decoded) - - @classmethod - def list_from_vec_u8(cls, vec_u8: bytes) -> list["MetagraphInfo"]: - """Returns a list of Metagraph objects from a list of encoded MetagraphInfo vectors.""" - decoded = from_scale_encoding( - vec_u8, ChainDataType.MetagraphInfo, is_vec=True, is_option=True - ) - if decoded is None: - return [] - - decoded = [ - MetagraphInfo.fix_decoded_values(meta) - for meta in decoded - if meta is not None - ] - return decoded - - @classmethod - def fix_decoded_values(cls, decoded: dict) -> "MetagraphInfo": + def from_dict(cls, decoded: dict) -> "MetagraphInfo": """Returns a Metagraph object from a decoded MetagraphInfo dictionary.""" # Subnet index _netuid = decoded["netuid"] diff --git a/bittensor/core/chain_data/neuron_certificate.py b/bittensor/core/chain_data/neuron_certificate.py index a20f377d38..a702cbc35b 100644 --- a/bittensor/core/chain_data/neuron_certificate.py +++ b/bittensor/core/chain_data/neuron_certificate.py @@ -1,20 +1,13 @@ from dataclasses import dataclass -from typing import List -from bittensor.core.chain_data.utils import from_scale_encoding, ChainDataType from bittensor.utils import Certificate # Dataclasses for chain data. @dataclass -class NeuronCertificate: +class NeuronCertificate: # TODO Info? """ Dataclass for neuron certificate. """ certificate: Certificate - - @classmethod - def from_vec_u8(cls, vec_u8: List[int]) -> "NeuronCertificate": - """Returns a NeuronCertificate object from a ``vec_u8``.""" - return from_scale_encoding(vec_u8, ChainDataType.NeuronCertificate) diff --git a/bittensor/core/chain_data/neuron_info.py b/bittensor/core/chain_data/neuron_info.py index 8d55637f94..ac37e0b402 100644 --- a/bittensor/core/chain_data/neuron_info.py +++ b/bittensor/core/chain_data/neuron_info.py @@ -1,9 +1,6 @@ from dataclasses import dataclass from typing import TYPE_CHECKING, Any, Optional -import bt_decode -import netaddr - from bittensor.core.chain_data.axon_info import AxonInfo from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.prometheus_info import PrometheusInfo @@ -128,62 +125,39 @@ def get_null_neuron() -> "NeuronInfo": return neuron @classmethod - def _fix_decoded(cls, decoded: Any) -> "NeuronInfo": + def from_dict(cls, decoded: Any) -> "NeuronInfo": """Instantiates NeuronInfo from a byte vector.""" - stake_dict = process_stake_data(decoded.stake) + stake_dict = process_stake_data(decoded["stake"]) total_stake = sum(stake_dict.values()) if stake_dict else Balance(0) - axon_info = decoded.axon_info - coldkey = decode_account_id(decoded.coldkey) - hotkey = decode_account_id(decoded.hotkey) + coldkey = decode_account_id(decoded["coldkey"]) + hotkey = decode_account_id(decoded["hotkey"]) return NeuronInfo( - hotkey=hotkey, + active=decoded["active"], + axon_info=AxonInfo.from_dict( + decoded["axon_info"] | { + "hotkey": hotkey, + "coldkey": coldkey, + }, + ), + bonds=[[e[0], e[1]] for e in decoded["bonds"]], coldkey=coldkey, - uid=decoded.uid, - netuid=decoded.netuid, - active=decoded.active, - stake=total_stake, + consensus=u16_normalized_float(decoded["consensus"]), + dividends=u16_normalized_float(decoded["dividends"]), + emission=decoded["emission"] / 1e9, + hotkey=hotkey, + incentive=u16_normalized_float(decoded["incentive"]), + is_null=False, + last_update=decoded["last_update"], + netuid=decoded["netuid"], + prometheus_info=PrometheusInfo.from_dict(decoded["prometheus_info"]), + pruning_score=decoded["pruning_score"], + rank=u16_normalized_float(decoded["rank"]), stake_dict=stake_dict, + stake=total_stake, total_stake=total_stake, - rank=u16_normalized_float(decoded.rank), - emission=decoded.emission / 1e9, - incentive=u16_normalized_float(decoded.incentive), - consensus=u16_normalized_float(decoded.consensus), - trust=u16_normalized_float(decoded.trust), - validator_trust=u16_normalized_float(decoded.validator_trust), - dividends=u16_normalized_float(decoded.dividends), - last_update=decoded.last_update, - validator_permit=decoded.validator_permit, - weights=[(e[0], e[1]) for e in decoded.weights], - bonds=[[e[0], e[1]] for e in decoded.bonds], - pruning_score=decoded.pruning_score, - prometheus_info=PrometheusInfo( - block=decoded.prometheus_info.block, - version=decoded.prometheus_info.version, - ip=str(netaddr.IPAddress(decoded.prometheus_info.ip)), - port=decoded.prometheus_info.port, - ip_type=decoded.prometheus_info.ip_type, - ), - axon_info=AxonInfo( - version=axon_info.version, - ip=str(netaddr.IPAddress(axon_info.ip)), - port=axon_info.port, - ip_type=axon_info.ip_type, - placeholder1=axon_info.placeholder1, - placeholder2=axon_info.placeholder2, - protocol=axon_info.protocol, - hotkey=hotkey, - coldkey=coldkey, - ), - is_null=False, + trust=u16_normalized_float(decoded["trust"]), + uid=decoded["uid"], + validator_permit=decoded["validator_permit"], + validator_trust=u16_normalized_float(decoded["validator_trust"]), + weights=[(e[0], e[1]) for e in decoded["weights"]], ) - - @classmethod - def list_from_vec_u8(cls, vec_u8: bytes) -> list["NeuronInfo"]: - nn = bt_decode.NeuronInfo.decode_vec(bytes(vec_u8)) - - return [cls._fix_decoded(n) for n in nn] - - @classmethod - def from_vec_u8(cls, vec_u8: bytes) -> "NeuronInfo": - n = bt_decode.NeuronInfo.decode(vec_u8) - return cls._fix_decoded(n) diff --git a/bittensor/core/chain_data/neuron_info_lite.py b/bittensor/core/chain_data/neuron_info_lite.py index 6ef1da1f9e..53f0507283 100644 --- a/bittensor/core/chain_data/neuron_info_lite.py +++ b/bittensor/core/chain_data/neuron_info_lite.py @@ -1,9 +1,6 @@ from dataclasses import dataclass from typing import Any, Optional -import bt_decode -import netaddr - from bittensor.core.chain_data.axon_info import AxonInfo from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.prometheus_info import PrometheusInfo @@ -97,76 +94,36 @@ def get_null_neuron() -> "NeuronInfoLite": return neuron @classmethod - def _fix_decoded(cls, decoded: Any) -> "NeuronInfoLite": - active = decoded.active - axon_info = decoded.axon_info - coldkey = decode_account_id(decoded.coldkey) - consensus = decoded.consensus - dividends = decoded.dividends - emission = decoded.emission - hotkey = decode_account_id(decoded.hotkey) - incentive = decoded.incentive - last_update = decoded.last_update - netuid = decoded.netuid - prometheus_info = decoded.prometheus_info - pruning_score = decoded.pruning_score - rank = decoded.rank - stake_dict = process_stake_data(decoded.stake) + def from_dict(cls, decoded: Any) -> "NeuronInfoLite": + coldkey = decode_account_id(decoded["coldkey"]) + hotkey = decode_account_id(decoded["hotkey"]) + stake_dict = process_stake_data(decoded["stake"]) stake = sum(stake_dict.values()) if stake_dict else Balance(0) - trust = decoded.trust - uid = decoded.uid - validator_permit = decoded.validator_permit - validator_trust = decoded.validator_trust return NeuronInfoLite( - active=active, - axon_info=AxonInfo( - version=axon_info.version, - ip=str(netaddr.IPAddress(axon_info.ip)), - port=axon_info.port, - ip_type=axon_info.ip_type, - placeholder1=axon_info.placeholder1, - placeholder2=axon_info.placeholder2, - protocol=axon_info.protocol, - hotkey=hotkey, - coldkey=coldkey, + active=decoded["active"], + axon_info=AxonInfo.from_dict( + decoded["axon_info"] | { + "hotkey": hotkey, + "coldkey": coldkey, + }, ), coldkey=coldkey, - consensus=u16_normalized_float(consensus), - dividends=u16_normalized_float(dividends), - emission=emission / 1e9, + consensus=u16_normalized_float(decoded["consensus"]), + dividends=u16_normalized_float(decoded["dividends"]), + emission=decoded["emission"] / 1e9, hotkey=hotkey, - incentive=u16_normalized_float(incentive), - last_update=last_update, - netuid=netuid, - prometheus_info=PrometheusInfo( - version=prometheus_info.version, - ip=str(netaddr.IPAddress(prometheus_info.ip)), - port=prometheus_info.port, - ip_type=prometheus_info.ip_type, - block=prometheus_info.block, - ), - pruning_score=pruning_score, - rank=u16_normalized_float(rank), + incentive=u16_normalized_float(decoded["incentive"]), + last_update=decoded["last_update"], + netuid=decoded["netuid"], + prometheus_info=PrometheusInfo.from_dict(decoded["prometheus_info"]), + pruning_score=decoded["pruning_score"], + rank=u16_normalized_float(decoded["rank"]), stake_dict=stake_dict, stake=stake, total_stake=stake, - trust=u16_normalized_float(trust), - uid=uid, - validator_permit=validator_permit, - validator_trust=u16_normalized_float(validator_trust), + trust=u16_normalized_float(decoded["trust"]), + uid=decoded["uid"], + validator_permit=decoded["validator_permit"], + validator_trust=u16_normalized_float(decoded["validator_trust"]), ) - - @classmethod - def list_from_vec_u8(cls, vec_u8: bytes) -> list["NeuronInfoLite"]: - """ - Decodes a bytes object into a list of NeuronInfoLite instances. - - Args: - vec_u8 (bytes): The bytes object to decode into NeuronInfoLite instances. - - Returns: - list[NeuronInfoLite]: A list of NeuronInfoLite instances decoded from the provided bytes object. - """ - decoded = bt_decode.NeuronInfoLite.decode_vec(vec_u8) - return [cls._fix_decoded(d) for d in decoded] diff --git a/bittensor/core/chain_data/prometheus_info.py b/bittensor/core/chain_data/prometheus_info.py index 7cdccf83fa..b9e873c5a7 100644 --- a/bittensor/core/chain_data/prometheus_info.py +++ b/bittensor/core/chain_data/prometheus_info.py @@ -1,10 +1,12 @@ from dataclasses import dataclass -from bittensor.utils import networking +import netaddr + +from bittensor.core.chain_data.info_base import InfoBase @dataclass -class PrometheusInfo: +class PrometheusInfo(InfoBase): """ Dataclass representing information related to Prometheus. @@ -23,9 +25,11 @@ class PrometheusInfo: ip_type: int @classmethod - def fix_decoded_values(cls, prometheus_info_decoded: dict) -> "PrometheusInfo": - """Returns a PrometheusInfo object from a prometheus_info_decoded dictionary.""" - prometheus_info_decoded["ip"] = networking.int_to_ip( - int(prometheus_info_decoded["ip"]) + def from_dict(cls, data): + return cls( + block=data["block"], + ip_type=data["ip_type"], + ip=str(netaddr.IPAddress(data["ip"])), + port=data["port"], + version=data["version"], ) - return cls(**prometheus_info_decoded) diff --git a/bittensor/core/chain_data/scheduled_coldkey_swap_info.py b/bittensor/core/chain_data/scheduled_coldkey_swap_info.py index 7c0f6e7f88..629f48d744 100644 --- a/bittensor/core/chain_data/scheduled_coldkey_swap_info.py +++ b/bittensor/core/chain_data/scheduled_coldkey_swap_info.py @@ -1,14 +1,15 @@ from dataclasses import dataclass -from typing import Optional, Any +from typing import Optional from scalecodec.utils.ss58 import ss58_encode +from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.utils import from_scale_encoding, ChainDataType from bittensor.core.settings import SS58_FORMAT @dataclass -class ScheduledColdkeySwapInfo: +class ScheduledColdkeySwapInfo(InfoBase): """ The `ScheduledColdkeySwapInfo` class is a dataclass representing information about scheduled cold key swaps. @@ -23,37 +24,13 @@ class ScheduledColdkeySwapInfo: arbitration_block: int @classmethod - def fix_decoded_values(cls, decoded: Any) -> "ScheduledColdkeySwapInfo": - """Fixes the decoded values.""" + def from_dict(cls, decoded: dict) -> "ScheduledColdkeySwapInfo": return cls( - old_coldkey=ss58_encode(decoded["old_coldkey"], SS58_FORMAT), - new_coldkey=ss58_encode(decoded["new_coldkey"], SS58_FORMAT), arbitration_block=decoded["arbitration_block"], + new_coldkey=ss58_encode(decoded["new_coldkey"], SS58_FORMAT), + old_coldkey=ss58_encode(decoded["old_coldkey"], SS58_FORMAT), ) - @classmethod - def from_vec_u8(cls, vec_u8: list[int]) -> Optional["ScheduledColdkeySwapInfo"]: - """Returns a ScheduledColdkeySwapInfo object from a ``vec_u8``.""" - if len(vec_u8) == 0: - return None - - decoded = from_scale_encoding(vec_u8, ChainDataType.ScheduledColdkeySwapInfo) - if decoded is None: - return None - - return ScheduledColdkeySwapInfo.fix_decoded_values(decoded) - - @classmethod - def list_from_vec_u8(cls, vec_u8: list[int]) -> list["ScheduledColdkeySwapInfo"]: - """Returns a list of ScheduledColdkeySwapInfo objects from a ``vec_u8``.""" - decoded = from_scale_encoding( - vec_u8, ChainDataType.ScheduledColdkeySwapInfo, is_vec=True - ) - if decoded is None: - return [] - - return [ScheduledColdkeySwapInfo.fix_decoded_values(d) for d in decoded] - @classmethod def decode_account_id_list(cls, vec_u8: list[int]) -> Optional[list[str]]: """Decodes a list of AccountIds from vec_u8.""" diff --git a/bittensor/core/chain_data/stake_info.py b/bittensor/core/chain_data/stake_info.py index bb953d64c4..360ce6c3fe 100644 --- a/bittensor/core/chain_data/stake_info.py +++ b/bittensor/core/chain_data/stake_info.py @@ -1,14 +1,9 @@ from dataclasses import dataclass -from typing import Any, Optional -import bt_decode from scalecodec.utils.ss58 import ss58_encode from bittensor.core.chain_data.info_base import InfoBase -from bittensor.core.chain_data.utils import ( - decode_account_id, - from_scale_encoding_using_type_string, -) +from bittensor.core.chain_data.utils import decode_account_id from bittensor.core.settings import SS58_FORMAT from bittensor.utils.balance import Balance @@ -34,7 +29,7 @@ class StakeInfo(InfoBase): is_registered: bool @classmethod - def fix_decoded_values(cls, decoded: Any) -> "StakeInfo": + def fix_decoded_values(cls, decoded: dict) -> "StakeInfo": """Fixes the decoded values.""" netuid = decoded["netuid"] return cls( @@ -49,51 +44,9 @@ def fix_decoded_values(cls, decoded: Any) -> "StakeInfo": ) @classmethod - def _fix_decoded(cls, decoded: Any) -> "StakeInfo": + def _fix_decoded(cls, decoded: dict) -> "StakeInfo": hotkey = decode_account_id(decoded.hotkey) coldkey = decode_account_id(decoded.coldkey) stake = Balance.from_rao(decoded.stake) return StakeInfo(hotkey, coldkey, stake) - - @classmethod - def from_vec_u8(cls, vec_u8: list[int]) -> Optional["StakeInfo"]: - """Returns a StakeInfo object from a ``vec_u8``.""" - if len(vec_u8) == 0: - return None - - decoded = bt_decode.StakeInfo.decode(vec_u8) - if decoded is None: - return None - - return StakeInfo.fix_decoded_values(decoded) - - @classmethod - def list_of_tuple_from_vec_u8( - cls, vec_u8: list[int] - ) -> dict[str, list["StakeInfo"]]: - """Returns a list of StakeInfo objects from a ``vec_u8``.""" - decoded: Optional[list[tuple[str, list[object]]]] = ( - from_scale_encoding_using_type_string( - input_=vec_u8, type_string="Vec<(AccountId, Vec)>" - ) - ) - - if decoded is None: - return {} - - return { - ss58_encode(address=account_id, ss58_format=SS58_FORMAT): [ - StakeInfo.fix_decoded_values(d) for d in stake_info - ] - for account_id, stake_info in decoded - } - - @classmethod - def list_from_vec_u8(cls, vec_u8: bytes) -> list["StakeInfo"]: - """Returns a list of StakeInfo objects from a ``vec_u8``.""" - decoded = bt_decode.StakeInfo.decode_vec(vec_u8) - if decoded is None: - return [] - - return [StakeInfo.fix_decoded_values(d) for d in decoded] diff --git a/bittensor/core/chain_data/subnet_hyperparameters.py b/bittensor/core/chain_data/subnet_hyperparameters.py index a0a9495dc2..30e4511201 100644 --- a/bittensor/core/chain_data/subnet_hyperparameters.py +++ b/bittensor/core/chain_data/subnet_hyperparameters.py @@ -1,7 +1,4 @@ from dataclasses import dataclass -from typing import Any, Optional - -import bt_decode from bittensor.core.chain_data.info_base import InfoBase @@ -70,7 +67,7 @@ class SubnetHyperparameters(InfoBase): liquid_alpha_enabled: bool @classmethod - def _fix_decoded(cls, decoded: Any) -> "SubnetHyperparameters": + def from_dict(cls, decoded: dict) -> "SubnetHyperparameters": """ Create a `SubnetHyperparameters` instance from a vector of bytes. @@ -85,36 +82,31 @@ def _fix_decoded(cls, decoded: Any) -> "SubnetHyperparameters": otherwise. """ return SubnetHyperparameters( - rho=decoded.rho, - kappa=decoded.kappa, - immunity_period=decoded.immunity_period, - min_allowed_weights=decoded.min_allowed_weights, - max_weight_limit=decoded.max_weights_limit, - tempo=decoded.tempo, - min_difficulty=decoded.min_difficulty, - max_difficulty=decoded.max_difficulty, - weights_version=decoded.weights_version, - weights_rate_limit=decoded.weights_rate_limit, - adjustment_interval=decoded.adjustment_interval, - activity_cutoff=decoded.activity_cutoff, - registration_allowed=decoded.registration_allowed, - target_regs_per_interval=decoded.target_regs_per_interval, - min_burn=decoded.min_burn, - max_burn=decoded.max_burn, - bonds_moving_avg=decoded.bonds_moving_avg, - max_regs_per_block=decoded.max_regs_per_block, - serving_rate_limit=decoded.serving_rate_limit, - max_validators=decoded.max_validators, - adjustment_alpha=decoded.adjustment_alpha, - difficulty=decoded.difficulty, - commit_reveal_weights_interval=decoded.commit_reveal_weights_interval, - commit_reveal_weights_enabled=decoded.commit_reveal_weights_enabled, - alpha_high=decoded.alpha_high, - alpha_low=decoded.alpha_low, - liquid_alpha_enabled=decoded.liquid_alpha_enabled, + activity_cutoff=decoded["activity_cutoff"], + adjustment_alpha=decoded["adjustment_alpha"], + adjustment_interval=decoded["adjustment_interval"], + alpha_high=decoded["alpha_high"], + alpha_low=decoded["alpha_low"], + bonds_moving_avg=decoded["bonds_moving_avg"], + commit_reveal_weights_enabled=decoded["commit_reveal_weights_enabled"], + commit_reveal_weights_interval=decoded["commit_reveal_weights_interval"], + difficulty=decoded["difficulty"], + immunity_period=decoded["immunity_period"], + kappa=decoded["kappa"], + liquid_alpha_enabled=decoded["liquid_alpha_enabled"], + max_burn=decoded["max_burn"], + max_difficulty=decoded["max_difficulty"], + max_regs_per_block=decoded["max_regs_per_block"], + max_validators=decoded["max_validators"], + max_weight_limit=decoded["max_weights_limit"], + min_allowed_weights=decoded["min_allowed_weights"], + min_burn=decoded["min_burn"], + min_difficulty=decoded["min_difficulty"], + registration_allowed=decoded["registration_allowed"], + rho=decoded["rho"], + serving_rate_limit=decoded["serving_rate_limit"], + target_regs_per_interval=decoded["target_regs_per_interval"], + tempo=decoded["tempo"], + weights_rate_limit=decoded["weights_rate_limit"], + weights_version=decoded["weights_version"], ) - - @classmethod - def from_vec_u8(cls, vec_u8: bytes) -> Optional["SubnetHyperparameters"]: - decoded = bt_decode.SubnetHyperparameters.decode(vec_u8) - return cls._fix_decoded(decoded) diff --git a/bittensor/core/chain_data/subnet_info.py b/bittensor/core/chain_data/subnet_info.py index 4e37716a5d..3b47ba16d0 100644 --- a/bittensor/core/chain_data/subnet_info.py +++ b/bittensor/core/chain_data/subnet_info.py @@ -1,8 +1,6 @@ from dataclasses import dataclass from typing import Any -import bt_decode - from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.utils import decode_account_id from bittensor.utils import u16_normalized_float @@ -33,32 +31,27 @@ class SubnetInfo(InfoBase): owner_ss58: str @classmethod - def _fix_decoded(cls, decoded: Any) -> "SubnetInfo": + def from_dict(cls, decoded: Any) -> "SubnetInfo": return SubnetInfo( - netuid=decoded.netuid, - rho=decoded.rho, - kappa=decoded.kappa, - difficulty=decoded.difficulty, - immunity_period=decoded.immunity_period, - max_allowed_validators=decoded.max_allowed_validators, - min_allowed_weights=decoded.min_allowed_weights, - max_weight_limit=decoded.max_weights_limit, - scaling_law_power=decoded.scaling_law_power, - subnetwork_n=decoded.subnetwork_n, - max_n=decoded.max_allowed_uids, - blocks_since_epoch=decoded.blocks_since_last_step, - tempo=decoded.tempo, - modality=decoded.network_modality, + blocks_since_epoch=decoded["blocks_since_last_step"], + burn=Balance.from_rao(decoded["burn"]), connection_requirements={ str(int(netuid)): u16_normalized_float(int(req)) - for (netuid, req) in decoded.network_connect + for (netuid, req) in decoded["network_connect"] }, - emission_value=decoded.emission_values, - burn=Balance.from_rao(decoded.burn), - owner_ss58=decode_account_id(decoded.owner), + difficulty=decoded["difficulty"], + emission_value=decoded["emission_values"], + immunity_period=decoded["immunity_period"], + kappa=decoded["kappa"], + max_allowed_validators=decoded["max_allowed_validators"], + max_n=decoded["max_allowed_uids"], + max_weight_limit=decoded["max_weights_limit"], + min_allowed_weights=decoded["min_allowed_weights"], + modality=decoded["network_modality"], + netuid=decoded["netuid"], + owner_ss58=decode_account_id(decoded["owner"]), + rho=decoded["rho"], + scaling_law_power=decoded["scaling_law_power"], + subnetwork_n=decoded["subnetwork_n"], + tempo=decoded["tempo"], ) - - @classmethod - def list_from_vec_u8(cls, vec_u8: bytes) -> list["SubnetInfo"]: - decoded = bt_decode.SubnetInfo.decode_vec_option(vec_u8) - return [cls._fix_decoded(d) for d in decoded] diff --git a/bittensor/core/chain_data/subnet_state.py b/bittensor/core/chain_data/subnet_state.py index 8ebcbec62c..4254ffad5b 100644 --- a/bittensor/core/chain_data/subnet_state.py +++ b/bittensor/core/chain_data/subnet_state.py @@ -4,21 +4,17 @@ """ from dataclasses import dataclass -from typing import Optional, Union from scalecodec.utils.ss58 import ss58_encode -from bittensor.core.chain_data.utils import ( - ChainDataType, - from_scale_encoding, - SS58_FORMAT, -) +from bittensor.core.chain_data.info_base import InfoBase +from bittensor.core.chain_data.utils import SS58_FORMAT from bittensor.utils import u16_normalized_float from bittensor.utils.balance import Balance @dataclass -class SubnetState: +class SubnetState(InfoBase): netuid: int hotkeys: list[str] coldkeys: list[str] @@ -39,26 +35,7 @@ class SubnetState: emission_history: list[list[int]] @classmethod - def from_vec_u8(cls, vec_u8: Union[list[int], bytes]) -> Optional["SubnetState"]: - if len(vec_u8) == 0: - return None - decoded = from_scale_encoding(vec_u8, ChainDataType.SubnetState) - if decoded is None: - return None - return SubnetState.fix_decoded_values(decoded) - - @classmethod - def list_from_vec_u8(cls, vec_u8: list[int]) -> list["SubnetState"]: - decoded = from_scale_encoding( - vec_u8, ChainDataType.SubnetState, is_vec=True, is_option=True - ) - if decoded is None: - return [] - decoded = [SubnetState.fix_decoded_values(d) for d in decoded] - return decoded - - @classmethod - def fix_decoded_values(cls, decoded: dict) -> "SubnetState": + def from_dict(cls, decoded: dict) -> "SubnetState": netuid = decoded["netuid"] return SubnetState( netuid=netuid, diff --git a/bittensor/core/metagraph.py b/bittensor/core/metagraph.py index 732e5d229d..5a951daa19 100644 --- a/bittensor/core/metagraph.py +++ b/bittensor/core/metagraph.py @@ -13,7 +13,6 @@ from bittensor.core import settings from bittensor.core.chain_data import AxonInfo, SubnetState -from bittensor.utils import hex_to_bytes from bittensor.utils.btlogging import logging from bittensor.utils.registration import torch, use_torch from bittensor.utils.weight_utils import ( @@ -1493,21 +1492,20 @@ async def _get_all_stakes_from_chain( if not subtensor: subtensor = await self._initialize_subtensor(subtensor=subtensor) - hex_bytes_result = await subtensor.query_runtime_api( + result = await subtensor.query_runtime_api( runtime_api="SubnetInfoRuntimeApi", method="get_subnet_state", params=[self.netuid], ) - if hex_bytes_result is None: + if result is None: logging.debug( f"Unable to retrieve subnet state for netuid `{self.netuid}`." ) return [] - subnet_state: "SubnetState" = SubnetState.from_vec_u8( - hex_to_bytes(hex_bytes_result) - ) + subnet_state: "SubnetState" = SubnetState.from_dict(result) + if self.netuid == 0: self.total_stake = self.stake = self.tao_stake = self.alpha_stake = ( subnet_state.tao_stake @@ -1778,21 +1776,20 @@ def _get_all_stakes_from_chain(self, subtensor: Optional["Subtensor"] = None): if not subtensor: subtensor = self._initialize_subtensor(subtensor=subtensor) - hex_bytes_result = subtensor.query_runtime_api( + result = subtensor.query_runtime_api( runtime_api="SubnetInfoRuntimeApi", method="get_subnet_state", params=[self.netuid], ) - if hex_bytes_result is None: + if result is None: logging.debug( f"Unable to retrieve subnet state for netuid `{self.netuid}`." ) return [] - subnet_state: "SubnetState" = SubnetState.from_vec_u8( - hex_to_bytes(hex_bytes_result) - ) + subnet_state: "SubnetState" = SubnetState.from_dict(result) + if self.netuid == 0: self.total_stake = self.stake = self.tao_stake = self.alpha_stake = ( subnet_state.tao_stake diff --git a/bittensor/core/subtensor.py b/bittensor/core/subtensor.py index f9b930f77f..01bd884e53 100644 --- a/bittensor/core/subtensor.py +++ b/bittensor/core/subtensor.py @@ -7,7 +7,7 @@ import scalecodec from async_substrate_interface.errors import SubstrateRequestException from async_substrate_interface.sync_substrate import SubstrateInterface -from async_substrate_interface.utils import hex_to_bytes, json +from async_substrate_interface.utils import json from numpy.typing import NDArray from bittensor.core.async_subtensor import ProposalVoteData @@ -363,7 +363,7 @@ def all_subnets(self, block: Optional[int] = None) -> Optional[list["DynamicInfo "get_all_dynamic_info", block_hash=block_hash, ) - subnets = DynamicInfo.list_from_vec_u8(bytes.fromhex(query.decode()[2:])) + subnets = DynamicInfo.list_from_dicts(query.decode()) return subnets def blocks_since_last_update(self, netuid: int, uid: int) -> Optional[int]: @@ -523,7 +523,7 @@ def get_all_subnets_info(self, block: Optional[int] = None) -> list["SubnetInfo" if not result: return [] else: - return SubnetInfo.list_from_any(result) + return SubnetInfo.list_from_dicts(result) def get_balance(self, address: str, block: Optional[int] = None) -> Balance: """ @@ -787,7 +787,7 @@ def get_delegate_by_hotkey( if not result: return None - return DelegateInfo.from_any(result) + return DelegateInfo.from_dict(result) def get_delegate_identities( self, block: Optional[int] = None @@ -904,7 +904,7 @@ def get_delegated( if not result: return [] - return DelegateInfo.delegated_list_from_any(result) + return DelegateInfo.delegated_list_from_dicts(result) def get_delegates(self, block: Optional[int] = None) -> list["DelegateInfo"]: """ @@ -923,7 +923,7 @@ def get_delegates(self, block: Optional[int] = None) -> list["DelegateInfo"]: block=block, ) if result: - return DelegateInfo.list_from_any(result) + return DelegateInfo.list_from_dicts(result) else: return [] @@ -1010,8 +1010,7 @@ def get_metagraph_info( params=[netuid], block_hash=block_hash, ) - metagraph_bytes = hex_to_bytes(query.decode()) - return MetagraphInfo.from_vec_u8(metagraph_bytes) + return MetagraphInfo.from_dict(query.decode()) def get_all_metagraphs_info( self, block: Optional[int] = None @@ -1022,8 +1021,7 @@ def get_all_metagraphs_info( "get_all_metagraphs", block_hash=block_hash, ) - metagraphs_bytes = hex_to_bytes(query.decode()) - return MetagraphInfo.list_from_vec_u8(metagraphs_bytes) + return MetagraphInfo.list_from_dicts(query.decode()) def get_netuids_for_hotkey( self, hotkey_ss58: str, block: Optional[int] = None @@ -1125,7 +1123,7 @@ def get_neuron_for_pubkey_and_subnet( if not result: return NeuronInfo.get_null_neuron() - return NeuronInfo.from_any(result) + return NeuronInfo.from_dict(result) def get_stake( self, @@ -1192,17 +1190,16 @@ def get_stake_for_coldkey( Returns: Optional[list[StakeInfo]]: A list of StakeInfo objects, or ``None`` if no stake information is found. """ - encoded_coldkey = ss58_to_vec_u8(coldkey_ss58) - hex_bytes_result = self.query_runtime_api( + result = self.query_runtime_api( runtime_api="StakeInfoRuntimeApi", method="get_stake_info_for_coldkey", - params=[encoded_coldkey], # type: ignore + params=[coldkey_ss58], # type: ignore block=block, ) - if hex_bytes_result is None: + if result is None: return [] - stakes = StakeInfo.list_from_vec_u8(hex_to_bytes(hex_bytes_result)) # type: ignore + stakes = StakeInfo.list_from_dicts(result) # type: ignore return [stake for stake in stakes if stake.stake > 0] def get_stake_info_for_coldkey( @@ -1232,7 +1229,7 @@ def get_stake_info_for_coldkey( if not result: return [] - return StakeInfo.list_from_any(result) + return StakeInfo.list_from_dicts(result) def get_subnet_burn_cost(self, block: Optional[int] = None) -> Optional[str]: """ @@ -1284,7 +1281,7 @@ def get_subnet_hyperparameters( if not result: return None - return SubnetHyperparameters.from_any(result) + return SubnetHyperparameters.from_dict(result) def get_subnet_reveal_period_epochs( self, netuid: int, block: Optional[int] = None @@ -1794,7 +1791,7 @@ def neuron_for_uid( if not result: return NeuronInfo.get_null_neuron() - return NeuronInfo.from_any(result) + return NeuronInfo.from_dict(result) def neurons(self, netuid: int, block: Optional[int] = None) -> list["NeuronInfo"]: """ @@ -1822,7 +1819,7 @@ def neurons(self, netuid: int, block: Optional[int] = None) -> list["NeuronInfo" if not result: return [] - return NeuronInfo.list_from_any(result) + return NeuronInfo.list_from_dicts(result) def neurons_lite( self, netuid: int, block: Optional[int] = None @@ -1852,7 +1849,7 @@ def neurons_lite( if not result: return [] - return NeuronInfoLite.list_from_any(result) + return NeuronInfoLite.list_from_dicts(result) def query_identity(self, key: str, block: Optional[int] = None) -> dict: """ @@ -1923,7 +1920,7 @@ def subnet(self, netuid: int, block: Optional[int] = None) -> Optional[DynamicIn params=[netuid], block_hash=block_hash, ) - subnet = DynamicInfo.from_vec_u8(hex_to_bytes(query.decode())) # type: ignore + subnet = DynamicInfo.from_dict(query.decode()) # type: ignore return subnet def subnet_exists(self, netuid: int, block: Optional[int] = None) -> bool: diff --git a/bittensor/utils/mock/subtensor_mock.py b/bittensor/utils/mock/subtensor_mock.py index a6ff9a49a6..e2aeec8758 100644 --- a/bittensor/utils/mock/subtensor_mock.py +++ b/bittensor/utils/mock/subtensor_mock.py @@ -772,7 +772,7 @@ def _neuron_subnet_exists( trust = u16_normalized_float(trust) validator_trust = u16_normalized_float(validator_trust) dividends = u16_normalized_float(dividends) - prometheus_info = PrometheusInfo.fix_decoded_values(prometheus_info) + prometheus_info = PrometheusInfo.from_dict(prometheus_info) axon_info_ = AxonInfo.from_neuron_info( {"hotkey": hotkey, "coldkey": coldkey, "axon_info": axon_info_} ) diff --git a/requirements/prod.txt b/requirements/prod.txt index f7895e60c5..888743a7ba 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -2,7 +2,7 @@ wheel setuptools~=70.0.0 aiohttp~=3.9 asyncstdlib~=3.13.0 -bittensor-cli +# bittensor-cli bt-decode==0.4.0 colorama~=0.4.6 fastapi~=0.110.1 @@ -25,4 +25,4 @@ uvicorn websockets>=14.1 bittensor-commit-reveal>=0.2.0 bittensor-wallet>=3.0.0 -async-substrate-interface @ git+https://github.com/opentensor/async-substrate-interface.git@staging +async-substrate-interface==1.0.0rc9 diff --git a/tests/helpers/integration_websocket_data.py b/tests/helpers/integration_websocket_data.py index d79a4dab01..46a2476150 100644 --- a/tests/helpers/integration_websocket_data.py +++ b/tests/helpers/integration_websocket_data.py @@ -43,6 +43,191 @@ }, }, }, + "rpc_methods": { + "[]": { + "jsonrpc": "2.0", + "result": { + "methods": [ + "account_nextIndex", + "archive_unstable_body", + "archive_unstable_call", + "archive_unstable_finalizedHeight", + "archive_unstable_genesisHash", + "archive_unstable_hashByHeight", + "archive_unstable_header", + "archive_unstable_storage", + "author_hasKey", + "author_hasSessionKeys", + "author_insertKey", + "author_pendingExtrinsics", + "author_removeExtrinsic", + "author_rotateKeys", + "author_submitAndWatchExtrinsic", + "author_submitExtrinsic", + "author_unwatchExtrinsic", + "chainHead_v1_body", + "chainHead_v1_call", + "chainHead_v1_continue", + "chainHead_v1_follow", + "chainHead_v1_header", + "chainHead_v1_stopOperation", + "chainHead_v1_storage", + "chainHead_v1_unfollow", + "chainHead_v1_unpin", + "chainSpec_v1_chainName", + "chainSpec_v1_genesisHash", + "chainSpec_v1_properties", + "chain_getBlock", + "chain_getBlockHash", + "chain_getFinalisedHead", + "chain_getFinalizedHead", + "chain_getHead", + "chain_getHeader", + "chain_getRuntimeVersion", + "chain_subscribeAllHeads", + "chain_subscribeFinalisedHeads", + "chain_subscribeFinalizedHeads", + "chain_subscribeNewHead", + "chain_subscribeNewHeads", + "chain_subscribeRuntimeVersion", + "chain_unsubscribeAllHeads", + "chain_unsubscribeFinalisedHeads", + "chain_unsubscribeFinalizedHeads", + "chain_unsubscribeNewHead", + "chain_unsubscribeNewHeads", + "chain_unsubscribeRuntimeVersion", + "childstate_getKeys", + "childstate_getKeysPaged", + "childstate_getKeysPagedAt", + "childstate_getStorage", + "childstate_getStorageEntries", + "childstate_getStorageHash", + "childstate_getStorageSize", + "debug_getBadBlocks", + "debug_getRawBlock", + "debug_getRawHeader", + "debug_getRawReceipts", + "debug_getRawTransaction", + "delegateInfo_getDelegate", + "delegateInfo_getDelegated", + "delegateInfo_getDelegates", + "eth_accounts", + "eth_blockNumber", + "eth_call", + "eth_chainId", + "eth_coinbase", + "eth_estimateGas", + "eth_feeHistory", + "eth_gasPrice", + "eth_getBalance", + "eth_getBlockByHash", + "eth_getBlockByNumber", + "eth_getBlockReceipts", + "eth_getBlockTransactionCountByHash", + "eth_getBlockTransactionCountByNumber", + "eth_getCode", + "eth_getFilterChanges", + "eth_getFilterLogs", + "eth_getLogs", + "eth_getStorageAt", + "eth_getTransactionByBlockHashAndIndex", + "eth_getTransactionByBlockNumberAndIndex", + "eth_getTransactionByHash", + "eth_getTransactionCount", + "eth_getTransactionReceipt", + "eth_getUncleByBlockHashAndIndex", + "eth_getUncleByBlockNumberAndIndex", + "eth_getUncleCountByBlockHash", + "eth_getUncleCountByBlockNumber", + "eth_getWork", + "eth_hashrate", + "eth_maxPriorityFeePerGas", + "eth_mining", + "eth_newBlockFilter", + "eth_newFilter", + "eth_newPendingTransactionFilter", + "eth_protocolVersion", + "eth_sendRawTransaction", + "eth_sendTransaction", + "eth_submitHashrate", + "eth_submitWork", + "eth_subscribe", + "eth_syncing", + "eth_uninstallFilter", + "eth_unsubscribe", + "net_listening", + "net_peerCount", + "net_version", + "neuronInfo_getNeuron", + "neuronInfo_getNeuronLite", + "neuronInfo_getNeurons", + "neuronInfo_getNeuronsLite", + "offchain_localStorageGet", + "offchain_localStorageSet", + "payment_queryFeeDetails", + "payment_queryInfo", + "rpc_methods", + "state_call", + "state_callAt", + "state_getChildReadProof", + "state_getKeys", + "state_getKeysPaged", + "state_getKeysPagedAt", + "state_getMetadata", + "state_getPairs", + "state_getReadProof", + "state_getRuntimeVersion", + "state_getStorage", + "state_getStorageAt", + "state_getStorageHash", + "state_getStorageHashAt", + "state_getStorageSize", + "state_getStorageSizeAt", + "state_queryStorage", + "state_queryStorageAt", + "state_subscribeRuntimeVersion", + "state_subscribeStorage", + "state_traceBlock", + "state_unsubscribeRuntimeVersion", + "state_unsubscribeStorage", + "subnetInfo_getLockCost", + "subnetInfo_getSubnetHyperparams", + "subnetInfo_getSubnetInfo", + "subnetInfo_getSubnetInfo_v2", + "subnetInfo_getSubnetsInf_v2", + "subnetInfo_getSubnetsInfo", + "subscribe_newHead", + "system_accountNextIndex", + "system_addLogFilter", + "system_addReservedPeer", + "system_chain", + "system_chainType", + "system_dryRun", + "system_dryRunAt", + "system_health", + "system_localListenAddresses", + "system_localPeerId", + "system_name", + "system_nodeRoles", + "system_peers", + "system_properties", + "system_removeReservedPeer", + "system_reservedPeers", + "system_resetLogFilter", + "system_syncState", + "system_unstable_networkState", + "system_version", + "transactionWatch_v1_submitAndWatch", + "transactionWatch_v1_unwatch", + "transaction_v1_broadcast", + "transaction_v1_stop", + "unsubscribe_newHead", + "web3_clientVersion", + "web3_sha3", + ] + }, + } + }, "state_getRuntimeVersion": { '["0x119e135f8ae6eac1f3fc47fc14838afcfdbee13e8dba14657ae150f4d56f6df2"]': { "jsonrpc": "2.0", @@ -85,9 +270,10 @@ }, '["0x658faa385070e074c85bf6b568cf0555696e262a16e52255a69d8acd793541460100", null]': { "jsonrpc": "2.0", - "result": "0x04a800000000000000", + "result": "0x080000000000000000cd46000000000000", }, }, + "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, }, "bonds": { "chain_getHead": { @@ -715,51 +901,35 @@ "chain_getHead": { "[]": { "jsonrpc": "2.0", - "result": "0xe9729c54c0e59c611198b560a7a93e52154100187d04dfc09d1dc1a6572d4006", + "result": "0x1b3f85dc8c83cada6d1782c955973a509a37c62af3d6ba29f5fd816aee37eb3b", } }, "chain_getHeader": { - '["0xe9729c54c0e59c611198b560a7a93e52154100187d04dfc09d1dc1a6572d4006"]': { - "jsonrpc": "2.0", - "result": { - "digest": { - "logs": [ - "0x0661757261209b489a0800000000", - "0x0466726f6e8801fa9bcb7befe1394a353134de30ad705326185473f91cd6be31397c06759e007800", - "0x0561757261010128b382541b4a78e5c9ff3cee4ae48fe3c5337add9f1baad15b72939990218773794b348babefd9fa28312c5b5097b52b034d90a331a747dcfcd03fa37a7fb482", - ] - }, - "extrinsicsRoot": "0xfabdc25842a79c97f6029f17f0f7521ec5f9b41815932f1dcc2cb0752fa0ca9a", - "number": "0x31ce8e", - "parentHash": "0xae0ef35761d050ada6d4f09efec39ca430d4f4c50b927741b32fd487d382ead8", - "stateRoot": "0x7da2cf163b71981ea914cc9f8ddecf662faee1f6f04acf5e814a16f086ddbe78", - }, - }, - "[null]": { + '["0x1b3f85dc8c83cada6d1782c955973a509a37c62af3d6ba29f5fd816aee37eb3b"]': { "jsonrpc": "2.0", "result": { "digest": { "logs": [ - "0x0661757261209c489a0800000000", - "0x0466726f6e8801b81937c0aed82aace40c1860c8f8be871ed90466eb702dcd50fef49a70ca8dcf00", - "0x056175726101016a8bbee0a2b31058eff0df90b3b194cc7824e735e09b957136291639ff36c2047102e48742ac2ac14fe1634b652bba055b00383b06cea6482c56755b74c3c88b", + "0x066175726120ab489a0800000000", + "0x0466726f6e88015b559367fb27665be180a32109a44b153dd14cafb22eb908ac9e79a308916c9a00", + "0x056175726101012030b4a878800704102801d12f2dfe4b3f66bd8c3fbe236e4881ed1b9bdbaf6c8eb6200f9db52945187c3c1f46d8b4c08c1b50e2002d94594e0c751069ca7d8d", ] }, - "extrinsicsRoot": "0x42acc4ffcaba39f003a14f13e2dc69e5b93198724a019515f31e22baf0b240f7", - "number": "0x31ce8f", - "parentHash": "0xe9729c54c0e59c611198b560a7a93e52154100187d04dfc09d1dc1a6572d4006", - "stateRoot": "0x319de5cb67bbf31e93a7db2e75b9bca48ce8d0b91d5156ce2c738eb178700d98", + "extrinsicsRoot": "0xf7eaa2bb07e7650b27ee819ee07c987207ad40220f250e4eebb1178e19734242", + "number": "0x31ce9e", + "parentHash": "0xd867f39bb9e2a626945183af01065b61d0695d435a765bfd0ce5f821fbed8f82", + "stateRoot": "0x3096ed3b5859801b59e2fb348ef560e87f473a799dea9be12982b969fdd1dfaf", }, - }, + } }, "state_call": { '["SubnetInfoRuntimeApi_get_subnets_info", "", null]': { "jsonrpc": "2.0", - "result": "0x0c010028feff0100025a62020140010100feff0300c800010180910100000002286bee000000000000000000000000000000000000000000000000000000000000000000010428feff0100025a6202214e010104feff0300c80401049903a10500000002286beed43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d00010c28feff0100025a6202014001020110a10fc8000140988d0100000002286bee000000000000000000000000000000000000000000000000000000000000000000", + "result": "0x08010028feff0100025a62020140010100feff0300c80001017501910100000002286bee0000000000000000000000000000000000000000000000000000000000000000010428feff0100025a62020140010100feff0300c804010479019101000002286bee02286bee0000000000000000000000000000000000000000000000000000000000000000", } }, "state_getRuntimeVersion": { - '["0xae0ef35761d050ada6d4f09efec39ca430d4f4c50b927741b32fd487d382ead8"]': { + '["0xd867f39bb9e2a626945183af01065b61d0695d435a765bfd0ce5f821fbed8f82"]': { "jsonrpc": "2.0", "result": { "apis": [ @@ -793,6 +963,7 @@ }, } }, + "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, }, "get_balance": { "chain_getHead": { @@ -2272,12 +2443,389 @@ }, } }, - "state_call": { - '["NeuronInfoRuntimeApi_get_neuron", "01000500", null]': { - "jsonrpc": "2.0", - "result": "0x016a4368adc8781240b59c45ccacbf5a7ee0ca3a7adc7e893c27b4956e172c0220d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0000000000000000a10201000000", - }, - }, + "state_call": { + '["NeuronInfoRuntimeApi_get_neuron", "01000500", null]': { + "jsonrpc": "2.0", + "result": "0x016a4368adc8781240b59c45ccacbf5a7ee0ca3a7adc7e893c27b4956e172c0220d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d040400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d0000000000000000361b010001000000", + }, + }, + "neuronInfo_getNeuron": { + "[23, 5]": { + "jsonrpc": "2.0", + "result": [ + 74, + 247, + 89, + 137, + 82, + 248, + 118, + 131, + 32, + 74, + 42, + 12, + 34, + 102, + 249, + 65, + 167, + 72, + 153, + 189, + 105, + 176, + 206, + 86, + 228, + 42, + 130, + 130, + 15, + 104, + 148, + 70, + 18, + 87, + 222, + 135, + 167, + 26, + 187, + 22, + 68, + 3, + 247, + 203, + 158, + 166, + 93, + 7, + 33, + 248, + 187, + 137, + 216, + 189, + 133, + 117, + 77, + 236, + 238, + 221, + 145, + 232, + 96, + 83, + 20, + 92, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 18, + 87, + 222, + 135, + 167, + 26, + 187, + 22, + 68, + 3, + 247, + 203, + 158, + 166, + 93, + 7, + 33, + 248, + 187, + 137, + 216, + 189, + 133, + 117, + 77, + 236, + 238, + 221, + 145, + 232, + 96, + 83, + 3, + 176, + 236, + 104, + 179, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 110, + 68, + 120, + 0, + 1, + 0, + 0, + 0, + ], + } + }, + "rpc_methods": { + "[]": { + "jsonrpc": "2.0", + "result": { + "methods": [ + "account_nextIndex", + "archive_unstable_body", + "archive_unstable_call", + "archive_unstable_finalizedHeight", + "archive_unstable_genesisHash", + "archive_unstable_hashByHeight", + "archive_unstable_header", + "archive_unstable_storage", + "author_hasKey", + "author_hasSessionKeys", + "author_insertKey", + "author_pendingExtrinsics", + "author_removeExtrinsic", + "author_rotateKeys", + "author_submitAndWatchExtrinsic", + "author_submitExtrinsic", + "author_unwatchExtrinsic", + "chainHead_v1_body", + "chainHead_v1_call", + "chainHead_v1_continue", + "chainHead_v1_follow", + "chainHead_v1_header", + "chainHead_v1_stopOperation", + "chainHead_v1_storage", + "chainHead_v1_unfollow", + "chainHead_v1_unpin", + "chainSpec_v1_chainName", + "chainSpec_v1_genesisHash", + "chainSpec_v1_properties", + "chain_getBlock", + "chain_getBlockHash", + "chain_getFinalisedHead", + "chain_getFinalizedHead", + "chain_getHead", + "chain_getHeader", + "chain_getRuntimeVersion", + "chain_subscribeAllHeads", + "chain_subscribeFinalisedHeads", + "chain_subscribeFinalizedHeads", + "chain_subscribeNewHead", + "chain_subscribeNewHeads", + "chain_subscribeRuntimeVersion", + "chain_unsubscribeAllHeads", + "chain_unsubscribeFinalisedHeads", + "chain_unsubscribeFinalizedHeads", + "chain_unsubscribeNewHead", + "chain_unsubscribeNewHeads", + "chain_unsubscribeRuntimeVersion", + "childstate_getKeys", + "childstate_getKeysPaged", + "childstate_getKeysPagedAt", + "childstate_getStorage", + "childstate_getStorageEntries", + "childstate_getStorageHash", + "childstate_getStorageSize", + "debug_getBadBlocks", + "debug_getRawBlock", + "debug_getRawHeader", + "debug_getRawReceipts", + "debug_getRawTransaction", + "delegateInfo_getDelegate", + "delegateInfo_getDelegated", + "delegateInfo_getDelegates", + "eth_accounts", + "eth_blockNumber", + "eth_call", + "eth_chainId", + "eth_coinbase", + "eth_estimateGas", + "eth_feeHistory", + "eth_gasPrice", + "eth_getBalance", + "eth_getBlockByHash", + "eth_getBlockByNumber", + "eth_getBlockReceipts", + "eth_getBlockTransactionCountByHash", + "eth_getBlockTransactionCountByNumber", + "eth_getCode", + "eth_getFilterChanges", + "eth_getFilterLogs", + "eth_getLogs", + "eth_getStorageAt", + "eth_getTransactionByBlockHashAndIndex", + "eth_getTransactionByBlockNumberAndIndex", + "eth_getTransactionByHash", + "eth_getTransactionCount", + "eth_getTransactionReceipt", + "eth_getUncleByBlockHashAndIndex", + "eth_getUncleByBlockNumberAndIndex", + "eth_getUncleCountByBlockHash", + "eth_getUncleCountByBlockNumber", + "eth_getWork", + "eth_hashrate", + "eth_maxPriorityFeePerGas", + "eth_mining", + "eth_newBlockFilter", + "eth_newFilter", + "eth_newPendingTransactionFilter", + "eth_protocolVersion", + "eth_sendRawTransaction", + "eth_sendTransaction", + "eth_submitHashrate", + "eth_submitWork", + "eth_subscribe", + "eth_syncing", + "eth_uninstallFilter", + "eth_unsubscribe", + "net_listening", + "net_peerCount", + "net_version", + "neuronInfo_getNeuron", + "neuronInfo_getNeuronLite", + "neuronInfo_getNeurons", + "neuronInfo_getNeuronsLite", + "offchain_localStorageGet", + "offchain_localStorageSet", + "payment_queryFeeDetails", + "payment_queryInfo", + "rpc_methods", + "state_call", + "state_callAt", + "state_getChildReadProof", + "state_getKeys", + "state_getKeysPaged", + "state_getKeysPagedAt", + "state_getMetadata", + "state_getPairs", + "state_getReadProof", + "state_getRuntimeVersion", + "state_getStorage", + "state_getStorageAt", + "state_getStorageHash", + "state_getStorageHashAt", + "state_getStorageSize", + "state_getStorageSizeAt", + "state_queryStorage", + "state_queryStorageAt", + "state_subscribeRuntimeVersion", + "state_subscribeStorage", + "state_traceBlock", + "state_unsubscribeRuntimeVersion", + "state_unsubscribeStorage", + "subnetInfo_getLockCost", + "subnetInfo_getSubnetHyperparams", + "subnetInfo_getSubnetInfo", + "subnetInfo_getSubnetInfo_v2", + "subnetInfo_getSubnetsInf_v2", + "subnetInfo_getSubnetsInfo", + "subscribe_newHead", + "system_accountNextIndex", + "system_addLogFilter", + "system_addReservedPeer", + "system_chain", + "system_chainType", + "system_dryRun", + "system_dryRunAt", + "system_health", + "system_localListenAddresses", + "system_localPeerId", + "system_name", + "system_nodeRoles", + "system_peers", + "system_properties", + "system_removeReservedPeer", + "system_reservedPeers", + "system_resetLogFilter", + "system_syncState", + "system_unstable_networkState", + "system_version", + "transactionWatch_v1_submitAndWatch", + "transactionWatch_v1_unwatch", + "transaction_v1_broadcast", + "transaction_v1_stop", + "unsubscribe_newHead", + "web3_clientVersion", + "web3_sha3", + ] + }, + } + }, "state_getRuntimeVersion": { '["0x9259b771b0f59b1ed8f38f604ab4f4a3e63dc0988754e664be2d40d58970958c"]': { "jsonrpc": "2.0", @@ -2319,6 +2867,7 @@ "result": "0x0500", } }, + "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, }, "get_prometheus_info": { "chain_getHead": { @@ -5712,14 +6261,199 @@ }, }, }, + "rpc_methods": { + "[]": { + "jsonrpc": "2.0", + "result": { + "methods": [ + "account_nextIndex", + "archive_unstable_body", + "archive_unstable_call", + "archive_unstable_finalizedHeight", + "archive_unstable_genesisHash", + "archive_unstable_hashByHeight", + "archive_unstable_header", + "archive_unstable_storage", + "author_hasKey", + "author_hasSessionKeys", + "author_insertKey", + "author_pendingExtrinsics", + "author_removeExtrinsic", + "author_rotateKeys", + "author_submitAndWatchExtrinsic", + "author_submitExtrinsic", + "author_unwatchExtrinsic", + "chainHead_v1_body", + "chainHead_v1_call", + "chainHead_v1_continue", + "chainHead_v1_follow", + "chainHead_v1_header", + "chainHead_v1_stopOperation", + "chainHead_v1_storage", + "chainHead_v1_unfollow", + "chainHead_v1_unpin", + "chainSpec_v1_chainName", + "chainSpec_v1_genesisHash", + "chainSpec_v1_properties", + "chain_getBlock", + "chain_getBlockHash", + "chain_getFinalisedHead", + "chain_getFinalizedHead", + "chain_getHead", + "chain_getHeader", + "chain_getRuntimeVersion", + "chain_subscribeAllHeads", + "chain_subscribeFinalisedHeads", + "chain_subscribeFinalizedHeads", + "chain_subscribeNewHead", + "chain_subscribeNewHeads", + "chain_subscribeRuntimeVersion", + "chain_unsubscribeAllHeads", + "chain_unsubscribeFinalisedHeads", + "chain_unsubscribeFinalizedHeads", + "chain_unsubscribeNewHead", + "chain_unsubscribeNewHeads", + "chain_unsubscribeRuntimeVersion", + "childstate_getKeys", + "childstate_getKeysPaged", + "childstate_getKeysPagedAt", + "childstate_getStorage", + "childstate_getStorageEntries", + "childstate_getStorageHash", + "childstate_getStorageSize", + "debug_getBadBlocks", + "debug_getRawBlock", + "debug_getRawHeader", + "debug_getRawReceipts", + "debug_getRawTransaction", + "delegateInfo_getDelegate", + "delegateInfo_getDelegated", + "delegateInfo_getDelegates", + "eth_accounts", + "eth_blockNumber", + "eth_call", + "eth_chainId", + "eth_coinbase", + "eth_estimateGas", + "eth_feeHistory", + "eth_gasPrice", + "eth_getBalance", + "eth_getBlockByHash", + "eth_getBlockByNumber", + "eth_getBlockReceipts", + "eth_getBlockTransactionCountByHash", + "eth_getBlockTransactionCountByNumber", + "eth_getCode", + "eth_getFilterChanges", + "eth_getFilterLogs", + "eth_getLogs", + "eth_getStorageAt", + "eth_getTransactionByBlockHashAndIndex", + "eth_getTransactionByBlockNumberAndIndex", + "eth_getTransactionByHash", + "eth_getTransactionCount", + "eth_getTransactionReceipt", + "eth_getUncleByBlockHashAndIndex", + "eth_getUncleByBlockNumberAndIndex", + "eth_getUncleCountByBlockHash", + "eth_getUncleCountByBlockNumber", + "eth_getWork", + "eth_hashrate", + "eth_maxPriorityFeePerGas", + "eth_mining", + "eth_newBlockFilter", + "eth_newFilter", + "eth_newPendingTransactionFilter", + "eth_protocolVersion", + "eth_sendRawTransaction", + "eth_sendTransaction", + "eth_submitHashrate", + "eth_submitWork", + "eth_subscribe", + "eth_syncing", + "eth_uninstallFilter", + "eth_unsubscribe", + "net_listening", + "net_peerCount", + "net_version", + "neuronInfo_getNeuron", + "neuronInfo_getNeuronLite", + "neuronInfo_getNeurons", + "neuronInfo_getNeuronsLite", + "offchain_localStorageGet", + "offchain_localStorageSet", + "payment_queryFeeDetails", + "payment_queryInfo", + "rpc_methods", + "state_call", + "state_callAt", + "state_getChildReadProof", + "state_getKeys", + "state_getKeysPaged", + "state_getKeysPagedAt", + "state_getMetadata", + "state_getPairs", + "state_getReadProof", + "state_getRuntimeVersion", + "state_getStorage", + "state_getStorageAt", + "state_getStorageHash", + "state_getStorageHashAt", + "state_getStorageSize", + "state_getStorageSizeAt", + "state_queryStorage", + "state_queryStorageAt", + "state_subscribeRuntimeVersion", + "state_subscribeStorage", + "state_traceBlock", + "state_unsubscribeRuntimeVersion", + "state_unsubscribeStorage", + "subnetInfo_getLockCost", + "subnetInfo_getSubnetHyperparams", + "subnetInfo_getSubnetInfo", + "subnetInfo_getSubnetInfo_v2", + "subnetInfo_getSubnetsInf_v2", + "subnetInfo_getSubnetsInfo", + "subscribe_newHead", + "system_accountNextIndex", + "system_addLogFilter", + "system_addReservedPeer", + "system_chain", + "system_chainType", + "system_dryRun", + "system_dryRunAt", + "system_health", + "system_localListenAddresses", + "system_localPeerId", + "system_name", + "system_nodeRoles", + "system_peers", + "system_properties", + "system_removeReservedPeer", + "system_reservedPeers", + "system_resetLogFilter", + "system_syncState", + "system_unstable_networkState", + "system_version", + "transactionWatch_v1_submitAndWatch", + "transactionWatch_v1_unwatch", + "transaction_v1_broadcast", + "transaction_v1_stop", + "unsubscribe_newHead", + "web3_clientVersion", + "web3_sha3", + ] + }, + } + }, "state_call": { '["NeuronInfoRuntimeApi_get_neurons_lite", "0100", null]': { "jsonrpc": "2.0", - "result": "0x046a4368adc8781240b59c45ccacbf5a7ee0ca3a7adc7e893c27b4956e172c0220d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d000401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d000000000000000071530100", + "result": "0x040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000bb06f5e8aae0700072af77b481300000000000001feff0300", }, - '["SubnetInfoRuntimeApi_get_subnet_state", "0x1700"]': { + '["SubnetInfoRuntimeApi_get_subnet_state", "0100", null]': { "jsonrpc": "2.0", - "result": "0x0400", + "result": "0x01040400000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000400040104feff0300040004072af77b4813040004000400040004000400040ba63a463d22080400040ba63a463d22080804000400", }, }, "state_getRuntimeVersion": { @@ -5757,7 +6491,7 @@ }, } }, - # "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, + "system_chain": {"[]": {"jsonrpc": "2.0", "result": "Bittensor"}}, "chain_getBlockHash": { "[3264143]": { "jsonrpc": "2.0", @@ -8313,5 +9047,4 @@ }, } - -METADATA = "0x6d6574610ed506000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000506001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400200110753132380000200000050700240000050000280c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454012c000c01186e6f726d616c2c01045400012c6f7065726174696f6e616c2c0104540001246d616e6461746f72792c01045400002c0c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6530010c75363400012870726f6f665f73697a6530010c753634000030000006180034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c011470686173654501011450686173650001146576656e7454010445000118746f70696373b401185665633c543e00005408586e6f64655f73756274656e736f725f72756e74696d653052756e74696d654576656e740001541853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c4772616e64706104007c015470616c6c65745f6772616e6470613a3a4576656e740004002042616c616e63657304008c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0006003c53756274656e736f724d6f64756c65040098018070616c6c65745f73756274656e736f723a3a4576656e743c52756e74696d653e0007002c547269756d7669726174650400b801fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e00080048547269756d7669726174654d656d626572730400bc01fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0009003453656e6174654d656d626572730400c001fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e000a001c5574696c6974790400c4015470616c6c65745f7574696c6974793a3a4576656e74000b00105375646f0400c8016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e000c00204d756c74697369670400cc017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e000d0020507265696d6167650400d4017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e000e00245363686564756c65720400d8018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e000f001450726f78790400e4017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e0010002052656769737472790400ec017c70616c6c65745f72656769737472793a3a4576656e743c52756e74696d653e0011002c436f6d6d69746d656e74730400f0018870616c6c65745f636f6d6d69746d656e74733a3a4576656e743c52756e74696d653e0012002841646d696e5574696c730400f4018870616c6c65745f61646d696e5f7574696c733a3a4576656e743c52756e74696d653e00130020536166654d6f64650400f8018070616c6c65745f736166655f6d6f64653a3a4576656e743c52756e74696d653e00140020457468657265756d04000101015870616c6c65745f657468657265756d3a3a4576656e740015000c45564d04002d01016870616c6c65745f65766d3a3a4576656e743c52756e74696d653e0016001c4261736546656504003501015870616c6c65745f626173655f6665653a3a4576656e7400190000580c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e240110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c0c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c01187765696768742c0118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574800134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748000000284008400000408881800880c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c69630000040004013c656432353531393a3a5075626c696300008c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000940c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574980c4070616c6c65745f73756274656e736f721870616c6c6574144576656e7404045400014101304e6574776f726b416464656408009c010c75313600009c010c7531360000045c61206e6577206e6574776f726b2069732061646465642e384e6574776f726b52656d6f76656404009c010c7531360001045461206e6574776f726b2069732072656d6f7665642e285374616b6541646465640800000130543a3a4163636f756e744964000018010c75363400020459017374616b6520686173206265656e207472616e736665727265642066726f6d20746865206120636f6c646b6579206163636f756e74206f6e746f2074686520686f746b6579207374616b696e67206163636f756e742e305374616b6552656d6f7665640800000130543a3a4163636f756e744964000018010c75363400030441017374616b6520686173206265656e2072656d6f7665642066726f6d2074686520686f746b6579207374616b696e67206163636f756e74206f6e746f2074686520636f6c646b6579206163636f756e742e285765696768747353657408009c010c75313600009c010c753136000404e4612063616c6c6572207375636365737366756c6c7920736574732074686569722077656967687473206f6e2061207375626e6574776f726b2e404e6575726f6e526567697374657265640c009c010c75313600009c010c7531360000000130543a3a4163636f756e744964000504d861206e6577206e6575726f6e206163636f756e7420686173206265656e207265676973746572656420746f2074686520636861696e2e5442756c6b4e6575726f6e735265676973746572656408009c010c75313600009c010c753136000604c06d756c7469706c6520756964732068617665206265656e20636f6e63757272656e746c7920726567697374657265642e3c42756c6b42616c616e63657353657408009c010c75313600009c010c7531360007044c4649584d453a204e6f74207573656420796574444d6178416c6c6f7765645569647353657408009c010c75313600009c010c753136000804bc6d617820616c6c6f776564207569647320686173206265656e2073657420666f722061207375626e6574776f726b2e444d61785765696768744c696d697453657408009c010c75313600009c010c753136000904cc746865206d617820776569676874206c696d697420686173206265656e2073657420666f722061207375626e6574776f726b2e34446966666963756c747953657408009c010c753136000018010c753634000a04a474686520646966666963756c747920686173206265656e2073657420666f722061207375626e65742e5441646a7573746d656e74496e74657276616c53657408009c010c75313600009c010c753136000b04b07468652061646a7573746d656e7420696e74657276616c2069732073657420666f722061207375626e65742e68526567697374726174696f6e506572496e74657276616c53657408009c010c75313600009c010c753136000c04b8726567697374726174696f6e2070657220696e74657276616c2069732073657420666f722061207375626e65742e6c4d6178526567697374726174696f6e73506572426c6f636b53657408009c010c75313600009c010c753136000d048c776520736574206d617820726567697374726174696f6e732070657220626c6f636b2e4441637469766974794375746f666653657408009c010c75313600009c010c753136000e049c616e206163746976697479206375746f66662069732073657420666f722061207375626e65742e1852686f53657408009c010c75313600009c010c753136000f044452686f2076616c7565206973207365742e204b6170706153657408009c010c75313600009c010c753136001004684b617070612069732073657420666f722061207375626e65742e4c4d696e416c6c6f77656457656967687453657408009c010c75313600009c010c753136001104ac6d696e696d756d20616c6c6f776564207765696768742069732073657420666f722061207375626e65742e5056616c696461746f725072756e654c656e53657408009c010c753136000018010c753634001204a87468652076616c696461746f72207072756e696e67206c656e67746820686173206265656e207365742e485363616c696e674c6177506f77657253657408009c010c75313600009c010c753136001304c0746865207363616c696e67206c617720706f77657220686173206265656e2073657420666f722061207375626e65742e5857656967687473536574526174654c696d697453657408009c010c753136000018010c753634001404c477656967687473207365742072617465206c696d697420686173206265656e2073657420666f722061207375626e65742e44496d6d756e697479506572696f6453657408009c010c75313600009c010c75313600150490696d6d756e69747920706572696f642069732073657420666f722061207375626e65742e54426f6e64734d6f76696e674176657261676553657408009c010c753136000018010c753634001604a4626f6e6473206d6f76696e6720617665726167652069732073657420666f722061207375626e65742e5c4d6178416c6c6f77656456616c696461746f727353657408009c010c75313600009c010c753136001704e473657474696e6720746865206d6178206e756d626572206f6620616c6c6f7765642076616c696461746f7273206f6e2061207375626e65742e2841786f6e53657276656408009c010c7531360000000130543a3a4163636f756e744964001804d07468652061786f6e2073657276657220696e666f726d6174696f6e20697320616464656420746f20746865206e6574776f726b2e4050726f6d65746865757353657276656408009c010c7531360000000130543a3a4163636f756e744964001904e87468652070726f6d6574686575732073657276657220696e666f726d6174696f6e20697320616464656420746f20746865206e6574776f726b2e44456d697373696f6e56616c756573536574001a04a0656d697373696f6e20726174696f7320666f7220616c6c206e6574776f726b73206973207365742e3444656c656761746541646465640c00000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c753136001b047c6120686f746b657920686173206265636f6d6520612064656c65676174652e3844656661756c7454616b6553657404009c010c753136001c04607468652064656661756c742074616b65206973207365742e505765696768747356657273696f6e4b657953657408009c010c753136000018010c753634001d04a4776569676874732076657273696f6e206b65792069732073657420666f722061206e6574776f726b2e404d696e446966666963756c747953657408009c010c753136000018010c753634001e049073657474696e67206d696e20646966666963756c7479206f6e2061206e6574776f726b2e404d6178446966666963756c747953657408009c010c753136000018010c753634001f049073657474696e67206d617820646966666963756c7479206f6e2061206e6574776f726b2e4c53657276696e67526174654c696d697453657408009c010c753136000018010c753634002004a873657474696e67207468652070726f6d6574686575732073657276696e672072617465206c696d69742e1c4275726e53657408009c010c753136000018010c7536340021046873657474696e67206275726e206f6e2061206e6574776f726b2e284d61784275726e53657408009c010c753136000018010c7536340022047873657474696e67206d6178206275726e206f6e2061206e6574776f726b2e284d696e4275726e53657408009c010c753136000018010c7536340023047873657474696e67206d696e206275726e206f6e2061206e6574776f726b2e385478526174654c696d6974536574040018010c7536340024048c73657474696e6720746865207472616e73616374696f6e2072617465206c696d69742e68547844656c656761746554616b65526174654c696d6974536574040018010c753634002504c473657474696e67207468652064656c65676174652074616b65207472616e73616374696f6e2072617465206c696d69742e6854784368696c644b657954616b65526174654c696d6974536574040018010c753634002604c473657474696e6720746865206368696c646b65792074616b65207472616e73616374696f6e2072617465206c696d69742e484d696e4368696c644b657954616b6553657404009c010c753136002704646d696e696d756d206368696c646b65792074616b6520736574484d61784368696c644b657954616b6553657404009c010c753136002804646d6178696d756d206368696c646b65792074616b65207365743c4368696c644b657954616b655365740800000130543a3a4163636f756e74496400009c010c753136002904446368696c646b65792074616b65207365741453756469640400a001384469737061746368526573756c74002a045061207375646f2063616c6c20697320646f6e652e4c526567697374726174696f6e416c6c6f77656408009c010c7531360000240110626f6f6c002b04c0726567697374726174696f6e20697320616c6c6f7765642f646973616c6c6f77656420666f722061207375626e65742e58506f77526567697374726174696f6e416c6c6f77656408009c010c7531360000240110626f6f6c002c04d0504f5720726567697374726174696f6e20697320616c6c6f7765642f646973616c6c6f77656420666f722061207375626e65742e2054656d706f53657408009c010c75313600009c010c753136002d046873657474696e672074656d706f206f6e2061206e6574776f726b7452414f52656379636c6564466f72526567697374726174696f6e53657408009c010c753136000018010c753634002e04a873657474696e67207468652052414f2072656379636c656420666f7220726567697374726174696f6e2e3c576569676874734d696e5374616b65040018010c753634002f04bc6d696e207374616b652069732073657420666f722076616c696461746f727320746f2073657420776569676874732e7453656e61746552657175697265645374616b6550657263656e74536574040018010c753634003004090173657474696e6720746865206d696e696d756d207265717569726564207374616b6520616d6f756e7420666f722073656e61746520726567697374726174696f6e2e4841646a7573746d656e74416c70686153657408009c010c753136000018010c753634003104a473657474696e67207468652061646a7573746d656e7420616c706861206f6e2061207375626e65742e184661756365740800000130543a3a4163636f756e744964000018010c75363400320494746865206661756365742069742063616c6c6564206f6e207468652074657374206e65742e445375626e65744f776e657243757453657404009c010c75313600330470746865207375626e6574206f776e657220637574206973207365742e4c4e6574776f726b526174654c696d6974536574040018010c7536340034049c746865206e6574776f726b206372656174696f6e2072617465206c696d6974206973207365742e604e6574776f726b496d6d756e697479506572696f64536574040018010c7536340035048c746865206e6574776f726b20696d6d756e69747920706572696f64206973207365742e544e6574776f726b4d696e4c6f636b436f7374536574040018010c753634003604a0746865206e6574776f726b206d696e696d756d206c6f636b696e6720636f7374206973207365742e385375626e65744c696d697453657404009c010c75313600370490746865206d6178696d756d206e756d626572206f66207375626e657473206973207365748c4e6574776f726b4c6f636b436f7374526564756374696f6e496e74657276616c536574040018010c75363400380478746865206c6f636b20636f737420726564756374696f6e206973207365743454616b654465637265617365640c00000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c753136003904947468652074616b6520666f7220612064656c6567617465206973206465637265617365642e3454616b65496e637265617365640c00000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c753136003a04947468652074616b6520666f7220612064656c656761746520697320696e637265617365642e34486f746b6579537761707065640c011c636f6c646b6579000130543a3a4163636f756e7449640464746865206163636f756e74204944206f6620636f6c646b657901286f6c645f686f746b6579000130543a3a4163636f756e7449640470746865206163636f756e74204944206f66206f6c6420686f746b657901286e65775f686f746b6579000130543a3a4163636f756e7449640470746865206163636f756e74204944206f66206e657720686f746b65793b045474686520686f746b65792069732073776170706564484d617844656c656761746554616b6553657404009c010c753136003c04d86d6178696d756d2064656c65676174652074616b6520697320736574206279207375646f2f61646d696e207472616e73616374696f6e484d696e44656c656761746554616b6553657404009c010c753136003d04d86d696e696d756d2064656c65676174652074616b6520697320736574206279207375646f2f61646d696e207472616e73616374696f6e685461726765745374616b6573506572496e74657276616c536574040018010c753634003e04fc74686520746172676574207374616b65732070657220696e74657276616c20697320736574206279207375646f2f61646d696e207472616e73616374696f6e3853656e61746541646a75737465640801286f6c645f6d656d626572a801504f7074696f6e3c543a3a4163636f756e7449643e04bc746865206163636f756e74204944206f6620746865206f6c642073656e617465206d656d6265722c20696620616e7901286e65775f6d656d626572000130543a3a4163636f756e744964049c746865206163636f756e74204944206f6620746865206e65772073656e617465206d656d6265723f048861206d656d626572206f66207468652073656e6174652069732061646a757374656438436f6c646b65795377617070656408012c6f6c645f636f6c646b6579000130543a3a4163636f756e7449640474746865206163636f756e74204944206f66206f6c6420636f6c646b6579012c6e65775f636f6c646b6579000130543a3a4163636f756e7449640474746865206163636f756e74204944206f66206e657720636f6c646b65794004684120636f6c646b657920686173206265656e2073776170706564b0416c6c42616c616e6365556e7374616b6564416e645472616e73666572726564546f4e6577436f6c646b65790c013c63757272656e745f636f6c646b6579000130543a3a4163636f756e7449640494546865206163636f756e74204944206f66207468652063757272656e7420636f6c646b6579012c6e65775f636f6c646b6579000130543a3a4163636f756e7449640484546865206163636f756e74204944206f6620746865206e657720636f6c646b65790134746f74616c5f62616c616e6365180185013c3c5420617320436f6e6669673e3a3a43757272656e63792061732066756e6769626c653a3a496e73706563743c3c54206173206672616d655f73797374656d3a3a0a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e6365047c54686520746f74616c2062616c616e6365206f662074686520686f746b657941042901416c6c2062616c616e6365206f66206120686f746b657920686173206265656e20756e7374616b656420616e64207472616e7366657272656420746f2061206e657720636f6c646b657950436f6c646b6579537761705363686564756c65640c012c6f6c645f636f6c646b6579000130543a3a4163636f756e7449640484546865206163636f756e74204944206f6620746865206f6c6420636f6c646b6579012c6e65775f636f6c646b6579000130543a3a4163636f756e7449640484546865206163636f756e74204944206f6620746865206e657720636f6c646b6579013c657865637574696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e04a8546865206172626974726174696f6e20626c6f636b20666f722074686520636f6c646b657920737761704204844120636f6c646b6579207377617020686173206265656e207363686564756c6564644172626974726174696f6e506572696f64457874656e64656404011c636f6c646b6579000130543a3a4163636f756e7449640474546865206163636f756e74204944206f662074686520636f6c646b65794304a0546865206172626974726174696f6e20706572696f6420686173206265656e20657874656e6465642c5365744368696c6472656e0c00000130543a3a4163636f756e74496400009c010c7531360000ac01605665633c287536342c20543a3a4163636f756e744964293e00440498546865206368696c6472656e206f66206120686f746b65792068617665206265656e2073657458486f746b6579456d697373696f6e54656d706f536574040018010c7536340045049854686520686f746b657920656d697373696f6e2074656d706f20686173206265656e20736574484e6574776f726b4d61785374616b6553657408009c010c753136000018010c75363400460498546865206e6574776f726b206d6178696d756d207374616b6520686173206265656e2073657440436861696e4964656e746974795365740400000130543a3a4163636f756e74496400470498546865206964656e74697479206f66206120636f6c646b657920686173206265656e20736574445375626e65744964656e7469747953657404009c010c75313600480494546865206964656e74697479206f662061207375626e657420686173206265656e20736574545375626e65744964656e7469747952656d6f76656404009c010c753136004904a4546865206964656e74697479206f662061207375626e657420686173206265656e2072656d6f76656460446973736f6c76654e6574776f726b5363686564756c65640c011c6163636f756e74000130543a3a4163636f756e74496404d8546865206163636f756e74204944207363686564756c652074686520646973736f6c7665206e6574776f726b206578747269736e696301186e65747569649c010c75313604706e6574776f726b2049442077696c6c20626520646973736f6c766564013c657865637574696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e048065787472696e73696320657865637574696f6e20626c6f636b206e756d6265724a049c4120646973736f6c7665206e6574776f726b2065787472696e736963207363686564756c65642e78436f6c646b6579537761705363686564756c654475726174696f6e5365740400100144426c6f636b4e756d626572466f723c543e004b04c8546865206475726174696f6e206f66207363686564756c6520636f6c646b6579207377617020686173206265656e2073657488446973736f6c76654e6574776f726b5363686564756c654475726174696f6e5365740400100144426c6f636b4e756d626572466f723c543e004c04b4546865206475726174696f6e206f6620646973736f6c7665206e6574776f726b20686173206265656e207365744057656967687473436f6d6d69747465640c00000130543a3a4163636f756e74496400009c010c753136000034011048323536004d14a4576569676874732068617665206265656e207375636365737366756c6c7920636f6d6d69747465642e00f42d202a2a77686f2a2a3a20546865206163636f756e74204944206f6620746865207573657220636f6d6d697474696e672074686520776569676874732e942d202a2a6e65747569642a2a3a20546865206e6574776f726b206964656e7469666965722efc2d202a2a636f6d6d69745f686173682a2a3a20546865206861736820726570726573656e74696e672074686520636f6d6d697474656420776569676874732e3c5765696768747352657665616c65640c00000130543a3a4163636f756e74496400009c010c753136000034011048323536004e14a0576569676874732068617665206265656e207375636365737366756c6c792072657665616c65642e00f02d202a2a77686f2a2a3a20546865206163636f756e74204944206f662074686520757365722072657665616c696e672074686520776569676874732e942d202a2a6e65747569642a2a3a20546865206e6574776f726b206964656e7469666965722ed02d202a2a636f6d6d69745f686173682a2a3a205468652068617368206f66207468652072657665616c656420776569676874732e5057656967687473426174636852657665616c65640c00000130543a3a4163636f756e74496400009c010c7531360000b401245665633c483235363e004f14b8576569676874732068617665206265656e207375636365737366756c6c792062617463682072657665616c65642e00f02d202a2a77686f2a2a3a20546865206163636f756e74204944206f662074686520757365722072657665616c696e672074686520776569676874732e942d202a2a6e65747569642a2a3a20546865206e6574776f726b206964656e7469666965722e41012d202a2a72657665616c65645f6861736865732a2a3a204120766563746f72206f662068617368657320726570726573656e74696e6720656163682072657665616c656420776569676874207365742e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749c0000050400a00418526573756c7408045401a4044501680108084f6b0400a4000000000c4572720400680000010000a40000040000a804184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000ac000002b000b000000408180000b40000023400b80c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e7449640494546865206163636f756e7420746861742070726f706f73656420746865206d6f74696f6e2e013870726f706f73616c5f696e64657810013450726f706f73616c496e646578046854686520696e646578206f66207468652070726f706f73616c2e013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e01247468726573686f6c6410012c4d656d626572436f756e7404a4546865207468726573686f6c64206f66206d656d62657220666f72207468652070726f706f73616c2e0008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e744964045c546865206163636f756e74207468617420766f7465642e013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0114766f746564240110626f6f6c04785768657468657220746865206163636f756e7420766f746564206179652e010c79657310012c4d656d626572436f756e740460546865206e756d626572206f662079657320766f7465732e01086e6f10012c4d656d626572436f756e74045c546865206e756d626572206f66206e6f20766f7465732e0108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0118726573756c74a001384469737061746368526573756c74047054686520726573756c74206f662074686520657865637574696f6e2e0404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0118726573756c74a001384469737061746368526573756c74047054686520726573756c74206f662074686520657865637574696f6e2e05044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e010c79657310012c4d656d626572436f756e74048857686574686572207468652070726f706f73616c2077617320617070726f7665642e01086e6f10012c4d656d626572436f756e74048857686574686572207468652070726f706f73616c207761732072656a65637465642e06045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574bc0c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c00c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c40c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7268013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7268013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74a001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c80c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c74a001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c64a801504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c74a001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74d0017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74d0017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74a001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74d0017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d0083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c7533320000d40c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736834011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736834011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736834011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d80c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000124245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e001404f7074696f6e3c5461736b4e616d653e000118726573756c74a001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e2052657472795365741001107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e001404f7074696f6e3c5461736b4e616d653e000118706572696f64100144426c6f636b4e756d626572466f723c543e00011c726574726965730801087538000304a0536574206120726574727920636f6e66696775726174696f6e20666f7220736f6d65207461736b2e38526574727943616e63656c6c65640801107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e001404f7074696f6e3c5461736b4e616d653e000404ac43616e63656c206120726574727920636f6e66696775726174696f6e20666f7220736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e001404f7074696f6e3c5461736b4e616d653e00050429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e001404f7074696f6e3c5461736b4e616d653e0006043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e2c52657472794661696c65640801107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e001404f7074696f6e3c5461736b4e616d653e0007085d0154686520676976656e207461736b2077617320756e61626c6520746f20626520726574726965642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b206f722074686572659c776173206e6f7420656e6f7567682077656967687420746f2072657363686564756c652069742e545065726d616e656e746c794f7665727765696768740801107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e001404f7074696f6e3c5461736b4e616d653e000804f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652edc00000408101000e004184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000e40c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74a001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789c010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736834013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e808586e6f64655f73756274656e736f725f72756e74696d652450726f78795479706500013c0c416e79000000144f776e65720001002c4e6f6e437269746963616c0002002c4e6f6e5472616e736665720003001853656e617465000400304e6f6e46756e676962696c650005002c547269756d76697261746500060028476f7665726e616e63650007001c5374616b696e6700080030526567697374726174696f6e000900205472616e73666572000a0034536d616c6c5472616e73666572000b002c526f6f7457656967687473000c00244368696c644b657973000d00505375646f556e636865636b6564536574436f6465000e0000ec0c3c70616c6c65745f72656769737472791870616c6c6574144576656e740404540001082c4964656e7469747953657404010c77686f000130543a3a4163636f756e74496404a0546865206163636f756e742074686174207265676973746572656420746865206964656e746974790004a4456d6974746564207768656e206120757365722072656769737465727320616e206964656e74697479444964656e74697479446973736f6c76656404010c77686f000130543a3a4163636f756e744964049c546865206163636f756e74207468617420646973736f6c76656420746865206964656e746974790104a4456d6974746564207768656e2061207573657220646973736f6c76657320616e206964656e74697479047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f00c4870616c6c65745f636f6d6d69746d656e74731870616c6c6574144576656e7404045400010428436f6d6d69746d656e740801186e65747569649c010c7531360470546865206e6574756964206f662074686520636f6d6d69746d656e74010c77686f000130543a3a4163636f756e744964042c546865206163636f756e740004504120636f6d6d69746d656e742077617320736574047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f40c4870616c6c65745f61646d696e5f7574696c731870616c6c6574144576656e74040454000100047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f80c4070616c6c65745f736166655f6d6f64651870616c6c6574144576656e740404540001201c456e7465726564040114756e74696c100144426c6f636b4e756d626572466f723c543e000004dc54686520736166652d6d6f64652077617320656e746572656420756e74696c20696e636c75736976656c79207468697320626c6f636b2e20457874656e646564040114756e74696c100144426c6f636b4e756d626572466f723c543e000104e054686520736166652d6d6f64652077617320657874656e64656420756e74696c20696e636c75736976656c79207468697320626c6f636b2e18457869746564040118726561736f6efc012845786974526561736f6e000204ac4578697465642074686520736166652d6d6f646520666f72206120737065636966696320726561736f6e2e344465706f736974506c6163656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0003042501416e206163636f756e742072657365727665642066756e647320666f722065697468657220656e746572696e67206f7220657874656e64696e672074686520736166652d6d6f64652e3c4465706f73697452656c656173656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000404d0416e206163636f756e7420686164206120726573657276652072656c65617365642074686174207761732072657365727665642e384465706f736974536c617368656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000504c4416e206163636f756e7420686164207265736572766520736c61736865642074686174207761732072657365727665642e3443616e6e6f744465706f73697400060cf4436f756c64206e6f7420686f6c642066756e647320666f7220656e746572696e67206f7220657874656e64696e672074686520736166652d6d6f64652e00c054686973206572726f7220636f6d65732066726f6d2074686520756e6465726c79696e67206043757272656e6379602e3443616e6e6f7452656c6561736500070c0101436f756c64206e6f742072656c656173652066756e647320666f7220656e746572696e67206f7220657874656e64696e672074686520736166652d6d6f64652e00c054686973206572726f7220636f6d65732066726f6d2074686520756e6465726c79696e67206043757272656e6379602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fc0c4070616c6c65745f736166655f6d6f64651870616c6c65742845786974526561736f6e0001081c54696d656f757400000014466f7263650001000001010c3c70616c6c65745f657468657265756d1870616c6c6574144576656e7400010420457865637574656414011066726f6d0501011048313630000108746f05010110483136300001407472616e73616374696f6e5f686173683401104832353600012c657869745f726561736f6e0d01012845786974526561736f6e00012865787472615f6461746138011c5665633c75383e000004c8416e20657468657265756d207472616e73616374696f6e20776173207375636365737366756c6c792065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740501083c7072696d69746976655f7479706573104831363000000400090101205b75383b2032305d000009010000031400000008000d010c2065766d5f636f7265146572726f722845786974526561736f6e0001101c5375636365656404001101012c4578697453756363656564000000144572726f72040015010124457869744572726f72000100185265766572740400250101284578697452657665727400020014466174616c04002901012445786974466174616c0003000011010c2065766d5f636f7265146572726f722c457869745375636365656400010c1c53746f707065640000002052657475726e65640001002053756963696465640002000015010c2065766d5f636f7265146572726f7224457869744572726f7200014038537461636b556e646572666c6f7700000034537461636b4f766572666c6f770001002c496e76616c69644a756d7000020030496e76616c696452616e67650003004444657369676e61746564496e76616c69640004002c43616c6c546f6f446565700005003c437265617465436f6c6c6973696f6e0006004c437265617465436f6e74726163744c696d69740007002c496e76616c6964436f64650400190101184f70636f6465000f002c4f75744f664f6666736574000800204f75744f66476173000900244f75744f6646756e64000a002c5043556e646572666c6f77000b002c437265617465456d707479000c00144f7468657204001d010144436f773c277374617469632c207374723e000d00204d61784e6f6e6365000e000019010c2065766d5f636f7265186f70636f6465184f70636f646500000400080108753800001d01040c436f7704045401210100040021010000002101000005020025010c2065766d5f636f7265146572726f7228457869745265766572740001042052657665727465640000000029010c2065766d5f636f7265146572726f722445786974466174616c000110304e6f74537570706f7274656400000048556e68616e646c6564496e746572727570740001004043616c6c4572726f724173466174616c040015010124457869744572726f72000200144f7468657204001d010144436f773c277374617469632c207374723e000300002d010c2870616c6c65745f65766d1870616c6c6574144576656e740404540001140c4c6f6704010c6c6f673101010c4c6f670000047c457468657265756d206576656e74732066726f6d20636f6e7472616374732e1c4372656174656404011c616464726573730501011048313630000104b44120636f6e747261637420686173206265656e206372656174656420617420676976656e20616464726573732e34437265617465644661696c656404011c61646472657373050101104831363000020405014120636f6e74726163742077617320617474656d7074656420746f20626520637265617465642c206275742074686520657865637574696f6e206661696c65642e20457865637574656404011c616464726573730501011048313630000304f84120636f6e747261637420686173206265656e206578656375746564207375636365737366756c6c79207769746820737461746573206170706c6965642e3845786563757465644661696c656404011c61646472657373050101104831363000040465014120636f6e747261637420686173206265656e2065786563757465642077697468206572726f72732e20537461746573206172652072657665727465642077697468206f6e6c79206761732066656573206170706c6965642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657431010c20657468657265756d0c6c6f670c4c6f6700000c011c616464726573730501011048313630000118746f70696373b401245665633c483235363e000110646174613801144279746573000035010c3c70616c6c65745f626173655f6665651870616c6c6574144576656e7400010c404e65774261736546656550657247617304010c66656539010110553235360000003c426173654665654f766572666c6f77000100344e6577456c6173746963697479040128656c61737469636974794101011c5065726d696c6c000200047c54686520604576656e746020656e756d206f6620746869732070616c6c65743901083c7072696d69746976655f74797065731055323536000004003d0101205b7536343b20345d00003d0100000304000000180041010c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c7533320000450108306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200004901000002dc004d0108306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6e5101014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d652101016473705f72756e74696d653a3a52756e74696d65537472696e67000051010000061000550108306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e240110626f6f6c000059010c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657318010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d735d0101345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973650101205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e5d010000026101006101000004083838006501000002380069010c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2c01185765696768740001246d61785f626c6f636b2c01185765696768740001247065725f636c6173736d0101845065724469737061746368436c6173733c57656967687473506572436c6173733e00006d010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454017101000c01186e6f726d616c710101045400012c6f7065726174696f6e616c71010104540001246d616e6461746f72797101010454000071010c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632c01185765696768740001346d61785f65787472696e736963750101384f7074696f6e3c5765696768743e0001246d61785f746f74616c750101384f7074696f6e3c5765696768743e0001207265736572766564750101384f7074696f6e3c5765696768743e0000750104184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c000001000079010c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d61787d0101545065724469737061746368436c6173733c7533323e00007d010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400008101082873705f776569676874733c52756e74696d65446257656967687400000801107265616418010c753634000114777269746518010c75363400008501082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d652101013452756e74696d65537472696e67000124696d706c5f6e616d652101013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069738901011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800008901040c436f77040454018d010004008d010000008d0100000291010091010000040895011000950100000308000000080099010c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c65749d010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400b401185665633c543e0000a1010c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77300124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ea5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401a901045300000400ad0101185665633c543e0000a901104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c69630000040004013c737232353531393a3a5075626c69630000ad01000002a90100b101084873705f636f6e73656e7375735f736c6f747310536c6f740000040018010c7536340000b501083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e00030000b901083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f726974696573bd01016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564c10101244f7074696f6e3c4e3e0000bd010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401840453000004008001185665633c543e0000c10104184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000c5010c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66c90101c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66f1010140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66c90101c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f66f1010140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec901085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480134044e0110000801187365745f6964180114536574496400013065717569766f636174696f6ecd01014845717569766f636174696f6e3c482c204e3e0000cd01085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480134044e011001081c507265766f74650400d10101890166696e616c6974795f6772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c2066696e616c6974795f6772616e6470613a3a507265766f74653c0a482c204e3e2c20417574686f726974795369676e61747572652c3e00000024507265636f6d6d69740400e50101910166696e616c6974795f6772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c2066696e616c6974795f6772616e6470613a3a507265636f6d6d69740a3c482c204e3e2c20417574686f726974795369676e61747572652c3e00010000d101084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c0849640188045601d501045301d90100100130726f756e645f6e756d62657218010c7536340001206964656e7469747988010849640001146669727374e101011828562c2053290001187365636f6e64e101011828562c2053290000d501084066696e616c6974795f6772616e6470611c507265766f74650804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e0000d9010c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400dd010148656432353531393a3a5369676e61747572650000dd01000003400000000800e10100000408d501d90100e501084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c0849640188045601e901045301d90100100130726f756e645f6e756d62657218010c7536340001206964656e7469747988010849640001146669727374ed01011828562c2053290001187365636f6e64ed01011828562c2053290000e901084066696e616c6974795f6772616e64706124507265636f6d6d69740804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e0000ed0100000408e901d90100f101081c73705f636f726510566f696400010000f5010c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef9010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401fd01045300000400050201185665633c543e0000fd010c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964950101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e730102011c526561736f6e73000001020c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c000200000502000002fd010009020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010d02045300000400110201185665633c543e00000d020c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e7469666965720195011c42616c616e6365011800080108696495010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e6365000011020000020d020015020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540119020453000004002d0201185665633c543e0000190214346672616d655f737570706f72741874726169747318746f6b656e73106d697363204964416d6f756e7408084964011d021c42616c616e636501180008010869641d0201084964000118616d6f756e7418011c42616c616e636500001d0208586e6f64655f73756274656e736f725f72756e74696d654452756e74696d65486f6c64526561736f6e00010c20507265696d61676504002102016c70616c6c65745f707265696d6167653a3a486f6c64526561736f6e000e0020526567697374727904002502016c70616c6c65745f72656769737472793a3a486f6c64526561736f6e00110020536166654d6f646504002902017070616c6c65745f736166655f6d6f64653a3a486f6c64526561736f6e0014000021020c3c70616c6c65745f707265696d6167651870616c6c657428486f6c64526561736f6e00010420507265696d6167650000000025020c3c70616c6c65745f72656769737472791870616c6c657428486f6c64526561736f6e0001044052656769737472794964656e746974790000000029020c4070616c6c65745f736166655f6d6f64651870616c6c657428486f6c64526561736f6e00010434456e7465724f72457874656e64000000002d0200000219020031020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540135020453000004003d0201185665633c543e0000350214346672616d655f737570706f72741874726169747318746f6b656e73106d697363204964416d6f756e74080849640139021c42616c616e63650118000801086964390201084964000118616d6f756e7418011c42616c616e63650000390208586e6f64655f73756274656e736f725f72756e74696d654c52756e74696d65467265657a65526561736f6e000100003d0200000235020041020c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374450201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565300128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365450201504163636f756e7449644c6f6f6b75704f663c543e00011064657374450201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565300128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374450201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565300128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374450201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665240110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686f4d0201445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565300128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e5102014c41646a7573746d656e74446972656374696f6e00011464656c7461300128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65106275726e08011476616c7565300128543a3a42616c616e63650001286b6565705f616c697665240110626f6f6c000a1cfc4275726e2074686520737065636966696564206c697175696420667265652062616c616e63652066726f6d20746865206f726967696e206163636f756e742e002501496620746865206f726967696e2773206163636f756e7420656e64732075702062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c7409016f6620746865206275726e20616e6420606b6565705f616c697665602069732066616c73652c20746865206163636f756e742077696c6c206265207265617065642e005101556e6c696b652073656e64696e672066756e647320746f2061205f6275726e5f20616464726573732c207768696368206d6572656c79206d616b6573207468652066756e647320696e61636365737369626c652c21017468697320606275726e60206f7065726174696f6e2077696c6c2072656475636520746f74616c2069737375616e63652062792074686520616d6f756e74205f6275726e65645f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e45020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801a4011408496404000001244163636f756e74496400000014496e6465780400490201304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400090101205b75383b2032305d000400004902000006a4004d02000002000051020c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e6372656173650000002044656372656173650001000055020c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e59020c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004002001107531323800005d02086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000610200000408000000650200000408181800690200000408009c006d020000050d007102000004089c9c0075020000029c007902000004089c00007d0200000281020081020000040c0018180085020000022400890200000218008d0200000271020091020c4070616c6c65745f73756274656e736f721870616c6c65742041786f6e496e666f0000200114626c6f636b18010c75363400011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f74797065080108753800012070726f746f636f6c0801087538000130706c616365686f6c646572310801087538000130706c616365686f6c646572320801087538000095020c4070616c6c65745f73756274656e736f721870616c6c6574444e6575726f6e436572746966696361746500000801287075626c69635f6b657999020170426f756e6465645665633c75382c20436f6e73745533323c36343e3e000124616c676f726974686d0801087538000099020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00009d020c4070616c6c65745f73756274656e736f721870616c6c65743850726f6d657468657573496e666f0000140114626c6f636b18010c75363400011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f7479706508010875380000a1020c4070616c6c65745f73756274656e736f721870616c6c657434436861696e4964656e7469747900001801106e616d6538011c5665633c75383e00010c75726c38011c5665633c75383e000114696d61676538011c5665633c75383e00011c646973636f726438011c5665633c75383e00012c6465736372697074696f6e38011c5665633c75383e0001286164646974696f6e616c38011c5665633c75383e0000a5020c4070616c6c65745f73756274656e736f721870616c6c6574385375626e65744964656e7469747900000c012c7375626e65745f6e616d6538011c5665633c75383e00012c6769746875625f7265706f38011c5665633c75383e0001387375626e65745f636f6e7461637438011c5665633c75383e0000a9020000040c009c9c00ad02000002b10200b102000004103418181800b5020c4070616c6c65745f73756274656e736f721870616c6c65741043616c6c04045400018c2c7365745f776569676874731001186e65747569649c010c7531360001146465737473750201205665633c7531363e00011c77656967687473750201205665633c7531363e00012c76657273696f6e5f6b657918010c7536340000e821012d2d2d2053657473207468652063616c6c6572207765696768747320666f722074686520696e63656e74697665206d656368616e69736d2e205468652063616c6c2063616e20626531016d6164652066726f6d2074686520686f746b6579206163636f756e7420736f20697320706f74656e7469616c6c7920696e7365637572652c20686f77657665722c207468652064616d61676539016f66206368616e67696e672077656967687473206973206d696e696d616c20696620636175676874206561726c792e20546869732066756e6374696f6e20696e636c7564657320616c6c207468654d01636865636b73207468617420746865207061737365642077656967687473206d6565742074686520726571756972656d656e74732e2053746f7265642061732075313673207468657920726570726573656e742d01726174696f6e616c2076616c75657320696e207468652072616e6765205b302c315d2077686963682073756d20746f203120616e642063616e20626520696e746572707265746564206173390170726f626162696c69746965732e2054686520737065636966696320776569676874732064657465726d696e6520686f7720696e666c6174696f6e2070726f70616761746573206f7574776172643c66726f6d207468697320706565722e0019014e6f74653a205468652031362062697420696e74656765727320776569676874732073686f756c6420726570726573656e7420312e3020617320746865206d6178207531362e8901486f77657665722c207468652066756e6374696f6e206e6f726d616c697a657320616c6c20696e74656765727320746f207531365f6d617820616e797761792e2054686973206d65616e732074686174206966207468652073756d206f6620616c6c4501656c656d656e7473206973206c6172676572206f7220736d616c6c6572207468616e2074686520616d6f756e74206f6620656c656d656e7473202a207531365f6d61782c20616c6c20656c656d656e74739477696c6c20626520636f7272656374656420666f72207468697320646576696174696f6e2e001c2320417267733ac02a20606f726967696e603a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aec202020202d205468652063616c6c65722c206120686f746b65792077686f2077697368657320746f2073657420746865697220776569676874732e00442a20606e6574756964602028753136293acc092d20546865206e6574776f726b20756964207765206172652073657474696e672074686573652077656967687473206f6e2e00542a206064657374736020285665633c7531363e293ad4092d20546865206564676520656e64706f696e7420666f7220746865207765696768742c20692e652e206a20666f7220775f696a2e005c2a2027776569676874732720285665633c7531363e293aec092d205468652075313620696e746567657220656e636f64656420776569676874732e20496e74657270726574656420617320726174696f6e616ce0090976616c75657320696e207468652072616e6765205b302c315d2e2054686579206d7573742073756d20746f20696e33323a3a4d41582e00602a202776657273696f6e5f6b65792720282075363420293a0d01092d20546865206e6574776f726b2076657273696f6e206b657920746f20636865636b206966207468652076616c696461746f7220697320757020746f20646174652e002023204576656e743a342a20576569676874735365743bc0092d204f6e207375636365737366756c6c792073657474696e67207468652077656967687473206f6e20636861696e2e002423205261697365733a6c2a20275375624e6574776f726b446f65734e6f744578697374273adc092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6578697374656e74206e6574776f726b2e00482a20274e6f7452656769737465726564273aec092d20417474656d7074696e6720746f2073657420776569676874732066726f6d2061206e6f6e2072656769737465726564206163636f756e742e00682a20275765696768745665634e6f74457175616c53697a65273ae8092d20417474656d7074696e6720746f20736574207765696768747320776974682075696473206e6f74206f662073616d65206c656e6774682e00482a20274475706c696361746555696473273ac4092d20417474656d7074696e6720746f2073657420776569676874732077697468206475706c696361746520756964732e0094202020202a2027556964734c656e67746845786365656455696473496e5375624e6574273ae0092d20417474656d7074696e6720746f2073657420776569676874732061626f766520746865206d617820616c6c6f77656420756964732e00702a2027556964566563436f6e7461696e496e76616c69644f6e65273abc092d20417474656d7074696e6720746f207365742077656967687473207769746820696e76616c696420756964732e00642a20275765696768745665634c656e67746849734c6f77273ae4092d20417474656d7074696e6720746f20736574207765696768747320776974682066657765722077656967687473207468616e206d696e2e00582a20274d61785765696768744578636565646564273af0092d20417474656d7074696e6720746f2073657420776569676874732077697468206d61782076616c756520657863656564696e67206c696d69742e38636f6d6d69745f776569676874730801186e65747569649c010c75313600012c636f6d6d69745f686173683401104832353600604c19012d2d2d2d205573656420746f20636f6d6d697420612068617368206f6620796f7572207765696768742076616c75657320746f206c617465722062652072657665616c65642e001c2320417267733aec2a20606f726967696e603a2028603c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e60293aac20202d20546865207369676e6174757265206f662074686520636f6d6d697474696e6720686f746b65792e004c2a20606e65747569646020286075313660293a7c20202d2054686520753136206e6574776f726b206964656e7469666965722e00642a2060636f6d6d69745f68617368602028604832353660293ac020202d20546865206861736820726570726573656e74696e672074686520636f6d6d697474656420776569676874732e002423205261697365733a642a2060436f6d6d697452657665616c44697361626c6564603a190120202d20417474656d7074696e6720746f20636f6d6d6974207768656e2074686520636f6d6d69742d72657665616c206d656368616e69736d2069732064697361626c65642e00742a2060546f6f4d616e79556e72657665616c6564436f6d6d697473603a750120202d20417474656d7074696e6720746f20636f6d6d6974207768656e20746865207573657220686173206d6f7265207468616e2074686520616c6c6f776564206c696d6974206f6620756e72657665616c656420636f6d6d6974732e003872657665616c5f776569676874731401186e65747569649c010c75313600011075696473750201205665633c7531363e00011876616c756573750201205665633c7531363e00011073616c74750201205665633c7531363e00012c76657273696f6e5f6b657918010c75363400619401012d2d2d2d205573656420746f2072657665616c20746865207765696768747320666f7220612070726576696f75736c7920636f6d6d697474656420686173682e001c2320417267733aec2a20606f726967696e603a2028603c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e60293aa820202d20546865207369676e6174757265206f66207468652072657665616c696e6720686f746b65792e004c2a20606e65747569646020286075313660293a7c20202d2054686520753136206e6574776f726b206964656e7469666965722e00582a206075696473602028605665633c7531363e60293ab020202d20546865207569647320666f72207468652077656967687473206265696e672072657665616c65642e00602a206076616c756573602028605665633c7531363e60293ab420202d205468652076616c756573206f66207468652077656967687473206265696e672072657665616c65642e00582a206073616c74602028605665633c7531363e60293ab820202d205468652073616c74207573656420746f2067656e65726174652074686520636f6d6d697420686173682e00602a206076657273696f6e5f6b65796020286075363460293a7020202d20546865206e6574776f726b2076657273696f6e206b65792e002423205261697365733a642a2060436f6d6d697452657665616c44697361626c6564603a390120202d20417474656d7074696e6720746f2072657665616c2077656967687473207768656e2074686520636f6d6d69742d72657665616c206d656368616e69736d2069732064697361626c65642e00642a20604e6f57656967687473436f6d6d6974466f756e64603af020202d20417474656d7074696e6720746f2072657665616c207765696768747320776974686f757420616e206578697374696e6720636f6d6d69742e00602a206045787069726564576569676874436f6d6d6974603ae820202d20417474656d7074696e6720746f2072657665616c20612077656967687420636f6d6d697420746861742068617320657870697265642e004c2a206052657665616c546f6f4561726c79603a050120202d20417474656d7074696e6720746f2072657665616c2077656967687473206f757473696465207468652076616c69642072657665616c20706572696f642e00902a2060496e76616c696452657665616c436f6d6d6974486173684e6f744d61746368603ae020202d205468652072657665616c6564206861736820646f6573206e6f74206d6174636820616e7920636f6d6d697474656420686173682e005062617463685f72657665616c5f776569676874731401186e65747569649c010c753136000124756964735f6c697374b90201345665633c5665633c7531363e3e00012c76616c7565735f6c697374b90201345665633c5665633c7531363e3e00012873616c74735f6c697374b90201345665633c5665633c7531363e3e00013076657273696f6e5f6b657973890201205665633c7536343e00629cf82d2d2d2d2054686520696d706c656d656e746174696f6e20666f722062617463682072657665616c696e6720636f6d6d697474656420776569676874732e001c2320417267733aec2a20606f726967696e603a2028603c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e60293aa820202d20546865207369676e6174757265206f66207468652072657665616c696e6720686f746b65792e004c2a20606e65747569646020286075313660293a7c20202d2054686520753136206e6574776f726b206964656e7469666965722e00802a2060756964735f6c697374602028605665633c5665633c7531363e3e60293ae820202d2041206c697374206f66207569647320666f72206561636820736574206f662077656967687473206265696e672072657665616c65642e00882a206076616c7565735f6c697374602028605665633c5665633c7531363e3e60293af020202d2041206c697374206f662076616c75657320666f72206561636820736574206f662077656967687473206265696e672072657665616c65642e00842a206073616c74735f6c697374602028605665633c5665633c7531363e3e60293adc20202d2041206c697374206f662073616c7473207573656420746f2067656e65726174652074686520636f6d6d6974206861736865732e00782a206076657273696f6e5f6b657973602028605665633c7536343e60293a8c20202d2041206c697374206f66206e6574776f726b2076657273696f6e206b6579732e002423205261697365733a642a2060436f6d6d697452657665616c44697361626c6564603a390120202d20417474656d7074696e6720746f2072657665616c2077656967687473207768656e2074686520636f6d6d69742d72657665616c206d656368616e69736d2069732064697361626c65642e00642a20604e6f57656967687473436f6d6d6974466f756e64603af020202d20417474656d7074696e6720746f2072657665616c207765696768747320776974686f757420616e206578697374696e6720636f6d6d69742e00602a206045787069726564576569676874436f6d6d6974603ae820202d20417474656d7074696e6720746f2072657665616c20612077656967687420636f6d6d697420746861742068617320657870697265642e004c2a206052657665616c546f6f4561726c79603a050120202d20417474656d7074696e6720746f2072657665616c2077656967687473206f757473696465207468652076616c69642072657665616c20706572696f642e00902a2060496e76616c696452657665616c436f6d6d6974486173684e6f744d61746368603ae020202d205468652072657665616c6564206861736820646f6573206e6f74206d6174636820616e7920636f6d6d697474656420686173682e00602a2060496e76616c6964496e7075744c656e67746873603ac020202d2054686520696e70757420766563746f727320617265206f66206d69736d617463686564206c656e677468732e407365745f726f6f745f776569676874731401186e65747569649c010c753136000118686f746b6579000130543a3a4163636f756e7449640001146465737473750201205665633c7531363e00011c77656967687473750201205665633c7531363e00012c76657273696f6e5f6b657918010c7536340008f01c2320417267733ac02a20606f726967696e603a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293ae0092d205468652063616c6c65722c206120686f746b65792077686f2077697368657320746f2073657420746865697220776569676874732e00442a20606e6574756964602028753136293acc092d20546865206e6574776f726b20756964207765206172652073657474696e672074686573652077656967687473206f6e2e00682a2060686f746b6579602028543a3a4163636f756e744964293a1101092d2054686520686f746b6579206173736f636961746564207769746820746865206f7065726174696f6e20616e64207468652063616c6c696e6720636f6c646b65792e00542a206064657374736020285665633c7531363e293ad4092d20546865206564676520656e64706f696e7420666f7220746865207765696768742c20692e652e206a20666f7220775f696a2e005c2a2027776569676874732720285665633c7531363e293aec092d205468652075313620696e746567657220656e636f64656420776569676874732e20496e74657270726574656420617320726174696f6e616ce0090976616c75657320696e207468652072616e6765205b302c315d2e2054686579206d7573742073756d20746f20696e33323a3a4d41582e00602a202776657273696f6e5f6b65792720282075363420293a0d01092d20546865206e6574776f726b2076657273696f6e206b657920746f20636865636b206966207468652076616c696461746f7220697320757020746f20646174652e002023204576656e743a00342a20576569676874735365743bc0092d204f6e207375636365737366756c6c792073657474696e67207468652077656967687473206f6e20636861696e2e002423205261697365733a005c2a204e6f6e4173736f636961746564436f6c644b65793be8092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6173736f63696174656420636f6c64206b65792e006c2a20275375624e6574776f726b446f65734e6f744578697374273adc092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6578697374656e74206e6574776f726b2e00482a20274e6f74526f6f745375626e6574273a1901092d20417474656d7074696e6720746f207365742077656967687473206f6e2061207375626e65742074686174206973206e6f742074686520726f6f74206e6574776f726b2e00682a20275765696768745665634e6f74457175616c53697a65273ae8092d20417474656d7074696e6720746f20736574207765696768747320776974682075696473206e6f74206f662073616d65206c656e6774682e00702a2027556964566563436f6e7461696e496e76616c69644f6e65273abc092d20417474656d7074696e6720746f207365742077656967687473207769746820696e76616c696420756964732e00482a20274e6f7452656769737465726564273aec092d20417474656d7074696e6720746f2073657420776569676874732066726f6d2061206e6f6e2072656769737465726564206163636f756e742e00642a20275765696768745665634c656e67746849734c6f77273ae4092d20417474656d7074696e6720746f20736574207765696768747320776974682066657765722077656967687473207468616e206d696e2e007c202a2027496e636f727265637457656967687456657273696f6e4b6579273a210120202020202d20417474656d7074696e6720746f20736574207765696768747320776974682074686520696e636f7272656374206e6574776f726b2076657273696f6e206b65792e006c202a202753657474696e6757656967687473546f6f46617374273aa820202020202d20417474656d7074696e6720746f20736574207765696768747320746f6f20666173742e00642a20275765696768745665634c656e67746849734c6f77273ae4092d20417474656d7074696e6720746f20736574207765696768747320776974682066657765722077656967687473207468616e206d696e2e00582a20274d61785765696768744578636565646564273af0092d20417474656d7074696e6720746f2073657420776569676874732077697468206d61782076616c756520657863656564696e67206c696d69742e003c6265636f6d655f64656c6567617465040118686f746b6579000130543a3a4163636f756e74496400015c7c2d2d2d205365747320746865206b657920617320612064656c65676174652e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2027686f746b6579272028543a3a4163636f756e744964293afc092d2054686520686f746b6579207765206172652064656c65676174696e6720286d757374206265206f776e65642062792074686520636f6c646b65792e29003c2a202774616b65272028753634293a0101092d20546865207374616b652070726f706f7274696f6e2074686174207468697320686f746b65792074616b65732066726f6d2064656c65676174696f6e732e002023204576656e743a402a2044656c656761746541646465643bc8092d204f6e207375636365737366756c6c792073657474696e67206120686f746b657920617320612064656c65676174652e002423205261697365733a482a20274e6f7452656769737465726564273a0501092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f742072656769737465726564206f6e20746865206e6574776f726b2e00642a20274e6f6e4173736f636961746564436f6c644b6579273a1101092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f74206f776e6564206279207468652063616c6c696e6720636f6c646b65742e003464656372656173655f74616b65080118686f746b6579000130543a3a4163636f756e74496400011074616b659c010c753136004184c02d2d2d20416c6c6f77732064656c65676174657320746f206465637265617365206974732074616b652076616c75652e001c2320417267733ac82a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2027686f746b6579272028543a3a4163636f756e744964293afc092d2054686520686f746b6579207765206172652064656c65676174696e6720286d757374206265206f776e65642062792074686520636f6c646b65792e2900442a20276e6574756964272028753136293a84092d205375626e657420494420746f2064656372656173652074616b6520666f72003c2a202774616b65272028753136293a1101092d20546865206e6577207374616b652070726f706f7274696f6e2074686174207468697320686f746b65792074616b65732066726f6d2064656c65676174696f6e732e1d0120202020202020546865206e65772076616c75652063616e206265206265747765656e203020616e642031315f37393620616e642073686f756c64206265207374726963746c793901202020202020206c6f776572207468616e207468652070726576696f75732076616c75652e204974205420697320746865206e65772076616c75652028726174696f6e616c206e756d626572292c3d01202020202020207468652074686520706172616d657465722069732063616c63756c61746564206173205b3635353335202a20545d2e20466f72206578616d706c652c20312520776f756c6420626598202020202020205b302e3031202a2036353533355d203d205b3635352e33355d203d20363535002023204576656e743a402a2054616b654465637265617365643bf0092d204f6e207375636365737366756c6c792073657474696e672061206465637265617365642074616b6520666f72207468697320686f746b65792e002423205261697365733a482a20274e6f7452656769737465726564273a0501092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f742072656769737465726564206f6e20746865206e6574776f726b2e00642a20274e6f6e4173736f636961746564436f6c644b6579273a1101092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f74206f776e6564206279207468652063616c6c696e6720636f6c646b65792e005c2a202744656c656761746554616b65546f6f4c6f77273a1d01092d205468652064656c65676174652069732073657474696e6720612074616b65207768696368206973206e6f74206c6f776572207468616e207468652070726576696f75732e0034696e6372656173655f74616b65080118686f746b6579000130543a3a4163636f756e74496400011074616b659c010c7531360042782d012d2d2d20416c6c6f77732064656c65676174657320746f20696e637265617365206974732074616b652076616c75652e20546869732063616c6c20697320726174652d6c696d697465642e001c2320417267733ac82a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2027686f746b6579272028543a3a4163636f756e744964293afc092d2054686520686f746b6579207765206172652064656c65676174696e6720286d757374206265206f776e65642062792074686520636f6c646b65792e29003c2a202774616b65272028753136293a1101092d20546865206e6577207374616b652070726f706f7274696f6e2074686174207468697320686f746b65792074616b65732066726f6d2064656c65676174696f6e732e1d0120202020202020546865206e65772076616c75652063616e206265206265747765656e203020616e642031315f37393620616e642073686f756c64206265207374726963746c7935012020202020202067726561746572207468616e207468652070726576696f75732076616c75652e205420697320746865206e65772076616c75652028726174696f6e616c206e756d626572292c3d01202020202020207468652074686520706172616d657465722069732063616c63756c61746564206173205b3635353335202a20545d2e20466f72206578616d706c652c20312520776f756c6420626598202020202020205b302e3031202a2036353533355d203d205b3635352e33355d203d20363535002023204576656e743a402a2054616b65496e637265617365643bf0092d204f6e207375636365737366756c6c792073657474696e67206120696e637265617365642074616b6520666f72207468697320686f746b65792e002423205261697365733a482a20274e6f7452656769737465726564273a0501092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f742072656769737465726564206f6e20746865206e6574776f726b2e00642a20274e6f6e4173736f636961746564436f6c644b6579273a1101092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f74206f776e6564206279207468652063616c6c696e6720636f6c646b65792e00602a202744656c656761746554616b65546f6f48696768273a2501092d205468652064656c65676174652069732073657474696e6720612074616b65207768696368206973206e6f742067726561746572207468616e207468652070726576696f75732e00246164645f7374616b65080118686f746b6579000130543a3a4163636f756e744964000134616d6f756e745f7374616b656418010c753634000278d42d2d2d2041646473207374616b6520746f206120686f746b65792e205468652063616c6c206973206d6164652066726f6d2074686594636f6c646b6579206163636f756e74206c696e6b656420696e2074686520686f746b65792ee84f6e6c7920746865206173736f63696174656420636f6c646b657920697320616c6c6f77656420746f206d616b65207374616b696e6720616e64d0756e7374616b696e672072657175657374732e20546869732070726f746563747320746865206e6575726f6e20616761696e7374c461747461636b73206f6e2069747320686f746b65792072756e6e696e6720696e2070726f64756374696f6e20636f64652e001c2320417267733ac4202a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e006c202a2027686f746b6579272028543a3a4163636f756e744964293a84092d20546865206173736f63696174656420686f746b6579206163636f756e742e0064202a2027616d6f756e745f7374616b6564272028753634293a0501092d2054686520616d6f756e74206f66207374616b6520746f20626520616464656420746f2074686520686f746b6579207374616b696e67206163636f756e742e002023204576656e743a38202a205374616b6541646465643be0092d204f6e20746865207375636365737366756c6c7920616464696e67207374616b6520746f206120676c6f62616c206163636f756e742e002423205261697365733a74202a20274e6f74456e6f75676842616c616e6365546f5374616b65273a1101092d204e6f7420656e6f7567682062616c616e6365206f6e2074686520636f6c646b657920746f20616464206f6e746f2074686520676c6f62616c206163636f756e742e0068202a20274e6f6e4173736f636961746564436f6c644b6579273ae8092d205468652063616c6c696e6720636f6c646b6579206973206e6f74206173736f6369617465642077697468207468697320686f746b65792e0070202a202742616c616e63655769746864726177616c4572726f72273ab020092d204572726f7273207374656d6d696e672066726f6d207472616e73616374696f6e2070616c6c65742e003072656d6f76655f7374616b65080118686f746b6579000130543a3a4163636f756e74496400013c616d6f756e745f756e7374616b656418010c753634000370f052656d6f7665207374616b652066726f6d20746865207374616b696e67206163636f756e742e205468652063616c6c206d757374206265206d6164651d0166726f6d2074686520636f6c646b6579206163636f756e7420617474616368656420746f20746865206e6575726f6e206d657461646174612e204f6e6c792074686973206b6579d8686173207065726d697373696f6e20746f206d616b65207374616b696e6720616e6420756e7374616b696e672072657175657374732e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2027686f746b6579272028543a3a4163636f756e744964293a84092d20546865206173736f63696174656420686f746b6579206163636f756e742e00682a2027616d6f756e745f756e7374616b6564272028753634293a0501092d2054686520616d6f756e74206f66207374616b6520746f20626520616464656420746f2074686520686f746b6579207374616b696e67206163636f756e742e002023204576656e743a3c2a205374616b6552656d6f7665643bf8092d204f6e20746865207375636365737366756c6c792072656d6f76696e67207374616b652066726f6d2074686520686f746b6579206163636f756e742e002423205261697365733a482a20274e6f7452656769737465726564273a2d01092d205468726f776e20696620746865206163636f756e742077652061726520617474656d7074696e6720746f20756e7374616b652066726f6d206973206e6f6e206578697374656e742e00642a20274e6f6e4173736f636961746564436f6c644b6579273a1d01092d205468726f776e2069662074686520636f6c646b657920646f6573206e6f74206f776e2074686520686f746b65792077652061726520756e7374616b696e672066726f6d2e00742a20274e6f74456e6f7567685374616b65546f5769746864726177273a3901092d205468726f776e206966207468657265206973206e6f7420656e6f756768207374616b65206f6e2074686520686f746b657920746f20776974686477726177207468697320616d6f756e742e002873657276655f61786f6e2001186e65747569649c010c75313600011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f74797065080108753800012070726f746f636f6c0801087538000130706c616365686f6c646572310801087538000130706c616365686f6c6465723208010875380004cca901536572766573206f7220757064617465732061786f6e202f70726f6d65746865757320696e666f726d6174696f6e20666f7220746865206e6575726f6e206173736f6369617465642077697468207468652063616c6c65722e204966207468652063616c6c6572206973ad01616c7265616479207265676973746572656420746865206d6574616461746120697320757064617465642e204966207468652063616c6c6572206973206e6f74207265676973746572656420746869732063616c6c207468726f7773204e6f74526567697374657265642e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a7c092d20546865207369676e6174757265206f66207468652063616c6c65722e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00482a202776657273696f6e272028753634293a90092d205468652062697474656e736f722076657273696f6e206964656e7469666965722e00342a20276970272028753634293ae4092d2054686520656e64706f696e7420697020696e666f726d6174696f6e2061732061207531323820656e636f64656420696e74656765722e003c2a2027706f7274272028753136293ae8092d2054686520656e64706f696e7420706f727420696e666f726d6174696f6e20617320612075313620656e636f64656420696e74656765722e00442a202769705f747970652720287538293aac092d2054686520656e64706f696e742069702076657273696f6e20617320612075382c2034206f7220362e00482a202770726f746f636f6c2720287538293a44092d205544503a31206f72205443503a3000582a2027706c616365686f6c646572312720287538293aa0092d20506c616365686f6c64657220666f72206675727468657220657874726120706172616d732e00582a2027706c616365686f6c646572322720287538293aa0092d20506c616365686f6c64657220666f72206675727468657220657874726120706172616d732e002023204576656e743a342a2041786f6e5365727665643ba4092d204f6e207375636365737366756c6c792073657276696e67207468652061786f6e20696e666f2e002423205261697365733a6c2a20275375624e6574776f726b446f65734e6f744578697374273adc092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6578697374656e74206e6574776f726b2e00482a20274e6f7452656769737465726564273aec092d20417474656d7074696e6720746f2073657420776569676874732066726f6d2061206e6f6e2072656769737465726564206163636f756e742e00482a2027496e76616c6964497054797065273a74092d205468652069702074797065206973206e6f742034206f7220362e00542a2027496e76616c6964497041646472657373273a1901092d20546865206e756d65726963616c6c7920656e636f646564206970206164647265737320646f6573206e6f74207265736f6c766520746f20612070726f7065722069702e00742a202753657276696e67526174654c696d69744578636565646564273a1d01092d20417474656d7074696e6720746f207365742070726f6d65746865757320696e666f726d6174696f6e2077697468696e67207468652072617465206c696d6974206d696e2e003873657276655f61786f6e5f746c732401186e65747569649c010c75313600011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f74797065080108753800012070726f746f636f6c0801087538000130706c616365686f6c646572310801087538000130706c616365686f6c64657232080108753800012c636572746966696361746538011c5665633c75383e0028dc2d0153616d65206173206073657276655f61786f6e60206275742074616b6573206120636572746966696361746520617320616e206578747261206f7074696f6e616c20617267756d656e742ea901536572766573206f7220757064617465732061786f6e202f70726f6d65746865757320696e666f726d6174696f6e20666f7220746865206e6575726f6e206173736f6369617465642077697468207468652063616c6c65722e204966207468652063616c6c6572206973ad01616c7265616479207265676973746572656420746865206d6574616461746120697320757064617465642e204966207468652063616c6c6572206973206e6f74207265676973746572656420746869732063616c6c207468726f7773204e6f74526567697374657265642e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a7c092d20546865207369676e6174757265206f66207468652063616c6c65722e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00482a202776657273696f6e272028753634293a90092d205468652062697474656e736f722076657273696f6e206964656e7469666965722e00342a20276970272028753634293ae4092d2054686520656e64706f696e7420697020696e666f726d6174696f6e2061732061207531323820656e636f64656420696e74656765722e003c2a2027706f7274272028753136293ae8092d2054686520656e64706f696e7420706f727420696e666f726d6174696f6e20617320612075313620656e636f64656420696e74656765722e00442a202769705f747970652720287538293aac092d2054686520656e64706f696e742069702076657273696f6e20617320612075382c2034206f7220362e00482a202770726f746f636f6c2720287538293a44092d205544503a31206f72205443503a3000582a2027706c616365686f6c646572312720287538293aa0092d20506c616365686f6c64657220666f72206675727468657220657874726120706172616d732e00582a2027706c616365686f6c646572322720287538293aa0092d20506c616365686f6c64657220666f72206675727468657220657874726120706172616d732e00682a202763657274696669636174652720285665633c75383e293ad4202020202d20544c5320636572746966696361746520666f7220696e746572206e6575726f6e20636f6d6d756e69746174696f6e2e002023204576656e743a342a2041786f6e5365727665643ba4092d204f6e207375636365737366756c6c792073657276696e67207468652061786f6e20696e666f2e002423205261697365733a6c2a20275375624e6574776f726b446f65734e6f744578697374273adc092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6578697374656e74206e6574776f726b2e00482a20274e6f7452656769737465726564273aec092d20417474656d7074696e6720746f2073657420776569676874732066726f6d2061206e6f6e2072656769737465726564206163636f756e742e00482a2027496e76616c6964497054797065273a74092d205468652069702074797065206973206e6f742034206f7220362e00542a2027496e76616c6964497041646472657373273a1901092d20546865206e756d65726963616c6c7920656e636f646564206970206164647265737320646f6573206e6f74207265736f6c766520746f20612070726f7065722069702e00742a202753657276696e67526174654c696d69744578636565646564273a1d01092d20417474656d7074696e6720746f207365742070726f6d65746865757320696e666f726d6174696f6e2077697468696e67207468652072617465206c696d6974206d696e2e004073657276655f70726f6d6574686575731401186e65747569649c010c75313600011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f747970650801087538000550bc2d2d2d2d205365742070726f6d65746865757320696e666f726d6174696f6e20666f7220746865206e6575726f6e2e1c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a9c092d20546865207369676e6174757265206f66207468652063616c6c696e6720686f746b65792e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00482a202776657273696f6e272028753136293a94092d20205468652062697474656e736f722076657273696f6e206964656e7469666965722e00382a2027697027202875313238293aec092d205468652070726f6d65746865757320697020696e666f726d6174696f6e2061732061207531323820656e636f64656420696e74656765722e003c2a2027706f7274272028753136293af0092d205468652070726f6d65746865757320706f727420696e666f726d6174696f6e20617320612075313620656e636f64656420696e74656765722e00442a202769705f747970652720287538293a60092d205468652069702074797065207634206f722076362e002072656769737465721801186e65747569649c010c753136000130626c6f636b5f6e756d62657218010c7536340001146e6f6e636518010c753634000110776f726b38011c5665633c75383e000118686f746b6579000130543a3a4163636f756e74496400011c636f6c646b6579000130543a3a4163636f756e7449640006bcb82d2d2d2d205265676973746572732061206e6577206e6575726f6e20746f20746865207375626e6574776f726b2e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a9c092d20546865207369676e6174757265206f66207468652063616c6c696e6720686f746b65792e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00642a2027626c6f636b5f6e756d6265722720282075363420293a98092d20426c6f636b2068617368207573656420746f2070726f766520776f726b20646f6e652e00482a20276e6f6e63652720282075363420293a98092d20506f73697469766520696e7465676572206e6f6e6365207573656420696e20504f572e00542a2027776f726b272028205665633c75383e20293abc092d20566563746f7220656e636f64656420627974657320726570726573656e74696e6720776f726b20646f6e652e00702a2027686f746b657927202820543a3a4163636f756e74496420293aa8092d20486f746b657920746f206265207265676973746572656420746f20746865206e6574776f726b2e00742a2027636f6c646b657927202820543a3a4163636f756e74496420293a78092d204173736f63696174656420636f6c646b6579206163636f756e742e002023204576656e743a4c2a204e6575726f6e526567697374657265643b1901092d204f6e207375636365737366756c6c79207265676973746572696e6720612075696420746f2061206e6575726f6e20736c6f74206f6e2061207375626e6574776f726b2e002423205261697365733a6c2a20275375624e6574776f726b446f65734e6f744578697374273ad0092d20417474656d7074696e6720746f20726567697374657220746f2061206e6f6e206578697374656e74206e6574776f726b2e00882a2027546f6f4d616e79526567697374726174696f6e7354686973426c6f636b273a2901092d205468697320726567697374726174696f6e20657863656564732074686520746f74616c20616c6c6f776564206f6e2074686973206e6574776f726b207468697320626c6f636b2e00902a2027486f744b6579416c726561647952656769737465726564496e5375624e6574273ad0092d2054686520686f746b657920697320616c72656164792072656769737465726564206f6e2074686973206e6574776f726b2e00542a2027496e76616c6964576f726b426c6f636b273a2501092d2054686520776f726b20686173206265656e20706572666f726d6564206f6e2061207374616c652c206675747572652c206f72206e6f6e206578697374656e7420626c6f636b2e00582a2027496e76616c6964446966666963756c7479273aa8092d2054686520776f726b20646f6573206e6f74206d617463682074686520646966666963756c74792e00402a2027496e76616c69645365616c273a64092d20546865207365616c20697320696e636f72726563742e0034726f6f745f7265676973746572040118686f746b6579000130543a3a4163636f756e744964003e048c52656769737465722074686520686f746b657920746f20726f6f74206e6574776f726b3461646a7573745f73656e617465040118686f746b6579000130543a3a4163636f756e744964003f04ec417474656d707420746f2061646a757374207468652073656e617465206d656d6265727368697020746f20696e636c756465206120686f746b65793c6275726e65645f72656769737465720801186e65747569649c010c753136000118686f746b6579000130543a3a4163636f756e744964000704c0557365722072656769737465722061206e6577207375626e6574776f726b20766961206275726e696e6720746f6b656e2c737761705f686f746b6579080118686f746b6579000130543a3a4163636f756e7449640001286e65775f686f746b6579000130543a3a4163636f756e744964004604ac5468652065787472696e73696320666f72207573657220746f206368616e67652069747320686f746b657930737761705f636f6c646b657908012c6f6c645f636f6c646b6579000130543a3a4163636f756e74496400012c6e65775f636f6c646b6579000130543a3a4163636f756e74496400473c2d015468652065787472696e73696320666f72207573657220746f206368616e67652074686520636f6c646b6579206173736f6369617465642077697468207468656972206163636f756e742e002c2320417267756d656e7473001d012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d757374206265207369676e656420627920746865206f6c6420636f6c646b65792e09012a20606f6c645f636f6c646b657960202d205468652063757272656e7420636f6c646b6579206173736f636961746564207769746820746865206163636f756e742e11012a20606e65775f636f6c646b657960202d20546865206e657720636f6c646b657920746f206265206173736f636961746564207769746820746865206163636f756e742e0024232052657475726e7300590152657475726e73206120604469737061746368526573756c7457697468506f7374496e666f6020696e6469636174696e672073756363657373206f72206661696c757265206f6620746865206f7065726174696f6e2e002023205765696768740019015765696768742069732063616c63756c61746564206261736564206f6e20746865206e756d626572206f6620646174616261736520726561647320616e64207772697465732e447365745f6368696c646b65795f74616b650c0118686f746b6579000130543a3a4163636f756e7449640001186e65747569649c010c75313600011074616b659c010c753136004b74a85365747320746865206368696c646b65792074616b6520666f72206120676976656e20686f746b65792e002d01546869732066756e6374696f6e20616c6c6f7773206120636f6c646b657920746f2073657420746865206368696c646b65792074616b6520666f72206120676976656e20686f746b65792e5501546865206368696c646b65792074616b652064657465726d696e6573207468652070726f706f7274696f6e206f66207374616b6520746861742074686520686f746b6579206b6565707320666f7220697473656c66a07768656e20646973747269627574696e67207374616b6520746f20697473206368696c6472656e2e00302320417267756d656e74733ae02a20606f726967696e6020283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e293a8901202020202d20546865207369676e6174757265206f66207468652063616c6c696e6720636f6c646b65792e2053657474696e67206368696c646b65792074616b652063616e206f6e6c7920626520646f6e652062792074686520636f6c646b65792e00682a2060686f746b6579602028543a3a4163636f756e744964293ae4202020202d2054686520686f746b657920666f7220776869636820746865206368696c646b65792074616b652077696c6c206265207365742e003c2a206074616b65602028753136293a8d01202020202d20546865206e6577206368696c646b65792074616b652076616c75652e205468697320697320612070657263656e7461676520726570726573656e74656420617320612076616c7565206265747765656e203020616e642031303030302c88202020202020776865726520313030303020726570726573656e747320313030252e002423204576656e74733a502a20604368696c646b657954616b65536574603af4202020202d204f6e207375636365737366756c6c792073657474696e6720746865206368696c646b65792074616b6520666f72206120686f746b65792e002423204572726f72733a642a20604e6f6e4173736f636961746564436f6c644b6579603aa8202020202d2054686520636f6c646b657920646f6573206e6f74206f776e2074686520686f746b65792e602a2060496e76616c69644368696c646b657954616b65603a4501202020202d205468652070726f76696465642074616b652076616c756520697320696e76616c6964202867726561746572207468616e20746865206d6178696d756d20616c6c6f7765642074616b65292e902a206054784368696c646b657954616b65526174654c696d69744578636565646564603a0901202020202d205468652072617465206c696d697420666f72206368616e67696e67206368696c646b65792074616b6520686173206265656e2065786365656465642e00907375646f5f7365745f74785f6368696c646b65795f74616b655f726174655f6c696d697404013474785f726174655f6c696d697418010c75363400452cec5365747320746865207472616e73616374696f6e2072617465206c696d697420666f72206368616e67696e67206368696c646b65792074616b652e00d0546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520726f6f74206f726967696e2e00302320417267756d656e74733ac82a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d75737420626520726f6f742ec42a206074785f726174655f6c696d697460202d20546865206e65772072617465206c696d697420696e20626c6f636b732e002423204572726f72733aa82a20604261644f726967696e60202d20496620746865206f726967696e206973206e6f7420726f6f742e00687375646f5f7365745f6d696e5f6368696c646b65795f74616b6504011074616b659c010c753136004c2c9c5365747320746865206d696e696d756d20616c6c6f776564206368696c646b65792074616b652e00d0546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520726f6f74206f726967696e2e00302320417267756d656e74733ac82a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d75737420626520726f6f742ebc2a206074616b6560202d20546865206e6577206d696e696d756d206368696c646b65792074616b652076616c75652e002423204572726f72733aa82a20604261644f726967696e60202d20496620746865206f726967696e206973206e6f7420726f6f742e00687375646f5f7365745f6d61785f6368696c646b65795f74616b6504011074616b659c010c753136004d2c9c5365747320746865206d6178696d756d20616c6c6f776564206368696c646b65792074616b652e00d0546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520726f6f74206f726967696e2e00302320417267756d656e74733ac82a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d75737420626520726f6f742ebc2a206074616b6560202d20546865206e6577206d6178696d756d206368696c646b65792074616b652076616c75652e002423204572726f72733aa82a20604261644f726967696e60202d20496620746865206f726967696e206973206e6f7420726f6f742e00107375646f04011063616c6cbd02015c426f783c543a3a5375646f52756e74696d6543616c6c3e0033184d0141757468656e74696361746573206120636f756e63696c2070726f706f73616c20616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00f4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265206120636f756e63696c206d616a6f726974792e0034232320436f6d706c65786974791c2d204f2831292e547375646f5f756e636865636b65645f77656967687408011063616c6cbd02015c426f783c543a3a5375646f52756e74696d6543616c6c3e0001187765696768742c01185765696768740034204d0141757468656e74696361746573206120636f756e63696c2070726f706f73616c20616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f7773207468659c7573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00f4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265206120636f756e63696c206d616a6f726974792e0034232320436f6d706c65786974791c2d204f2831292e10766f7465100118686f746b6579000130543a3a4163636f756e74496400012070726f706f73616c34011c543a3a48617368000114696e6465785101010c75333200011c617070726f7665240110626f6f6c0037045c5573657220766f7465206f6e20612070726f706f73616c4072656769737465725f6e6574776f726b003b0478557365722072656769737465722061206e6577207375626e6574776f726b186661756365740c0130626c6f636b5f6e756d62657218010c7536340001146e6f6e636518010c753634000110776f726b38011c5665633c75383e003c0cd0466163696c6974792065787472696e73696320666f72207573657220746f206765742074616b656e2066726f6d20666175636574d04974206973206f6e6c7920617661696c61626c65207768656e20706f772d666175636574206665617475726520656e61626c6564dc4a757374206465706c6f79656420696e20746573746e657420616e64206465766e657420666f722074657374696e6720707572706f736540646973736f6c76655f6e6574776f726b08011c636f6c646b6579000130543a3a4163636f756e7449640001186e65747569649c010c753136003d086852656d6f7665206120757365722773207375626e6574776f726bac5468652063616c6c6572206d75737420626520746865206f776e6572206f6620746865206e6574776f726b307365745f6368696c6472656e0c0118686f746b6579000130543a3a4163636f756e7449640001186e65747569649c010c7531360001206368696c6472656eac01605665633c287536342c20543a3a4163636f756e744964293e0043b0f453657420612073696e676c65206368696c6420666f72206120676976656e20686f746b6579206f6e206120737065636966696564206e6574776f726b2e007d01546869732066756e6374696f6e20616c6c6f7773206120636f6c646b657920746f2073657420612073696e676c65206368696c6420666f72206120676976656e20686f746b6579206f6e206120737065636966696564206e6574776f726b2e51015468652070726f706f7274696f6e206f662074686520686f746b65792773207374616b6520746f20626520616c6c6f636174656420746f20746865206368696c6420697320616c736f207370656369666965642e00302320417267756d656e74733ae02a20606f726967696e6020283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e293a8d01202020202d20546865207369676e6174757265206f66207468652063616c6c696e6720636f6c646b65792e2053657474696e67206120686f746b6579206368696c642063616e206f6e6c7920626520646f6e652062792074686520636f6c646b65792e00682a2060686f746b6579602028543a3a4163636f756e744964293ac8202020202d2054686520686f746b65792077686963682077696c6c2062652061737369676e656420746865206368696c642e00642a20606368696c64602028543a3a4163636f756e744964293ad4202020202d20546865206368696c642077686963682077696c6c2062652061737369676e656420746f2074686520686f746b65792e00442a20606e6574756964602028753136293afc202020202d2054686520753136206e6574776f726b206964656e74696669657220776865726520746865206368696c646b65792077696c6c2065786973742e00542a206070726f706f7274696f6e602028753634293a8901202020202d2050726f706f7274696f6e206f662074686520686f746b65792773207374616b6520746f20626520676976656e20746f20746865206368696c642c207468652076616c7565206d75737420626520753634206e6f726d616c697a65642e002423204576656e74733a5c2a20604368696c64416464656453696e67756c6172603ad8202020202d204f6e207375636365737366756c6c79207265676973746572696e672061206368696c6420746f206120686f746b65792e002423204572726f72733a6c2a20605375624e6574776f726b446f65734e6f744578697374603adc202020202d20417474656d7074696e6720746f20726567697374657220746f2061206e6f6e2d6578697374656e74206e6574776f726b2ea42a2060526567697374726174696f6e4e6f745065726d69747465644f6e526f6f745375626e6574603ae4202020202d20417474656d7074696e6720746f2072656769737465722061206368696c64206f6e2074686520726f6f74206e6574776f726b2e642a20604e6f6e4173736f636961746564436f6c644b6579603a4501202020202d2054686520636f6c646b657920646f6573206e6f74206f776e2074686520686f746b6579206f7220746865206368696c64206973207468652073616d652061732074686520686f746b65792e6c2a2060486f744b65794163636f756e744e6f74457869737473603aa0202020202d2054686520686f746b6579206163636f756e7420646f6573206e6f742065786973742e0084232044657461696c6564204578706c616e6174696f6e206f6620436865636b733aa501312e202a2a5369676e617475726520566572696669636174696f6e2a2a3a20456e73757265732074686174207468652063616c6c657220686173207369676e656420746865207472616e73616374696f6e2c20766572696679696e672074686520636f6c646b65792ef901322e202a2a526f6f74204e6574776f726b20436865636b2a2a3a20456e73757265732074686174207468652064656c65676174696f6e206973206e6f74206f6e2074686520726f6f74206e6574776f726b2c206173206368696c6420686f746b65797320617265206e6f742076616c6964206f6e2074686520726f6f742e2901332e202a2a4e6574776f726b204578697374656e636520436865636b2a2a3a20456e737572657320746861742074686520737065636966696564206e6574776f726b206578697374732e2101342e202a2a4f776e65727368697020566572696669636174696f6e2a2a3a20456e737572657320746861742074686520636f6c646b6579206f776e732074686520686f746b65792e5901352e202a2a486f746b6579204163636f756e74204578697374656e636520436865636b2a2a3a20456e737572657320746861742074686520686f746b6579206163636f756e7420616c7265616479206578697374732e5901362e202a2a4368696c642d486f746b65792044697374696e6374696f6e2a2a3a20456e7375726573207468617420746865206368696c64206973206e6f74207468652073616d652061732074686520686f746b65792e6501372e202a2a4f6c64204368696c6472656e20436c65616e75702a2a3a2052656d6f7665732074686520686f746b65792066726f6d2074686520706172656e74206c697374206f6620697473206f6c64206368696c6472656e2ec901382e202a2a4e6577204368696c6472656e2041737369676e6d656e742a2a3a2041737369676e7320746865206e6577206368696c6420746f2074686520686f746b657920616e6420757064617465732074686520706172656e74206c69737420666f7220746865206e6577206368696c642e547363686564756c655f737761705f636f6c646b657904012c6e65775f636f6c646b6579000130543a3a4163636f756e74496400498011015363686564756c6573206120636f6c646b65792073776170206f7065726174696f6e20746f20626520657865637574656420617420612066757475726520626c6f636b2e004901546869732066756e6374696f6e20616c6c6f77732061207573657220746f207363686564756c6520746865207377617070696e67206f6620746865697220636f6c646b657920746f2061206e6577206f6e65490161742061207370656369666965642066757475726520626c6f636b2e205468652073776170206973206e6f7420657865637574656420696d6d6564696174656c7920627574206973207363686564756c65649c746f206f63637572206174207468652073706563696669656420626c6f636b206e756d6265722e002c2320417267756d656e74730065012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c2077686963682073686f756c64206265207369676e6564206279207468652063757272656e7420636f6c646b6579206f776e65722e59012a20606e65775f636f6c646b657960202d20546865206163636f756e74204944206f6620746865206e657720636f6c646b657920746861742077696c6c207265706c616365207468652063757272656e74206f6e652e25012a20607768656e60202d2054686520626c6f636b206e756d6265722061742077686963682074686520636f6c646b657920737761702073686f756c642062652065786563757465642e0024232052657475726e7300610152657475726e73206120604469737061746368526573756c7457697468506f7374496e666f6020696e6469636174696e67207768657468657220746865207363686564756c696e6720776173207375636365737366756c2e002023204572726f72730094546869732066756e6374696f6e206d61792072657475726e20616e206572726f722069663a6c2a20546865206f726967696e206973206e6f74207369676e65642ef82a20546865207363686564756c696e67206661696c732064756520746f20636f6e666c69637473206f722073797374656d20636f6e73747261696e74732e001c23204e6f7465730071012d205468652061637475616c2073776170206973206e6f7420706572666f726d656420627920746869732066756e6374696f6e2e204974206d6572656c79207363686564756c6573207468652073776170206f7065726174696f6e2e81012d2054686520776569676874206f6620746869732063616c6c2069732073657420746f20612066697865642076616c756520616e64206d6179206e6565642061646a7573746d656e74206261736564206f6e2062656e63686d61726b696e672e00182320544f444f003d012d20496d706c656d656e742070726f706572207765696768742063616c63756c6174696f6e206261736564206f6e2074686520636f6d706c6578697479206f6620746865206f7065726174696f6e2e1d012d20436f6e736964657220616464696e6720636865636b7320746f2070726576656e74207363686564756c696e6720746f6f2066617220696e746f20746865206675747572652e64544f444f3a2042656e63686d61726b20746869732063616c6c647363686564756c655f646973736f6c76655f6e6574776f726b0401186e65747569649c010c753136004a3809015363686564756c652074686520646973736f6c7574696f6e206f662061206e6574776f726b20617420612073706563696669656420626c6f636b206e756d6265722e002c2320417267756d656e74730009012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d757374206265207369676e6564206279207468652073656e6465722ee02a20606e657475696460202d2054686520753136206e6574776f726b206964656e74696669657220746f20626520646973736f6c7665642e0024232052657475726e7300590152657475726e73206120604469737061746368526573756c7457697468506f7374496e666f6020696e6469636174696e672073756363657373206f72206661696c757265206f6620746865206f7065726174696f6e2e002023205765696768740019015765696768742069732063616c63756c61746564206261736564206f6e20746865206e756d626572206f6620646174616261736520726561647320616e64207772697465732e307365745f6964656e746974791801106e616d6538011c5665633c75383e00010c75726c38011c5665633c75383e000114696d61676538011c5665633c75383e00011c646973636f726438011c5665633c75383e00012c6465736372697074696f6e38011c5665633c75383e0001286164646974696f6e616c38011c5665633c75383e004450bc2d2d2d2d205365742070726f6d65746865757320696e666f726d6174696f6e20666f7220746865206e6575726f6e2e1c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a9c092d20546865207369676e6174757265206f66207468652063616c6c696e6720686f746b65792e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00482a202776657273696f6e272028753136293a94092d20205468652062697474656e736f722076657273696f6e206964656e7469666965722e00382a2027697027202875313238293aec092d205468652070726f6d65746865757320697020696e666f726d6174696f6e2061732061207531323820656e636f64656420696e74656765722e003c2a2027706f7274272028753136293af0092d205468652070726f6d65746865757320706f727420696e666f726d6174696f6e20617320612075313620656e636f64656420696e74656765722e00442a202769705f747970652720287538293a60092d205468652069702074797065207634206f722076362e004c7365745f7375626e65745f6964656e746974791001186e65747569649c010c75313600012c7375626e65745f6e616d6538011c5665633c75383e00012c6769746875625f7265706f38011c5665633c75383e0001387375626e65745f636f6e7461637438011c5665633c75383e004e40bc2d2d2d2d2053657420746865206964656e7469747920696e666f726d6174696f6e20666f722061207375626e65742e1c2320417267733acc2a20606f726967696e60202d20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293a4901202020202d20546865207369676e6174757265206f66207468652063616c6c696e6720636f6c646b65792c207768696368206d75737420626520746865206f776e6572206f6620746865207375626e65742e00442a20606e6574756964602028753136293ac8202020202d2054686520756e69717565206e6574776f726b206964656e746966696572206f6620746865207375626e65742e00682a20607375626e65745f6e616d656020285665633c75383e293a74202020202d20546865206e616d65206f6620746865207375626e65742e00682a20606769746875625f7265706f6020285665633c75383e293a0101202020202d2054686520476974487562207265706f7369746f7279206173736f636961746564207769746820746865207375626e6574206964656e746974792e00742a20607375626e65745f636f6e746163746020285665633c75383e293ab4202020202d2054686520636f6e7461637420696e666f726d6174696f6e20666f7220746865207375626e65742e7872656769737465725f6e6574776f726b5f776974685f6964656e746974790401206964656e74697479710501604f7074696f6e3c5375626e65744964656e746974794f663e004f0478557365722072656769737465722061206e6577207375626e6574776f726b0c6101446973706174636861626c652066756e6374696f6e7320616c6c6f7720757365727320746f20696e7465726163742077697468207468652070616c6c657420616e6420696e766f6b65207374617465206368616e6765732e590154686573652066756e6374696f6e73206d6174657269616c697a65206173202265787472696e73696373222c20776869636820617265206f6674656e20636f6d706172656420746f207472616e73616374696f6e732e6101446973706174636861626c652066756e6374696f6e73206d75737420626520616e6e6f7461746564207769746820612077656967687420616e64206d7573742072657475726e2061204469737061746368526573756c742eb902000002750200bd0208586e6f64655f73756274656e736f725f72756e74696d652c52756e74696d6543616c6c0001581853797374656d0400590101ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400a10101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c4772616e6470610400c50101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0004002042616c616e6365730400410201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0005003c53756274656e736f724d6f64756c650400b50201d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53756274656e736f724d6f64756c652c2052756e74696d653e0007002c547269756d7669726174650400c10201c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547269756d7669726174652c2052756e74696d653e00080048547269756d7669726174654d656d626572730400c50201dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547269756d7669726174654d656d626572732c2052756e74696d653e0009003453656e6174654d656d626572730400c90201c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53656e6174654d656d626572732c2052756e74696d653e000a001c5574696c6974790400cd0201b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e000b00105375646f0400e50201a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000c00204d756c74697369670400e90201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e000d0020507265696d6167650400f10201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e000e00245363686564756c65720400f50201b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e000f001450726f78790400fd0201a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e0010002052656769737472790400050301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c52656769737472792c2052756e74696d653e0011002c436f6d6d69746d656e74730400110401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6d6d69746d656e74732c2052756e74696d653e0012002841646d696e5574696c730400250501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c41646d696e5574696c732c2052756e74696d653e00130020536166654d6f64650400290501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c536166654d6f64652c2052756e74696d653e00140020457468657265756d04002d0501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d2c2052756e74696d653e0015000c45564d0400550501a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d2c2052756e74696d653e0016002844796e616d69634665650400690501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44796e616d69634665652c2052756e74696d653e0018001c4261736546656504006d0501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426173654665652c2052756e74696d653e00190000c1020c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d626572734d0201445665633c543a3a4163636f756e7449643e0001147072696d65a801504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616cbd02017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e645101010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c012070726f706f73616cbd02017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e645101010c7533320001206475726174696f6e100144426c6f636b4e756d626572466f723c543e000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c34011c543a3a48617368000114696e6465785101013450726f706f73616c496e64657800011c617070726f7665240110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736834011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f6861736834011c543a3a48617368000114696e6465785101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642c01185765696768740001306c656e6774685f626f756e645101010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5020c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665450201504163636f756e7449644c6f6f6b75704f663c543e00010c616464450201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d626572734d0201445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577450201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9020c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665450201504163636f756e7449644c6f6f6b75704f663c543e00010c616464450201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d626572734d0201445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577450201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd020c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c73d102017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465789c010c75313600011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c73d102017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696ed5020154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c73d102017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001187765696768742c0118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed102000002bd0200d50208586e6f64655f73756274656e736f725f72756e74696d65304f726967696e43616c6c65720001101873797374656d0400d90201746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000002c547269756d7669726174650400dd0201010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e00080020457468657265756d0400e102015c70616c6c65745f657468657265756d3a3a4f726967696e00150010566f69640400f10101410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f696400030000d9020c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e6500020000dd02084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d00020000e102083c70616c6c65745f657468657265756d245261774f726967696e0001044c457468657265756d5472616e73616374696f6e0400050101104831363000000000e5020c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000004350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e547375646f5f756e636865636b65645f77656967687408011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001187765696768742c0118576569676874000114350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e1c7365745f6b657904010c6e6577450201504163636f756e7449644c6f6f6b75704f663c543e0002085d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e1c7375646f5f617308010c77686f450201504163636f756e7449644c6f6f6b75704f663c543e00011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0003104d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2872656d6f76655f6b657900040c845065726d616e656e746c792072656d6f76657320746865207375646f206b65792e006c2a2a546869732063616e6e6f7420626520756e2d646f6e652e2a2a040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ee9020c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f726965734d0201445665633c543a3a4163636f756e7449643e00011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965734d0201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74ed0201904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f7765696768742c011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965734d0201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74ed0201904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742c01185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965734d0201445665633c543a3a4163636f756e7449643e00012474696d65706f696e74d0017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eed0204184f7074696f6e04045401d00108104e6f6e6500000010536f6d650400d00000010000f1020c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000114346e6f74655f707265696d616765040114627974657338011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d6167650401106861736834011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d6167650401106861736834011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d6167650401106861736834011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e38656e737572655f75706461746564040118686173686573b401305665633c543a3a486173683e00040cc4456e7375726520746861742074686520612062756c6b206f66207072652d696d616765732069732075706772616465642e003d015468652063616c6c65722070617973206e6f20666565206966206174206c6561737420393025206f66207072652d696d616765732077657265207375636365737366756c6c7920757064617465642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef5020c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000128207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963f90201ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963f90201ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963f90201ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963f90201ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e247365745f72657472790c01107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e00011c726574726965730801087538000118706572696f64100144426c6f636b4e756d626572466f723c543e0006305901536574206120726574727920636f6e66696775726174696f6e20666f722061207461736b20736f20746861742c20696e206361736520697473207363686564756c65642072756e206661696c732c2069742077696c6c5501626520726574726965642061667465722060706572696f646020626c6f636b732c20666f72206120746f74616c20616d6f756e74206f66206072657472696573602072657472696573206f7220756e74696c2069742473756363656564732e0055015461736b73207768696368206e65656420746f206265207363686564756c656420666f72206120726574727920617265207374696c6c207375626a65637420746f20776569676874206d65746572696e6720616e6451016167656e64612073706163652c2073616d65206173206120726567756c6172207461736b2e204966206120706572696f646963207461736b206661696c732c2069742077696c6c206265207363686564756c6564906e6f726d616c6c79207768696c6520746865207461736b206973207265747279696e672e0051015461736b73207363686564756c6564206173206120726573756c74206f66206120726574727920666f72206120706572696f646963207461736b2061726520756e6e616d65642c206e6f6e2d706572696f6469633d01636c6f6e6573206f6620746865206f726967696e616c207461736b2e20546865697220726574727920636f6e66696775726174696f6e2077696c6c20626520646572697665642066726f6d207468654d016f726967696e616c207461736b277320636f6e66696775726174696f6e2c206275742077696c6c20686176652061206c6f7765722076616c756520666f72206072656d61696e696e6760207468616e20746865646f726967696e616c2060746f74616c5f72657472696573602e3c7365745f72657472795f6e616d65640c010869640401205461736b4e616d6500011c726574726965730801087538000118706572696f64100144426c6f636b4e756d626572466f723c543e0007305d01536574206120726574727920636f6e66696775726174696f6e20666f722061206e616d6564207461736b20736f20746861742c20696e206361736520697473207363686564756c65642072756e206661696c732c2069745d0177696c6c20626520726574726965642061667465722060706572696f646020626c6f636b732c20666f72206120746f74616c20616d6f756e74206f66206072657472696573602072657472696573206f7220756e74696c3069742073756363656564732e0055015461736b73207768696368206e65656420746f206265207363686564756c656420666f72206120726574727920617265207374696c6c207375626a65637420746f20776569676874206d65746572696e6720616e6451016167656e64612073706163652c2073616d65206173206120726567756c6172207461736b2e204966206120706572696f646963207461736b206661696c732c2069742077696c6c206265207363686564756c6564906e6f726d616c6c79207768696c6520746865207461736b206973207265747279696e672e0051015461736b73207363686564756c6564206173206120726573756c74206f66206120726574727920666f72206120706572696f646963207461736b2061726520756e6e616d65642c206e6f6e2d706572696f6469633d01636c6f6e6573206f6620746865206f726967696e616c207461736b2e20546865697220726574727920636f6e66696775726174696f6e2077696c6c20626520646572697665642066726f6d207468654d016f726967696e616c207461736b277320636f6e66696775726174696f6e2c206275742077696c6c20686176652061206c6f7765722076616c756520666f72206072656d61696e696e6760207468616e20746865646f726967696e616c2060746f74616c5f72657472696573602e3063616e63656c5f72657472790401107461736bdc01785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e000804a852656d6f7665732074686520726574727920636f6e66696775726174696f6e206f662061207461736b2e4863616e63656c5f72657472795f6e616d656404010869640401205461736b4e616d65000904bc43616e63656c2074686520726574727920636f6e66696775726174696f6e206f662061206e616d6564207461736b2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ef90204184f7074696f6e04045401dc0108104e6f6e6500000010536f6d650400dc0000010000fd020c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c450201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065010301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465450201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e0001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465450201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065e80130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e6465789c010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572450201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065e80130543a3a50726f787954797065000114696e6465789c010c75313600011868656967687451010144426c6f636b4e756d626572466f723c543e0001246578745f696e6465785101010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616c450201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c450201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465450201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465450201504163636f756e7449644c6f6f6b75704f663c543e0001107265616c450201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065010301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6cbd02017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e010304184f7074696f6e04045401e80108104e6f6e6500000010536f6d650400e8000001000005030c3c70616c6c65745f72656769737472791870616c6c65741043616c6c040454000108307365745f6964656e746974790801286964656e746966696564000130543a3a4163636f756e744964000110696e666f090301a4426f783c4964656e74697479496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e3e0000043d01526567697374657220616e206964656e7469747920666f7220616e206163636f756e742e20546869732077696c6c206f766572777269746520616e79206578697374696e67206964656e746974792e38636c6561725f6964656e746974790401286964656e746966696564000130543a3a4163636f756e74496400010484436c65617220746865206964656e74697479206f6620616e206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e09030c3c70616c6c65745f7265676973747279147479706573304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c0d030190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c617915030110446174610001146c6567616c150301104461746100010c776562150301104461746100011072696f741503011044617461000114656d61696c150301104461746100013c7067705f66696e6765727072696e740d0401404f7074696f6e3c5b75383b2032305d3e000114696d616765150301104461746100011c74776974746572150301104461746100000d030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011103045300000400090401185665633c543e0000110300000408150315030015030c3c70616c6c65745f7265676973747279147479706573104461746100011901104e6f6e6500000010526177300400190300000100105261773104001d0300000200105261773204002103000003001052617733040025030000040010526177340400480000050010526177350400290300000600105261773604002d0300000700105261773704003103000008001052617738040095010000090010526177390400350300000a001452617731300400390300000b0014526177313104003d0300000c001452617731320400410300000d001452617731330400450300000e001452617731340400490300000f0014526177313504004d030000100014526177313604005103000011001452617731370400550300001200145261773138040059030000130014526177313904005d0300001400145261773230040009010000150014526177323104006103000016001452617732320400650300001700145261773233040069030000180014526177323404006d03000019001452617732350400710300001a001452617732360400750300001b001452617732370400790300001c0014526177323804007d0300001d001452617732390400810300001e001452617733300400850300001f0014526177333104008903000020001452617733320400040000210014526177333304008d030000220014526177333404009103000023001452617733350400950300002400145261773336040099030000250014526177333704009d03000026001452617733380400a103000027001452617733390400a503000028001452617734300400a903000029001452617734310400ad0300002a001452617734320400b10300002b001452617734330400b50300002c001452617734340400b90300002d001452617734350400bd0300002e001452617734360400c10300002f001452617734370400c503000030001452617734380400c903000031001452617734390400cd03000032001452617735300400d103000033001452617735310400d503000034001452617735320400d903000035001452617735330400dd03000036001452617735340400e103000037001452617735350400e503000038001452617735360400e903000039001452617735370400ed0300003a001452617735380400f10300003b001452617735390400f50300003c001452617736300400f90300003d001452617736310400fd0300003e001452617736320400010400003f0014526177363304000504000040001452617736340400dd01000041002c426c616b6554776f323536040004000042001853686132353604000400004300244b656363616b323536040004000044002c5368615468726565323536040004000045000019030000030000000008001d030000030100000008002103000003020000000800250300000303000000080029030000030500000008002d030000030600000008003103000003070000000800350300000309000000080039030000030a00000008003d030000030b000000080041030000030c000000080045030000030d000000080049030000030e00000008004d030000030f00000008005103000003100000000800550300000311000000080059030000031200000008005d030000031300000008006103000003150000000800650300000316000000080069030000031700000008006d03000003180000000800710300000319000000080075030000031a000000080079030000031b00000008007d030000031c000000080081030000031d000000080085030000031e000000080089030000031f00000008008d030000032100000008009103000003220000000800950300000323000000080099030000032400000008009d03000003250000000800a103000003260000000800a503000003270000000800a903000003280000000800ad03000003290000000800b1030000032a0000000800b5030000032b0000000800b9030000032c0000000800bd030000032d0000000800c1030000032e0000000800c5030000032f0000000800c903000003300000000800cd03000003310000000800d103000003320000000800d503000003330000000800d903000003340000000800dd03000003350000000800e103000003360000000800e503000003370000000800e903000003380000000800ed03000003390000000800f1030000033a0000000800f5030000033b0000000800f9030000033c0000000800fd030000033d000000080001040000033e000000080005040000033f000000080009040000021103000d0404184f7074696f6e0404540109010108104e6f6e6500000010536f6d6504000901000001000011040c4870616c6c65745f636f6d6d69746d656e74731870616c6c65741043616c6c040454000104387365745f636f6d6d69746d656e740801186e65747569649c010c753136000110696e666f15040184426f783c436f6d6d69746d656e74496e666f3c543a3a4d61784669656c64733e3e000004945365742074686520636f6d6d69746d656e7420666f72206120676976656e206e6574756964040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e15040c4870616c6c65745f636f6d6d69746d656e747314747970657338436f6d6d69746d656e74496e666f04284669656c644c696d697400000401186669656c647319040170426f756e6465645665633c446174612c204669656c644c696d69743e000019040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d04045300000400210501185665633c543e00001d040c4870616c6c65745f636f6d6d69746d656e7473147479706573104461746100011902104e6f6e6500000010526177300400190300000100105261773104001d0300000200105261773204002103000003001052617733040025030000040010526177340400480000050010526177350400290300000600105261773604002d0300000700105261773704003103000008001052617738040095010000090010526177390400350300000a001452617731300400390300000b0014526177313104003d0300000c001452617731320400410300000d001452617731330400450300000e001452617731340400490300000f0014526177313504004d030000100014526177313604005103000011001452617731370400550300001200145261773138040059030000130014526177313904005d0300001400145261773230040009010000150014526177323104006103000016001452617732320400650300001700145261773233040069030000180014526177323404006d03000019001452617732350400710300001a001452617732360400750300001b001452617732370400790300001c0014526177323804007d0300001d001452617732390400810300001e001452617733300400850300001f0014526177333104008903000020001452617733320400040000210014526177333304008d030000220014526177333404009103000023001452617733350400950300002400145261773336040099030000250014526177333704009d03000026001452617733380400a103000027001452617733390400a503000028001452617734300400a903000029001452617734310400ad0300002a001452617734320400b10300002b001452617734330400b50300002c001452617734340400b90300002d001452617734350400bd0300002e001452617734360400c10300002f001452617734370400c503000030001452617734380400c903000031001452617734390400cd03000032001452617735300400d103000033001452617735310400d503000034001452617735320400d903000035001452617735330400dd03000036001452617735340400e103000037001452617735350400e503000038001452617735360400e903000039001452617735370400ed0300003a001452617735380400f10300003b001452617735390400f50300003c001452617736300400f90300003d001452617736310400fd0300003e001452617736320400010400003f0014526177363304000504000040001452617736340400dd010000410014526177363504002104000042001452617736360400250400004300145261773637040029040000440014526177363804002d040000450014526177363904003104000046001452617737300400350400004700145261773731040039040000480014526177373204003d04000049001452617737330400410400004a001452617737340400450400004b001452617737350400490400004c0014526177373604004d0400004d001452617737370400510400004e001452617737380400550400004f00145261773739040059040000500014526177383004005d040000510014526177383104006104000052001452617738320400650400005300145261773833040069040000540014526177383404006d040000550014526177383504007104000056001452617738360400750400005700145261773837040079040000580014526177383804007d04000059001452617738390400810400005a001452617739300400850400005b001452617739310400890400005c0014526177393204008d0400005d001452617739330400910400005e001452617739340400950400005f00145261773935040099040000600014526177393604009d04000061001452617739370400a104000062001452617739380400a504000063001452617739390400a90400006400185261773130300400ad0400006500185261773130310400b10400006600185261773130320400b50400006700185261773130330400b90400006800185261773130340400bd0400006900185261773130350400c10400006a00185261773130360400c50400006b00185261773130370400c90400006c00185261773130380400cd0400006d00185261773130390400d10400006e00185261773131300400d50400006f00185261773131310400d90400007000185261773131320400dd0400007100185261773131330400e10400007200185261773131340400e50400007300185261773131350400e90400007400185261773131360400ed0400007500185261773131370400f10400007600185261773131380400f50400007700185261773131390400f90400007800185261773132300400fd0400007900185261773132310400010500007a00185261773132320400050500007b00185261773132330400090500007c001852617731323404000d0500007d00185261773132350400110500007e00185261773132360400150500007f001852617731323704001905000080001852617731323804001d05000081002c426c616b6554776f323536040004000082001853686132353604000400008300244b656363616b323536040004000084002c536861546872656532353604000400008500002104000003410000000800250400000342000000080029040000034300000008002d040000034400000008003104000003450000000800350400000346000000080039040000034700000008003d04000003480000000800410400000349000000080045040000034a000000080049040000034b00000008004d040000034c000000080051040000034d000000080055040000034e000000080059040000034f00000008005d040000035000000008006104000003510000000800650400000352000000080069040000035300000008006d040000035400000008007104000003550000000800750400000356000000080079040000035700000008007d04000003580000000800810400000359000000080085040000035a000000080089040000035b00000008008d040000035c000000080091040000035d000000080095040000035e000000080099040000035f00000008009d04000003600000000800a104000003610000000800a504000003620000000800a904000003630000000800ad04000003640000000800b104000003650000000800b504000003660000000800b904000003670000000800bd04000003680000000800c104000003690000000800c5040000036a0000000800c9040000036b0000000800cd040000036c0000000800d1040000036d0000000800d5040000036e0000000800d9040000036f0000000800dd04000003700000000800e104000003710000000800e504000003720000000800e904000003730000000800ed04000003740000000800f104000003750000000800f504000003760000000800f904000003770000000800fd04000003780000000800010500000379000000080005050000037a000000080009050000037b00000008000d050000037c000000080011050000037d000000080015050000037e000000080019050000037f00000008001d0500000380000000080021050000021d040025050c4870616c6c65745f61646d696e5f7574696c731870616c6c65741043616c6c0404540001c040737761705f617574686f72697469657304013c6e65775f617574686f726974696573a50101b4426f756e6465645665633c543a3a417574686f7269747949642c20543a3a4d6178417574686f7269746965733e00000ce85468652065787472696e736963207365747320746865206e657720617574686f72697469657320666f72204175726120636f6e73656e7375732ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e09015468652065787472696e7369632077696c6c2063616c6c2074686520417572612070616c6c657420746f206368616e67652074686520617574686f7269746965732e547375646f5f7365745f64656661756c745f74616b6504013064656661756c745f74616b659c010c75313600010cd05468652065787472696e7369632073657473207468652064656661756c742074616b6520666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652064656661756c742074616b652e587375646f5f7365745f74785f726174655f6c696d697404013474785f726174655f6c696d697418010c75363400020cf85468652065787472696e736963207365747320746865207472616e73616374696f6e2072617465206c696d697420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e3d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865207472616e73616374696f6e2072617465206c696d69742e6c7375646f5f7365745f73657276696e675f726174655f6c696d69740801186e65747569649c010c75313600014873657276696e675f726174655f6c696d697418010c75363400030cdc5468652065787472696e7369632073657473207468652073657276696e672072617465206c696d697420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e2d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652073657276696e672072617465206c696d69742e5c7375646f5f7365745f6d696e5f646966666963756c74790801186e65747569649c010c7531360001386d696e5f646966666963756c747918010c75363400040cdc5468652065787472696e736963207365747320746865206d696e696d756d20646966666963756c747920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e2d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d20646966666963756c74792e5c7375646f5f7365745f6d61785f646966666963756c74790801186e65747569649c010c7531360001386d61785f646966666963756c747918010c75363400050cdc5468652065787472696e736963207365747320746865206d6178696d756d20646966666963756c747920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e2d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d20646966666963756c74792e707375646f5f7365745f776569676874735f76657273696f6e5f6b65790801186e65747569649c010c75313600014c776569676874735f76657273696f6e5f6b657918010c75363400060ce05468652065787472696e73696320736574732074686520776569676874732076657273696f6e206b657920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e31015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520776569676874732076657273696f6e206b65792e7c7375646f5f7365745f776569676874735f7365745f726174655f6c696d69740801186e65747569649c010c753136000158776569676874735f7365745f726174655f6c696d697418010c75363400070cec5468652065787472696e7369632073657473207468652077656967687473207365742072617465206c696d697420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e3d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652077656967687473207365742072617465206c696d69742e707375646f5f7365745f61646a7573746d656e745f696e74657276616c0801186e65747569649c010c75313600014c61646a7573746d656e745f696e74657276616c9c010c75313600080ce05468652065787472696e7369632073657473207468652061646a7573746d656e7420696e74657276616c20666f722061207375626e65742e31014974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742c206e6f74206368616e676561626c6520627920746865207375626e6574206f776e65722e31015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652061646a7573746d656e7420696e74657276616c2e647375646f5f7365745f61646a7573746d656e745f616c7068610801186e65747569649c010c75313600014061646a7573746d656e745f616c70686118010c75363400090cd45468652065787472696e7369632073657473207468652061646a7573746d656e7420616c70686120666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e25015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652061646a7573746d656e7420616c7068612e647375646f5f7365745f6d61785f7765696768745f6c696d69740801186e65747569649c010c7531360001406d61785f7765696768745f6c696d69749c010c753136000c0cd05468652065787472696e7369632073657473207468652061646a7573746d656e74206265746120666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e21015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652061646a7573746d656e7420626574612e607375646f5f7365745f696d6d756e6974795f706572696f640801186e65747569649c010c75313600013c696d6d756e6974795f706572696f649c010c753136000d0cd05468652065787472696e73696320736574732074686520696d6d756e69747920706572696f6420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e21015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520696d6d756e69747920706572696f642e707375646f5f7365745f6d696e5f616c6c6f7765645f776569676874730801186e65747569649c010c75313600014c6d696e5f616c6c6f7765645f776569676874739c010c753136000e0cf05468652065787472696e736963207365747320746865206d696e696d756d20616c6c6f776564207765696768747320666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e41015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d20616c6c6f77656420776569676874732e647375646f5f7365745f6d61785f616c6c6f7765645f756964730801186e65747569649c010c7531360001406d61785f616c6c6f7765645f756964739c010c753136000f0ce45468652065787472696e736963207365747320746865206d6178696d756d20616c6c6f776564205549447320666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e69015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d20616c6c6f776564205549447320666f722061207375626e65742e387375646f5f7365745f6b617070610801186e65747569649c010c7531360001146b617070619c010c75313600100ca85468652065787472696e736963207365747320746865206b6170706120666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722ef85468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206b617070612e307375646f5f7365745f72686f0801186e65747569649c010c75313600010c72686f9c010c75313600110ca05468652065787472696e7369632073657473207468652072686f20666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722ef05468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652072686f2e607375646f5f7365745f61637469766974795f6375746f66660801186e65747569649c010c75313600013c61637469766974795f6375746f66669c010c75313600120cd05468652065787472696e736963207365747320746865206163746976697479206375746f666620666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e21015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206163746976697479206375746f66662e947375646f5f7365745f6e6574776f726b5f726567697374726174696f6e5f616c6c6f7765640801186e65747569649c010c753136000150726567697374726174696f6e5f616c6c6f776564240110626f6f6c00130c05015468652065787472696e736963207365747320746865206e6574776f726b20726567697374726174696f6e20616c6c6f77656420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e55015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206e6574776f726b20726567697374726174696f6e20616c6c6f7765642ea47375646f5f7365745f6e6574776f726b5f706f775f726567697374726174696f6e5f616c6c6f7765640801186e65747569649c010c753136000150726567697374726174696f6e5f616c6c6f776564240110626f6f6c00140c15015468652065787472696e736963207365747320746865206e6574776f726b20506f5720726567697374726174696f6e20616c6c6f77656420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e65015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206e6574776f726b20506f5720726567697374726174696f6e20616c6c6f7765642ea87375646f5f7365745f7461726765745f726567697374726174696f6e735f7065725f696e74657276616c0801186e65747569649c010c7531360001847461726765745f726567697374726174696f6e735f7065725f696e74657276616c9c010c75313600150c19015468652065787472696e7369632073657473207468652074617267657420726567697374726174696f6e732070657220696e74657276616c20666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e69015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652074617267657420726567697374726174696f6e732070657220696e74657276616c2e447375646f5f7365745f6d696e5f6275726e0801186e65747569649c010c7531360001206d696e5f6275726e18010c75363400160cc45468652065787472696e736963207365747320746865206d696e696d756d206275726e20666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d206275726e2e447375646f5f7365745f6d61785f6275726e0801186e65747569649c010c7531360001206d61785f6275726e18010c75363400170cc45468652065787472696e736963207365747320746865206d6178696d756d206275726e20666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d206275726e2e4c7375646f5f7365745f646966666963756c74790801186e65747569649c010c753136000128646966666963756c747918010c75363400180cbc5468652065787472696e73696320736574732074686520646966666963756c747920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e0d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520646966666963756c74792e7c7375646f5f7365745f6d61785f616c6c6f7765645f76616c696461746f72730801186e65747569649c010c7531360001586d61785f616c6c6f7765645f76616c696461746f72739c010c75313600190cfc5468652065787472696e736963207365747320746865206d6178696d756d20616c6c6f7765642076616c696461746f727320666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e4d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d20616c6c6f7765642076616c696461746f72732e747375646f5f7365745f626f6e64735f6d6f76696e675f617665726167650801186e65747569649c010c753136000150626f6e64735f6d6f76696e675f6176657261676518010c753634001a0ce45468652065787472696e73696320736574732074686520626f6e6473206d6f76696e67206176657261676520666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e35015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520626f6e6473206d6f76696e6720617665726167652e907375646f5f7365745f6d61785f726567697374726174696f6e735f7065725f626c6f636b0801186e65747569649c010c75313600016c6d61785f726567697374726174696f6e735f7065725f626c6f636b9c010c753136001b0c11015468652065787472696e736963207365747320746865206d6178696d756d20726567697374726174696f6e732070657220626c6f636b20666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e61015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d20726567697374726174696f6e732070657220626c6f636b2e647375646f5f7365745f7375626e65745f6f776e65725f6375740401407375626e65745f6f776e65725f6375749c010c753136001c0cd45468652065787472696e736963207365747320746865207375626e6574206f776e65722063757420666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e25015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865207375626e6574206f776e6572206375742e6c7375646f5f7365745f6e6574776f726b5f726174655f6c696d6974040128726174655f6c696d697418010c753634001d0ce85468652065787472696e736963207365747320746865206e6574776f726b2072617465206c696d697420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e2d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206e6574776f726b2072617465206c696d69742e387375646f5f7365745f74656d706f0801186e65747569649c010c75313600011474656d706f9c010c753136001e0ca85468652065787472696e7369632073657473207468652074656d706f20666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742ef85468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652074656d706f2e5c7375646f5f7365745f746f74616c5f69737375616e6365040138746f74616c5f69737375616e636518010c75363400210cd85468652065787472696e73696320736574732074686520746f74616c2069737375616e636520666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e45015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652069737375616e636520666f7220746865206e6574776f726b2e807375646f5f7365745f6e6574776f726b5f696d6d756e6974795f706572696f6404013c696d6d756e6974795f706572696f6418010c75363400230cdc5468652065787472696e73696320736574732074686520696d6d756e69747920706572696f6420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e61015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520696d6d756e69747920706572696f6420666f7220746865206e6574776f726b2e787375646f5f7365745f6e6574776f726b5f6d696e5f6c6f636b5f636f73740401246c6f636b5f636f737418010c75363400240cd45468652065787472696e736963207365747320746865206d696e206c6f636b20636f737420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e59015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e206c6f636b20636f737420666f7220746865206e6574776f726b2e547375646f5f7365745f7375626e65745f6c696d697404012c6d61785f7375626e6574739c010c75313600250cd05468652065787472696e736963207365747320746865207375626e6574206c696d697420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865207375626e6574206c696d69742e807375646f5f7365745f6c6f636b5f726564756374696f6e5f696e74657276616c040120696e74657276616c18010c75363400260cfc5468652065787472696e736963207365747320746865206c6f636b20726564756374696f6e20696e74657276616c20666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e41015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206c6f636b20726564756374696f6e20696e74657276616c2e547375646f5f7365745f72616f5f72656379636c65640801186e65747569649c010c75313600013072616f5f72656379636c656418010c75363400270cc45468652065787472696e7369632073657473207468652072656379636c65642052414f20666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652072656379636c65642052414f2e687375646f5f7365745f776569676874735f6d696e5f7374616b650401246d696e5f7374616b6518010c753634002a0ca45468652065787472696e7369632073657473207468652077656967687473206d696e207374616b652ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e29015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652077656967687473206d696e207374616b652e947375646f5f7365745f6e6f6d696e61746f725f6d696e5f72657175697265645f7374616b650401246d696e5f7374616b6518010c753634002b0cf45468652065787472696e736963207365747320746865206d696e696d756d207374616b6520726571756972656420666f72206e6f6d696e61746f72732ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e79015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d207374616b6520726571756972656420666f72206e6f6d696e61746f72732e907375646f5f7365745f74785f64656c65676174655f74616b655f726174655f6c696d697404013474785f726174655f6c696d697418010c753634002d0c05015468652065787472696e7369632073657473207468652072617465206c696d697420666f722064656c65676174652074616b65207472616e73616374696f6e732ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e89015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652072617465206c696d697420666f722064656c65676174652074616b65207472616e73616374696f6e732e687375646f5f7365745f6d696e5f64656c65676174655f74616b6504011074616b659c010c753136002e0cb45468652065787472696e736963207365747320746865206d696e696d756d2064656c65676174652074616b652ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e39015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d2064656c65676174652074616b652e8c7375646f5f7365745f7461726765745f7374616b65735f7065725f696e74657276616c0401687461726765745f7374616b65735f7065725f696e74657276616c18010c753634002f0cc45468652065787472696e73696320736574732074686520746172676574207374616b652070657220696e74657276616c2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e39015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746172676574207374616b652070657220696e74657276616c2e987375646f5f7365745f636f6d6d69745f72657665616c5f776569676874735f656e61626c65640801186e65747569649c010c75313600011c656e61626c6564240110626f6f6c00310c05015468652065787472696e73696320656e61626c65642f64697361626c657320636f6d6d69742f7265617665616c20666f72206120676976656e207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722ef85468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652076616c75652e747375646f5f7365745f6c69717569645f616c7068615f656e61626c65640801186e65747569649c010c75313600011c656e61626c6564240110626f6f6c003224d0456e61626c6573206f722064697361626c6573204c697175696420416c70686120666f72206120676976656e207375626e65742e00302320506172616d65746572734d012d20606f726967696e603a20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722ec42d20606e6574756964603a2054686520756e69717565206964656e74696669657220666f7220746865207375626e65742ef82d2060656e61626c6564603a204120626f6f6c65616e20666c616720746f20656e61626c65206f722064697361626c65204c697175696420416c7068612e00202320576569676874cd01546869732066756e6374696f6e20686173206120666978656420776569676874206f66203020616e6420697320636c617373696669656420617320616e206f7065726174696f6e616c207472616e73616374696f6e207468617420646f6573206e6f7420696e63757220616e7920666565732e547375646f5f7365745f616c7068615f76616c7565730c01186e65747569649c010c753136000124616c7068615f6c6f779c010c753136000128616c7068615f686967689c010c75313600330470536574732076616c75657320666f72206c697175696420616c706861787375646f5f7365745f686f746b65795f656d697373696f6e5f74656d706f040138656d697373696f6e5f74656d706f18010c7536340034387c536574732074686520686f746b657920656d697373696f6e2074656d706f2e006501546869732065787472696e73696320616c6c6f77732074686520726f6f74206163636f756e7420746f207365742074686520686f746b657920656d697373696f6e2074656d706f2c2077686963682064657465726d696e6573a101746865206e756d626572206f6620626c6f636b73206265666f7265206120686f746b657920647261696e7320616363756d756c6174656420656d697373696f6e73207468726f75676820746f206e6f6d696e61746f72207374616b696e67206163636f756e74732e002c2320417267756d656e747311012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e742ee42a2060656d697373696f6e5f74656d706f60202d20546865206e657720656d697373696f6e2074656d706f2076616c756520746f207365742e001c2320456d6974735d012a20604576656e743a3a486f746b6579456d697373696f6e54656d706f53657460202d205768656e2074686520686f746b657920656d697373696f6e2074656d706f206973207375636365737366756c6c79207365742e002023204572726f727315012a206044697370617463684572726f723a3a4261644f726967696e60202d20496620746865206f726967696e206973206e6f742074686520726f6f74206163636f756e742e687375646f5f7365745f6e6574776f726b5f6d61785f7374616b650801186e65747569649c010c7531360001246d61785f7374616b6518010c753634003564d85365747320746865206d6178696d756d207374616b6520616c6c6f77656420666f722061207370656369666963206e6574776f726b2e004d01546869732066756e6374696f6e20616c6c6f77732074686520726f6f74206163636f756e7420746f2073657420746865206d6178696d756d207374616b6520666f72206120676976656e206e6574776f726b2e05014974207570646174657320746865206e6574776f726b2773206d6178696d756d207374616b652076616c756520616e64206c6f677320746865206368616e67652e002c2320417267756d656e74730011012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e742ec82a20606e657475696460202d2054686520756e69717565206964656e746966696572206f6620746865206e6574776f726b2ecc2a20606d61785f7374616b6560202d20546865206e6577206d6178696d756d207374616b652076616c756520746f207365742e0024232052657475726e7300250152657475726e7320604f6b282829296020696620746865206f7065726174696f6e206973207375636365737366756c2c206f7220616e206572726f72206966206974206661696c732e002423204578616d706c6500001c23204e6f74657300dc2d20546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520726f6f74206163636f756e742ee02d2054686520606e6574756964602073686f756c6420636f72726573706f6e6420746f20616e206578697374696e67206e6574776f726b2e00182320544f444f009c7375646f5f7365745f636f6c646b65795f737761705f7363686564756c655f6475726174696f6e0401206475726174696f6e100144426c6f636b4e756d626572466f723c543e003638bc5365747320746865206475726174696f6e206f662074686520636f6c646b65792073776170207363686564756c652e006501546869732065787472696e73696320616c6c6f77732074686520726f6f74206163636f756e7420746f2073657420746865206475726174696f6e20666f722074686520636f6c646b65792073776170207363686564756c652e810154686520636f6c646b65792073776170207363686564756c652064657465726d696e657320686f77206c6f6e672069742074616b657320666f72206120636f6c646b65792073776170206f7065726174696f6e20746f20636f6d706c6574652e002c2320417267756d656e747311012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e742e4d012a20606475726174696f6e60202d20546865206e6577206475726174696f6e20666f722074686520636f6c646b65792073776170207363686564756c652c20696e206e756d626572206f6620626c6f636b732e002023204572726f7273d82a20604261644f726967696e60202d204966207468652063616c6c6572206973206e6f742074686520726f6f74206163636f756e742e00202320576569676874dc5765696768742069732068616e646c6564206279207468652060235b70616c6c65743a3a7765696768745d60206174747269627574652eac7375646f5f7365745f646973736f6c76655f6e6574776f726b5f7363686564756c655f6475726174696f6e0401206475726174696f6e100144426c6f636b4e756d626572466f723c543e003738cc5365747320746865206475726174696f6e206f662074686520646973736f6c7665206e6574776f726b207363686564756c652e007501546869732065787472696e73696320616c6c6f77732074686520726f6f74206163636f756e7420746f2073657420746865206475726174696f6e20666f722074686520646973736f6c7665206e6574776f726b207363686564756c652ead0154686520646973736f6c7665206e6574776f726b207363686564756c652064657465726d696e657320686f77206c6f6e672069742074616b657320666f722061206e6574776f726b20646973736f6c7574696f6e206f7065726174696f6e20746f20636f6d706c6574652e002c2320417267756d656e747311012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e742e5d012a20606475726174696f6e60202d20546865206e6577206475726174696f6e20666f722074686520646973736f6c7665206e6574776f726b207363686564756c652c20696e206e756d626572206f6620626c6f636b732e002023204572726f7273d82a20604261644f726967696e60202d204966207468652063616c6c6572206973206e6f742074686520726f6f74206163636f756e742e00202320576569676874dc5765696768742069732068616e646c6564206279207468652060235b70616c6c65743a3a7765696768745d60206174747269627574652e9c7375646f5f7365745f636f6d6d69745f72657665616c5f776569676874735f696e74657276616c0801186e65747569649c010c753136000120696e74657276616c18010c753634003940f4536574732074686520636f6d6d69742d72657665616c207765696768747320706572696f647320666f722061207370656369666963207375626e65742e001d02546869732065787472696e73696320616c6c6f777320746865207375626e6574206f776e6572206f7220726f6f74206163636f756e7420746f2073657420746865206475726174696f6e2028696e2065706f6368732920647572696e6720776869636820636f6d6d69747465642077656967687473206d7573742062652072657665616c65642ee10154686520636f6d6d69742d72657665616c206d656368616e69736d20656e7375726573207468617420757365727320636f6d6d6974207765696768747320696e20616476616e636520616e642072657665616c207468656d206f6e6c792077697468696e20612073706563696669656420706572696f642e002c2320417267756d656e747361012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d75737420626520746865207375626e6574206f776e6572206f722074686520726f6f74206163636f756e742e55012a20606e657475696460202d2054686520756e69717565206964656e746966696572206f6620746865207375626e657420666f722077686963682074686520706572696f647320617265206265696e67207365742e21012a2060706572696f647360202d20546865206e756d626572206f662065706f636873207468617420646566696e652074686520636f6d6d69742d72657665616c20706572696f642e002023204572726f72733d012a20604261644f726967696e60202d204966207468652063616c6c6572206973206e65697468657220746865207375626e6574206f776e6572206e6f722074686520726f6f74206163636f756e742e01012a20605375626e6574446f65734e6f74457869737460202d2049662074686520737065636966696564207375626e657420646f6573206e6f742065786973742e00202320576569676874dc5765696768742069732068616e646c6564206279207468652060235b70616c6c65743a3a7765696768745d60206174747269627574652e046501446973706174636861626c652066756e6374696f6e7320616c6c6f777320757365727320746f20696e7465726163742077697468207468652070616c6c657420616e6420696e766f6b65207374617465206368616e6765732e29050c4070616c6c65745f736166655f6d6f64651870616c6c65741043616c6c04045400012014656e7465720000181901456e74657220736166652d6d6f6465207065726d697373696f6e6c6573736c7920666f72205b60436f6e6669673a3a456e7465724475726174696f6e605d20626c6f636b732e0009015265736572766573205b60436f6e6669673a3a456e7465724465706f736974416d6f756e74605d2066726f6d207468652063616c6c65722773206163636f756e742eb4456d69747320616e205b604576656e743a3a456e7465726564605d206576656e74206f6e20737563636573732e0d014572726f72732077697468205b604572726f723a3a456e7465726564605d2069662074686520736166652d6d6f646520697320616c726561647920656e74657265642e15014572726f72732077697468205b604572726f723a3a4e6f74436f6e66696775726564605d20696620746865206465706f73697420616d6f756e7420697320604e6f6e65602e2c666f7263655f656e7465720001181901456e74657220736166652d6d6f646520627920666f72636520666f722061207065722d6f726967696e20636f6e66696775726564206e756d626572206f6620626c6f636b732e00b4456d69747320616e205b604576656e743a3a456e7465726564605d206576656e74206f6e20737563636573732e0d014572726f72732077697468205b604572726f723a3a456e7465726564605d2069662074686520736166652d6d6f646520697320616c726561647920656e74657265642e00f843616e206f6e6c792062652063616c6c656420627920746865205b60436f6e6669673a3a466f726365456e7465724f726967696e605d206f726967696e2e18657874656e6400022c3101457874656e642074686520736166652d6d6f6465207065726d697373696f6e6c6573736c7920666f72205b60436f6e6669673a3a457874656e644475726174696f6e605d20626c6f636b732e00e85468697320616363756d756c61746573206f6e20746f70206f66207468652063757272656e742072656d61696e696e67206475726174696f6e2e0d015265736572766573205b60436f6e6669673a3a457874656e644465706f736974416d6f756e74605d2066726f6d207468652063616c6c65722773206163636f756e742eb8456d69747320616e205b604576656e743a3a457874656e646564605d206576656e74206f6e20737563636573732ee84572726f72732077697468205b604572726f723a3a457869746564605d2069662074686520736166652d6d6f646520697320656e74657265642e15014572726f72732077697468205b604572726f723a3a4e6f74436f6e66696775726564605d20696620746865206465706f73697420616d6f756e7420697320604e6f6e65602e00450154686973206d61792062652063616c6c656420627920616e79207369676e6564206f726967696e2077697468205b60436f6e6669673a3a457874656e644465706f736974416d6f756e74605d2066726565350163757272656e637920746f20726573657276652e20546869732063616c6c2063616e2062652064697361626c656420666f7220616c6c206f726967696e7320627920636f6e6669677572696e67a85b60436f6e6669673a3a457874656e644465706f736974416d6f756e74605d20746f20604e6f6e65602e30666f7263655f657874656e640003182d01457874656e642074686520736166652d6d6f646520627920666f72636520666f722061207065722d6f726967696e20636f6e66696775726564206e756d626572206f6620626c6f636b732e00b8456d69747320616e205b604576656e743a3a457874656e646564605d206576656e74206f6e20737563636573732eec4572726f72732077697468205b604572726f723a3a457869746564605d2069662074686520736166652d6d6f646520697320696e6163746976652e00fc43616e206f6e6c792062652063616c6c656420627920746865205b60436f6e6669673a3a466f726365457874656e644f726967696e605d206f726967696e2e28666f7263655f65786974000424604578697420736166652d6d6f646520627920666f7263652e001d01456d69747320616e205b604576656e743a3a457869746564605d2077697468205b6045786974526561736f6e3a3a466f726365605d206576656e74206f6e20737563636573732eec4572726f72732077697468205b604572726f723a3a457869746564605d2069662074686520736166652d6d6f646520697320696e6163746976652e0055014e6f74653a2060736166652d6d6f6465602077696c6c206265206175746f6d61746963616c6c79206465616374697661746564206279205b6050616c6c65743a3a6f6e5f696e697469616c697a65605d20686f6f6b250161667465722074686520626c6f636b206865696768742069732067726561746572207468616e20746865205b60456e7465726564556e74696c605d2073746f72616765206974656d2e5501456d69747320616e205b604576656e743a3a457869746564605d2077697468205b6045786974526561736f6e3a3a54696d656f7574605d206576656e74207768656e20646561637469766174656420696e2074686514686f6f6b2e4c666f7263655f736c6173685f6465706f73697408011c6163636f756e74000130543a3a4163636f756e744964000114626c6f636b100144426c6f636b4e756d626572466f723c543e0005243101536c6173682061206465706f73697420666f7220616e206163636f756e74207468617420656e7465726564206f7220657874656e64656420736166652d6d6f6465206174206120676976656e44686973746f726963616c20626c6f636b2e00cc546869732063616e206f6e6c792062652063616c6c6564207768696c6520736166652d6d6f646520697320656e74657265642e00cc456d6974732061205b604576656e743a3a4465706f736974536c6173686564605d206576656e74206f6e20737563636573732edc4572726f72732077697468205b604572726f723a3a456e7465726564605d20696620736166652d6d6f646520697320656e74657265642e00010143616e206f6e6c792062652063616c6c656420627920746865205b60436f6e6669673a3a466f7263654465706f7369744f726967696e605d206f726967696e2e3c72656c656173655f6465706f73697408011c6163636f756e74000130543a3a4163636f756e744964000114626c6f636b100144426c6f636b4e756d626572466f723c543e00063035015065726d697373696f6e6c6573736c792072656c656173652061206465706f73697420666f7220616e206163636f756e74207468617420656e746572656420736166652d6d6f646520617420615c676976656e20686973746f726963616c20626c6f636b2e0049015468652063616c6c2063616e20626520636f6d706c6574656c792064697361626c65642062792073657474696e67205b60436f6e6669673a3a52656c6561736544656c6179605d20746f20604e6f6e65602ef8546869732063616e6e6f742062652063616c6c6564207768696c6520736166652d6d6f646520697320656e746572656420616e64206e6f7420756e74696c21015b60436f6e6669673a3a52656c6561736544656c6179605d20626c6f636b732068617665207061737365642073696e636520736166652d6d6f64652077617320656e74657265642e00d0456d6974732061205b604576656e743a3a4465706f73697452656c6561736564605d206576656e74206f6e20737563636573732eec4572726f72732077697468205b604572726f723a3a456e7465726564605d2069662074686520736166652d6d6f646520697320656e74657265642e49014572726f72732077697468205b604572726f723a3a43616e6e6f7452656c65617365596574605d206966205b60436f6e6669673a3a52656c6561736544656c6179605d20626c6f636b2068617665206e6f7461017061737365642073696e636520736166652d6d6f64652077617320656e74657265642e204572726f72732077697468205b604572726f723a3a4e6f4465706f736974605d2069662074686520706179656520686173206e6fa472657365727665642063757272656e63792061742074686520626c6f636b207370656369666965642e54666f7263655f72656c656173655f6465706f73697408011c6163636f756e74000130543a3a4163636f756e744964000114626c6f636b100144426c6f636b4e756d626572466f723c543e00072c2d01466f72636520746f2072656c656173652061206465706f73697420666f7220616e206163636f756e74207468617420656e746572656420736166652d6d6f6465206174206120676976656e44686973746f726963616c20626c6f636b2e00d0546869732063616e2062652063616c6c6564207768696c6520736166652d6d6f6465206973207374696c6c20656e74657265642e00d0456d6974732061205b604576656e743a3a4465706f73697452656c6561736564605d206576656e74206f6e20737563636573732edc4572726f72732077697468205b604572726f723a3a456e7465726564605d20696620736166652d6d6f646520697320656e74657265642e35014572726f72732077697468205b604572726f723a3a4e6f4465706f736974605d2069662074686520706179656520686173206e6f2072657365727665642063757272656e6379206174207468654073706563696669656420626c6f636b2e00010143616e206f6e6c792062652063616c6c656420627920746865205b60436f6e6669673a3a466f7263654465706f7369744f726967696e605d206f726967696e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e2d050c3c70616c6c65745f657468657265756d1870616c6c65741043616c6c040454000104207472616e7361637404012c7472616e73616374696f6e3105012c5472616e73616374696f6e000004845472616e7361637420616e20457468657265756d207472616e73616374696f6e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e31050c20657468657265756d2c7472616e73616374696f6e345472616e73616374696f6e563200010c184c65676163790400350501444c65676163795472616e73616374696f6e0000001c45495032393330040045050148454950323933305472616e73616374696f6e0001001c45495031353539040051050148454950313535395472616e73616374696f6e0002000035050c20657468657265756d2c7472616e73616374696f6e444c65676163795472616e73616374696f6e00001c01146e6f6e636539010110553235360001246761735f707269636539010110553235360001246761735f6c696d69743901011055323536000118616374696f6e390501445472616e73616374696f6e416374696f6e00011476616c75653901011055323536000114696e70757438011442797465730001247369676e61747572653d0501505472616e73616374696f6e5369676e6174757265000039050c20657468657265756d2c7472616e73616374696f6e445472616e73616374696f6e416374696f6e0001081043616c6c0400050101104831363000000018437265617465000100003d050c20657468657265756d2c7472616e73616374696f6e505472616e73616374696f6e5369676e617475726500000c010476410501545472616e73616374696f6e5265636f76657279496400010472340110483235360001047334011048323536000041050c20657468657265756d2c7472616e73616374696f6e545472616e73616374696f6e5265636f7665727949640000040018010c753634000045050c20657468657265756d2c7472616e73616374696f6e48454950323933305472616e73616374696f6e00002c0120636861696e5f696418010c7536340001146e6f6e636539010110553235360001246761735f707269636539010110553235360001246761735f6c696d69743901011055323536000118616374696f6e390501445472616e73616374696f6e416374696f6e00011476616c75653901011055323536000114696e707574380114427974657300012c6163636573735f6c697374490501284163636573734c6973740001306f64645f795f706172697479240110626f6f6c00010472340110483235360001047334011048323536000049050000024d05004d050c20657468657265756d2c7472616e73616374696f6e384163636573734c6973744974656d000008011c616464726573730501011c4164647265737300013073746f726167655f6b657973b401245665633c483235363e000051050c20657468657265756d2c7472616e73616374696f6e48454950313535395472616e73616374696f6e0000300120636861696e5f696418010c7536340001146e6f6e636539010110553235360001606d61785f7072696f726974795f6665655f7065725f676173390101105532353600013c6d61785f6665655f7065725f67617339010110553235360001246761735f6c696d69743901011055323536000118616374696f6e390501445472616e73616374696f6e416374696f6e00011476616c75653901011055323536000114696e707574380114427974657300012c6163636573735f6c697374490501284163636573734c6973740001306f64645f795f706172697479240110626f6f6c00010472340110483235360001047334011048323536000055050c2870616c6c65745f65766d1870616c6c65741043616c6c04045400011420776974686472617708011c61646472657373050101104831363000011476616c756518013042616c616e63654f663c543e000004e057697468647261772062616c616e63652066726f6d2045564d20696e746f2063757272656e63792f62616c616e6365732070616c6c65742e1063616c6c240118736f7572636505010110483136300001187461726765740501011048313630000114696e70757438011c5665633c75383e00011476616c756539010110553235360001246761735f6c696d697418010c75363400013c6d61785f6665655f7065725f67617339010110553235360001606d61785f7072696f726974795f6665655f7065725f676173590501304f7074696f6e3c553235363e0001146e6f6e6365590501304f7074696f6e3c553235363e00012c6163636573735f6c6973745d0501585665633c28483136302c205665633c483235363e293e0001045d01497373756520616e2045564d2063616c6c206f7065726174696f6e2e20546869732069732073696d696c617220746f2061206d6573736167652063616c6c207472616e73616374696f6e20696e20457468657265756d2e18637265617465200118736f757263650501011048313630000110696e697438011c5665633c75383e00011476616c756539010110553235360001246761735f6c696d697418010c75363400013c6d61785f6665655f7065725f67617339010110553235360001606d61785f7072696f726974795f6665655f7065725f676173590501304f7074696f6e3c553235363e0001146e6f6e6365590501304f7074696f6e3c553235363e00012c6163636573735f6c6973745d0501585665633c28483136302c205665633c483235363e293e0002085101497373756520616e2045564d20637265617465206f7065726174696f6e2e20546869732069732073696d696c617220746f206120636f6e7472616374206372656174696f6e207472616e73616374696f6e20696e24457468657265756d2e1c63726561746532240118736f757263650501011048313630000110696e697438011c5665633c75383e00011073616c743401104832353600011476616c756539010110553235360001246761735f6c696d697418010c75363400013c6d61785f6665655f7065725f67617339010110553235360001606d61785f7072696f726974795f6665655f7065725f676173590501304f7074696f6e3c553235363e0001146e6f6e6365590501304f7074696f6e3c553235363e00012c6163636573735f6c6973745d0501585665633c28483136302c205665633c483235363e293e0003047c497373756520616e2045564d2063726561746532206f7065726174696f6e2e347365745f77686974656c69737404010c6e6577650501245665633c483136303e000400040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e590504184f7074696f6e0404540139010108104e6f6e6500000010536f6d650400390100000100005d050000026105006105000004080501b400650500000205010069050c4870616c6c65745f64796e616d69635f6665651870616c6c65741043616c6c040454000104646e6f74655f6d696e5f6761735f70726963655f7461726765740401187461726765743901011055323536000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d050c3c70616c6c65745f626173655f6665651870616c6c65741043616c6c040454000108507365745f626173655f6665655f7065725f67617304010c6665653901011055323536000000387365745f656c6173746963697479040128656c61737469636974794101011c5065726d696c6c000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e710504184f7074696f6e04045401a5020108104e6f6e6500000010536f6d650400a502000001000075050c4070616c6c65745f73756274656e736f721870616c6c6574144572726f7204045400017101585375624e6574776f726b446f65734e6f74457869737400000468546865207375626e657420646f6573206e6f742065786973742e5c526f6f744e6574776f726b446f65734e6f7445786973740001048054686520726f6f74206e6574776f726b20646f6573206e6f742065786973742e34496e76616c69644970547970650002043901546865207573657220697320747279696e6720746f20736572766520616e2061786f6e207768696368206973206e6f74206f662074797065203420284950763429206f722036202849507636292e40496e76616c6964497041646472657373000304d8416e20696e76616c696420495020616464726573732069732070617373656420746f207468652073657276652066756e6374696f6e2e2c496e76616c6964506f7274000404c0416e20696e76616c696420706f72742069732070617373656420746f207468652073657276652066756e6374696f6e2e6c486f744b65794e6f7452656769737465726564496e5375624e65740005049854686520686f746b6579206973206e6f74207265676973746572656420696e207375626e657458486f744b65794163636f756e744e6f744578697374730006046854686520686f746b657920646f6573206e6f742065786973747370486f744b65794e6f7452656769737465726564496e4e6574776f726b000704ac54686520686f746b6579206973206e6f74207265676973746572656420696e20616e79207375626e65742e504e6f6e4173736f636961746564436f6c644b6579000804ad015265717565737420746f207374616b652c20756e7374616b65206f7220737562736372696265206973206d616465206279206120636f6c646b65792074686174206973206e6f74206173736f63696174656420776974682074686520686f746b6579206163636f756e742e98486f744b65794e6f7444656c6567617465416e645369676e65724e6f744f776e486f744b65790009042d0154686520686f746b6579206973206e6f7420612064656c656761746520616e6420746865207369676e6572206973206e6f7420746865206f776e6572206f662074686520686f746b65792e545374616b65546f576974686472617749735a65726f000a04845374616b6520616d6f756e7420746f207769746864726177206973207a65726f2e604e6f74456e6f7567685374616b65546f5769746864726177000b04bd015468652063616c6c65722069732072657175657374696e672072656d6f76696e67206d6f7265207374616b65207468616e2074686572652065786973747320696e20746865207374616b696e67206163636f756e742e205365653a20225b72656d6f76655f7374616b6528295d222e684e6f74456e6f7567685374616b65546f53657457656967687473000c041d025468652063616c6c65722069732072657175657374696e6720746f20736574207765696768747320627574207468652063616c6c657220686173206c657373207468616e206d696e696d756d207374616b6520726571756972656420746f20736574207765696768747320286c657373207468616e20576569676874734d696e5374616b65292e5c4e6f74456e6f75676842616c616e6365546f5374616b65000d04a5015468652063616c6c65722069732072657175657374696e6720616464696e67206d6f7265207374616b65207468616e2074686572652065786973747320696e2074686520636f6c646b6579206163636f756e742e205365653a20225b6164645f7374616b6528295d225842616c616e63655769746864726177616c4572726f72000e04f1015468652063616c6c657220697320747279696e6720746f20616464207374616b652c2062757420666f7220736f6d6520726561736f6e207468652072657175657374656420616d6f756e7420636f756c64206e6f742062652077697468647261776e2066726f6d2074686520636f6c646b6579206163636f756e742e645a65726f42616c616e6365416674657257697468647261776e000f047501556e7375636365737366756c6c792077697468647261772c2062616c616e636520636f756c64206265207a65726f202863616e206e6f74206d616b65206163636f756e7420657869737429206166746572207769746864726177616c2e5c4e6575726f6e4e6f56616c696461746f725065726d697400100455015468652063616c6c657220697320617474656d7074696e6720746f20736574206e6f6e2d73656c66207765696768747320776974686f7574206265696e672061207065726d69747465642076616c696461746f722e545765696768745665634e6f74457175616c53697a6500110485015468652063616c6c657220697320617474656d7074696e6720746f207365742074686520776569676874206b65797320616e642076616c7565732062757420746865736520766563746f7273206861766520646966666572656e742073697a652e344475706c69636174655569647300120445015468652063616c6c657220697320617474656d7074696e6720746f2073657420776569676874732077697468206475706c6963617465205549447320696e2074686520776569676874206d61747269782e5c556964566563436f6e7461696e496e76616c69644f6e6500130481015468652063616c6c657220697320617474656d7074696e6720746f207365742077656967687420746f206174206c65617374206f6e6520554944207468617420646f6573206e6f7420657869737420696e20746865206d65746167726170682e505765696768745665634c656e67746849734c6f77001404610154686520646973706174636820697320617474656d7074696e6720746f207365742077656967687473206f6e20636861696e207769746820666577657220656c656d656e7473207468616e2061726520616c6c6f7765642e74546f6f4d616e79526567697374726174696f6e7354686973426c6f636b00150401024e756d626572206f6620726567697374726174696f6e7320696e207468697320626c6f636b20657863656564732074686520616c6c6f776564206e756d6265722028692e652e2c206578636565647320746865207375626e6574206879706572706172616d6574657220226d61785f726567735f7065725f626c6f636b22292e7c486f744b6579416c726561647952656769737465726564496e5375624e657400160455015468652063616c6c65722069732072657175657374696e67207265676973746572696e672061206e6575726f6e20776869636820616c72656164792065786973747320696e2074686520616374697665207365742e584e6577486f744b6579497353616d65576974684f6c6400170494546865206e657720686f746b6579206973207468652073616d65206173206f6c64206f6e6540496e76616c6964576f726b426c6f636b001804e454686520737570706c69656420506f57206861736820626c6f636b20697320696e2074686520667574757265206f72206e656761746976652e44496e76616c6964446966666963756c7479001904050154686520737570706c69656420506f57206861736820626c6f636b20646f6573206e6f74206d65657420746865206e6574776f726b20646966666963756c74792e2c496e76616c69645365616c001a04f054686520737570706c69656420506f572068617368207365616c20646f6573206e6f74206d617463682074686520737570706c69656420776f726b2e444d61785765696768744578636565646564001b042d0254686520646973706174636820697320617474656d7074696e6720746f207365742077656967687473206f6e20636861696e2077697468207765696768742076616c756520657863656564696e6720746865204d61785765696768744c696d697420286d61785f7765696768745f6c696d6974207375626e6574206879706572706172616d65746572292e54486f744b6579416c726561647944656c6567617465001c04510154686520686f746b657920697320617474656d7074696e6720746f206265636f6d6520612064656c6567617465207768656e2074686520686f746b657920697320616c726561647920612064656c65676174652e5453657474696e6757656967687473546f6f46617374001d04e441207472616e736163746f72206578636565646564207468652072617465206c696d697420666f722073657474696e6720776569676874732e64496e636f727265637457656967687456657273696f6e4b6579001e046101412076616c696461746f7220697320617474656d7074696e6720746f2073657420776569676874732066726f6d20612076616c696461746f72207769746820696e636f7272656374207765696768742076657273696f6e2e6053657276696e67526174654c696d69744578636565646564001f043901416e2061786f6e206f722070726f6d6574686575732073657276696e67206578636565646564207468652072617465206c696d697420666f7220612072656769737465726564206e6575726f6e2e70556964734c656e67746845786365656455696473496e5375624e657400200411015468652063616c6c657220697320617474656d7074696e6720746f2073657420776569676874732077697468206d6f72652055494473207468616e20616c6c6f7765642e684e6574776f726b5478526174654c696d69744578636565646564002104050141207472616e736163746f72206578636565646564207468652072617465206c696d697420666f7220616464206e6574776f726b207472616e73616374696f6e2e6c44656c65676174655478526174654c696d69744578636565646564002204f841207472616e736163746f72206578636565646564207468652072617465206c696d697420666f722064656c6567617465207472616e73616374696f6e2e70486f744b65795365745478526174654c696d69744578636565646564002304110141207472616e736163746f72206578636565646564207468652072617465206c696d697420666f722073657474696e67206f72207377617070696e6720686f746b65792e585374616b65526174654c696d69744578636565646564002404c441207472616e736163746f72206578636565646564207468652072617465206c696d697420666f72207374616b696e672e60556e7374616b65526174654c696d69744578636565646564002504cc41207472616e736163746f72206578636565646564207468652072617465206c696d697420666f7220756e7374616b696e672e685375624e6574526567697374726174696f6e44697361626c656400260464526567697374726174696f6e2069732064697361626c65642e80546f6f4d616e79526567697374726174696f6e7354686973496e74657276616c0027044101546865206e756d626572206f6620726567697374726174696f6e20617474656d7074732065786365656465642074686520616c6c6f776564206e756d62657220696e2074686520696e74657276616c2e7c5472616e736163746f724163636f756e7453686f756c644265486f744b6579002804a054686520686f746b657920697320726571756972656420746f20626520746865206f726967696e2e3c4e6f7453656e6174654d656d62657200290409014120686f746b657920697320617474656d7074696e6720746f20646f20736f6d657468696e67206f6e6c792073656e617465206d656d626572732063616e20646f2e3846617563657444697361626c6564002a044c4661756365742069732064697361626c65642e384e6f745375626e65744f776e6572002b044c4e6f742061207375626e6574206f776e65722e90526567697374726174696f6e4e6f745065726d69747465644f6e526f6f745375626e6574002c04b84f7065726174696f6e206973206e6f74207065726d6974746564206f6e2074686520726f6f74207375626e65742e485374616b65546f6f4c6f77466f72526f6f74002d0415014120686f746b6579207769746820746f6f206c6974746c65207374616b6520697320617474656d7074696e6720746f206a6f696e2074686520726f6f74207375626e65742e54416c6c4e6574776f726b73496e496d6d756e697479002e049c416c6c207375626e6574732061726520696e2074686520696d6d756e69747920706572696f642e7c4e6f74456e6f75676842616c616e6365546f50617953776170486f744b6579002f04a84e6f7420656e6f7567682062616c616e636520746f20706179207377617070696e6720686f746b65792e344e6f74526f6f745375626e6574003004dc4e657475696420646f6573206e6f74206d6174636820666f722073657474696e6720726f6f74206e6574776f726b20776569676874732e6c43616e4e6f74536574526f6f744e6574776f726b57656967687473003104a443616e206e6f7420736574207765696768747320666f722074686520726f6f74206e6574776f726b2e4c4e6f4e6575726f6e4964417661696c61626c65003204684e6f206e6575726f6e20494420697320617661696c61626c652e744e6f6d5374616b6542656c6f774d696e696d756d5468726573686f6c640033040d015374616b6520616d6f756e742062656c6f7720746865206d696e696d756d207468726573686f6c6420666f72206e6f6d696e61746f722076616c69646174696f6e732e4844656c656761746554616b65546f6f4c6f770034046444656c65676174652074616b6520697320746f6f206c6f772e4c44656c656761746554616b65546f6f486967680035046844656c65676174652074616b6520697320746f6f20686967682e504e6f57656967687473436f6d6d6974466f756e6400360485014e6f20636f6d6d697420666f756e6420666f72207468652070726f766964656420686f746b65792b6e657475696420636f6d62696e6174696f6e207768656e20617474656d7074696e6720746f2072657665616c2074686520776569676874732e7c496e76616c696452657665616c436f6d6d6974486173684e6f744d61746368003704d4436f6d6d6974746564206861736820646f6573206e6f7420657175616c20746865206861736865642072657665616c20646174612e4c436f6d6d697452657665616c456e61626c6564003804f0417474656d7074696e6720746f2063616c6c207365745f77656967687473207768656e20636f6d6d69742f72657665616c20697320656e61626c656450436f6d6d697452657665616c44697361626c6564003904c8417474656d7470696e6720746f20636f6d6d69742f72657665616c2077656967687473207768656e2064697361626c65642e48436f756c644e6f744a6f696e53656e617465003a04704e6f742061626c6520746f206a6f696e207468652073656e6174652e4c4c6971756964416c70686144697361626c6564003b04bc417474656d7074696e6720746f2073657420616c70686120686967682f6c6f77207768696c652064697361626c65643c416c70686148696768546f6f4c6f77003c049c416c706861206869676820697320746f6f206c6f773a20616c7068615f68696768203e20302e3848416c7068614c6f774f75744f6652616e6765003d04ec416c706861206c6f77206973206f7574206f662072616e67653a20616c7068615f6c6f77203e203020262620616c7068615f6c6f77203c20302e3860436f6c644b6579416c72656164794173736f636961746564003e049054686520636f6c646b65792068617320616c7265616479206265656e207377617070656478436f6c644b6579537761705478526174654c696d69744578636565646564003f04c054686520636f6c646b65792073776170207472616e73616374696f6e2072617465206c696d69742065786365656465645c4e6577436f6c644b6579497353616d65576974684f6c64004004b8546865206e657720636f6c646b6579206973207468652073616d6520617320746865206f6c6420636f6c646b65793c4e6f744578697374436f6c646b65790041046854686520636f6c646b657920646f6573206e6f74206578697374804e6f74456e6f75676842616c616e6365546f50617953776170436f6c644b6579004204d454686520636f6c646b65792062616c616e6365206973206e6f7420656e6f75676820746f2070617920666f722074686520737761704c4e6f42616c616e6365546f5472616e73666572004304584e6f2062616c616e636520746f207472616e736665722c53616d65436f6c646b65790044043053616d6520636f6c646b657958436f6c646b65794973496e4172626974726174696f6e0045047454686520636f6c646b657920697320696e206172626974726174696f6e404475706c6963617465436f6c646b6579004604cc546865206e657720636f6c646b657920697320616c7265616479207265676973746572656420666f722074686520647261696e40436f6c646b6579537761704572726f720047047c4572726f72207468726f776e206f6e206120636f6c646b657920737761702e9c496e73756666696369656e7442616c616e6365546f506572666f726d436f6c646b657953776170004804b4496e73756666696369656e742042616c616e636520746f205363686564756c6520636f6c646b65792073776170744d6178436f6c646b657944657374696e6174696f6e7352656163686564004904ec546865206d6178696d756d206e756d626572206f6620636f6c646b65792064657374696e6174696f6e7320686173206265656e207265616368656430496e76616c69644368696c64004a04f4417474656d7074696e6720746f2073657420616e20696e76616c6964206368696c6420666f72206120686f746b6579206f6e2061206e6574776f726b2e384475706c69636174654368696c64004b04984475706c6963617465206368696c64207768656e2073657474696e67206368696c6472656e2e4850726f706f7274696f6e4f766572666c6f77004c04a850726f706f7274696f6e206f766572666c6f77207768656e2073657474696e67206368696c6472656e2e3c546f6f4d616e794368696c6472656e004d0460546f6f206d616e79206368696c6472656e204d415820352e4c5478526174654c696d69744578636565646564004e04a044656661756c74207472616e73616374696f6e2072617465206c696d69742065786365656465642e7453776170436f6c646b65794f6e6c7943616c6c61626c654279526f6f74004f048c5377617020636f6c646b6579206f6e6c792063616c6c61626c6520627920726f6f742e5053776170416c72656164795363686564756c65640050045c5377617020616c7265616479207363686564756c65642e404661696c6564546f5363686564756c65005104586661696c656420746f207377617020636f6c646b6579484e6577436f6c644b65794973486f746b6579005204544e657720636f6c646b657920697320686f746b6579644e6577436f6c646b65794973496e4172626974726174696f6e005304744e657720636f6c646b657920697320696e206172626974726174696f6e4c496e76616c69644368696c646b657954616b65005404644368696c646b65792074616b6520697320696e76616c69642e7c54784368696c646b657954616b65526174654c696d69744578636565646564005504884368696c646b65792074616b652072617465206c696d69742065786365656465642e3c496e76616c69644964656e7469747900560444496e76616c6964206964656e746974792e60546f6f4d616e79556e72657665616c6564436f6d6d697473005704704d6178696d756d20636f6d6d6974206c696d697420726561636865644c45787069726564576569676874436f6d6d6974005804b4417474656d7074656420746f2072657665616c207765696768747320746861742061726520657870697265642e3852657665616c546f6f4561726c7900590498417474656d7074656420746f2072657665616c207765696768747320746f6f206561726c792e4c496e7075744c656e67746873556e657175616c005a041d01417474656d7074656420746f2062617463682072657665616c20776569676874732077697468206d69736d61746368656420766563746f7220696e707574206c656e676874732e60436f6d6d697474696e6757656967687473546f6f46617374005b04e441207472616e736163746f72206578636565646564207468652072617465206c696d697420666f722073657474696e6720776569676874732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e79050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400b401185665633c543e00007d05084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e74000110617965734d0201385665633c4163636f756e7449643e0001106e6179734d0201385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d626572000081050c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d626572000004944163636f756e74206973206e6f742061206d656d626572206f6620636f6c6c656374697665444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765644450726f706f73616c4e6f744578697374730002044c50726f706f73616c206d75737420657869737464496e6465784d69736d6174636850726f706f73616c4861736800030488496e646578206d69736d617463686564207468652070726f706f73616c2068617368344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f7265645c546f6f4561726c79546f436c6f736550726f706f73616c0005043d015468652063616c6c20746f20636c6f7365207468652070726f706f73616c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e6758546f6f4d616e7941637469766550726f706f73616c73000604fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732ea050726f706f73616c5765696768744c6573735468616e446973706174636843616c6c576569676874000704d054686520676976656e207765696768742d626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772ea450726f706f73616c4c656e677468426f756e644c6573735468616e50726f706f73616c4c656e677468000804d054686520676976656e206c656e6774682d626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772ea44475726174696f6e4c6f7765725468616e436f6e666967757265644d6f74696f6e4475726174696f6e000904dc54686520676976656e206d6f74696f6e206475726174696f6e20666f72207468652070726f706f73616c2077617320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e85050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401000453000004004d0201185665633c543e000089050c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8d050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401000453000004004d0201185665633c543e000091050c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e95050c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e99050c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742e9d0500000408000400a105083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ed0015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c73a505018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e0000a5050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401000453000004004d0201185665633c543e0000a9050c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ead05083c70616c6c65745f707265696d616765404f6c645265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f736974b1050150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f736974b50501704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656ec101012c4f7074696f6e3c7533323e00010000b10500000408001800b50504184f7074696f6e04045401b1050108104e6f6e6500000010536f6d650400b1050000010000b905083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e7449640100185469636b657401bd0501082c556e7265717565737465640801187469636b6574c105014c284163636f756e7449642c205469636b65742900010c6c656e10010c753332000000245265717565737465640c01306d617962655f7469636b6574c505016c4f7074696f6e3c284163636f756e7449642c205469636b6574293e000114636f756e7410010c7533320001246d617962655f6c656ec101012c4f7074696f6e3c7533323e00010000bd0514346672616d655f737570706f72741874726169747318746f6b656e732066756e6769626c6544486f6c64436f6e73696465726174696f6e1404410004460004520004440008467000000400180128463a3a42616c616e63650000c1050000040800bd0500c50504184f7074696f6e04045401c1050108104e6f6e6500000010536f6d650400c1050000010000c90500000408341000cd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000d1050c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400012018546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e1c546f6f4d616e7900060455014d6f7265207468616e20604d41585f484153485f555047524144455f42554c4b5f434f554e54602068617368657320776572652072657175657374656420746f206265207570677261646564206174206f6e63652e18546f6f466577000704e4546f6f206665772068617368657320776572652072657175657374656420746f2062652075706772616465642028692e652e207a65726f292e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ed5050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401d905045300000400ed0501185665633c543e0000d90504184f7074696f6e04045401dd050108104e6f6e6500000010536f6d650400dd050000010000dd05084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c01e1052c426c6f636b4e756d62657201103450616c6c6574734f726967696e01d502244163636f756e7449640100001401206d617962655f6964e001304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6ce105011043616c6c0001386d617962655f706572696f646963f90201944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696ed502013450616c6c6574734f726967696e0000e10510346672616d655f737570706f72741874726169747324707265696d616765731c426f756e64656408045401bd02044801e505010c184c656761637904011068617368340124483a3a4f757470757400000018496e6c696e650400e9050134426f756e646564496e6c696e65000100184c6f6f6b757008011068617368340124483a3a4f757470757400010c6c656e10010c75333200020000e5050c2873705f72756e74696d65187472616974732c426c616b6554776f32353600000000e9050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000ed05000002d90500f105084070616c6c65745f7363686564756c65722c5265747279436f6e6669670418506572696f640110000c0134746f74616c5f72657472696573080108753800012472656d61696e696e670801087538000118706572696f64100118506572696f640000f5050c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ef90500000408fd051800fd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454010106045300000400050601185665633c543e00000106083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501e82c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065e8012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000005060000020106000906000004080d0618000d060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011106045300000400150601185665633c543e00001106083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801342c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683401104861736800011868656967687410012c426c6f636b4e756d6265720000150600000211060019060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1d060c3c70616c6c65745f726567697374727914747970657330526567697374726174696f6e081c42616c616e636501184c4d61784164646974696f6e616c4669656c6473000008011c6465706f73697418011c42616c616e6365000110696e666f090301844964656e74697479496e666f3c4d61784164646974696f6e616c4669656c64733e000021060c3c70616c6c65745f72656769737472791870616c6c6574144572726f7204045400010c3843616e6e6f74526567697374657200000435014163636f756e7420617474656d7074656420746f20726567697374657220616e206964656e746974792062757420646f6573206e6f74206d6565742074686520726571756972656d656e74732e6c546f6f4d616e794669656c6473496e4964656e74697479496e666f000104ec4163636f756e742070617373656420746f6f206d616e79206164646974696f6e616c206669656c647320746f207468656972206964656e74697479344e6f7452656769737465726564000204a84163636f756e7420646f65736e2774206861766520612072656769737465726564206964656e74697479048054686520604572726f726020656e756d206f6620746869732070616c6c65742e25060c4870616c6c65745f636f6d6d69746d656e747314747970657330526567697374726174696f6e0c1c42616c616e63650118244d61784669656c6473002c426c6f636b4e756d6265720110000c011c6465706f73697418011c42616c616e6365000114626c6f636b10012c426c6f636b4e756d626572000110696e666f15040164436f6d6d69746d656e74496e666f3c4d61784669656c64733e000029060c4870616c6c65745f636f6d6d69746d656e74731870616c6c6574144572726f7204045400010c74546f6f4d616e794669656c6473496e436f6d6d69746d656e74496e666f000004f44163636f756e742070617373656420746f6f206d616e79206164646974696f6e616c206669656c647320746f20746865697220636f6d6d69746d656e745c4163636f756e744e6f74416c6c6f776564436f6d6d6974000104d44163636f756e74206973206e6f7420616c6c6f7720746f206d616b6520636f6d6d69746d656e747320746f2074686520636861696e78436f6d6d69746d656e74536574526174654c696d69744578636565646564000204f84163636f756e7420697320747279696e6720746f20636f6d6d6974206461746120746f6f20666173742c2072617465206c696d6974206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e2d060c4870616c6c65745f61646d696e5f7574696c731870616c6c6574144572726f7204045400010c485375626e6574446f65734e6f744578697374000004d4546865207375626e657420646f6573206e6f742065786973742c20636865636b20746865206e657475696420706172616d65746572784d617856616c696461746f72734c61726765725468616e4d617855496473000104ad01546865206d6178696d756d206e756d626572206f66207375626e65742076616c696461746f7273206d757374206265206c657373207468616e20746865206d6178696d756d206e756d626572206f6620616c6c6f776564205549447320696e20746865207375626e65742e844d6178416c6c6f776564554964734c6573735468616e43757272656e7455496473000204ad01546865206d6178696d756d206e756d626572206f66207375626e65742076616c696461746f7273206d757374206265206d6f7265207468616e207468652063757272656e74206e756d626572206f66205549447320616c726561647920696e20746865207375626e65742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e310600000408001000350604184f7074696f6e04045401180108104e6f6e6500000010536f6d65040018000001000039060c4070616c6c65745f736166655f6d6f64651870616c6c6574144572726f7204045400011c1c456e7465726564000004b054686520736166652d6d6f64652069732028616c7265616479206f72207374696c6c2920656e74657265642e18457869746564000104ac54686520736166652d6d6f64652069732028616c7265616479206f72207374696c6c29206578697465642e344e6f74436f6e666967757265640002040901546869732066756e6374696f6e616c697479206f66207468652070616c6c65742069732064697361626c65642062792074686520636f6e66696775726174696f6e2e244e6f4465706f736974000304745468657265206973206e6f2062616c616e63652072657365727665642e40416c72656164794465706f73697465640004045d01546865206163636f756e7420616c7265616479206861732061206465706f73697420726573657276656420616e642063616e207468657265666f7265206e6f7420656e746572206f7220657874656e6420616761696e2e4043616e6e6f7452656c656173655965740005049054686973206465706f7369742063616e6e6f742062652072656c6561736564207965742e3443757272656e63794572726f72000604a0416e206572726f722066726f6d2074686520756e6465726c79696e67206043757272656e6379602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3d0600000241060041060000040c310545065906004506081866705f727063445472616e73616374696f6e53746174757300001c01407472616e73616374696f6e5f68617368340110483235360001447472616e73616374696f6e5f696e64657810010c75333200011066726f6d0501011c41646472657373000108746f4906013c4f7074696f6e3c416464726573733e000140636f6e74726163745f616464726573734906013c4f7074696f6e3c416464726573733e0001106c6f67734d0601205665633c4c6f673e0001286c6f67735f626c6f6f6d51060114426c6f6f6d0000490604184f7074696f6e0404540105010108104e6f6e6500000010536f6d650400050100000100004d0600000231010051060820657468626c6f6f6d14426c6f6f6d00000400550601405b75383b20424c4f4f4d5f53495a455d0000550600000300010000080059060c20657468657265756d1c726563656970742452656365697074563300010c184c656761637904005d06014445495036353852656365697074446174610000001c4549503239333004005d0601484549503239333052656365697074446174610001001c4549503135353904005d060148454950313535395265636569707444617461000200005d060c20657468657265756d1c72656365697074444549503635385265636569707444617461000010012c7374617475735f636f64650801087538000120757365645f67617339010110553235360001286c6f67735f626c6f6f6d51060114426c6f6f6d0001106c6f67734d0601205665633c4c6f673e000061060c20657468657265756d14626c6f636b14426c6f636b040454013105000c0118686561646572650601184865616465720001307472616e73616374696f6e736d0601185665633c543e0001186f6d6d6572737106012c5665633c4865616465723e000065060c20657468657265756d186865616465721848656164657200003c012c706172656e745f686173683401104832353600012c6f6d6d6572735f686173683401104832353600012c62656e6566696369617279050101104831363000012873746174655f726f6f74340110483235360001447472616e73616374696f6e735f726f6f743401104832353600013472656365697074735f726f6f74340110483235360001286c6f67735f626c6f6f6d51060114426c6f6f6d000128646966666963756c747939010110553235360001186e756d62657239010110553235360001246761735f6c696d697439010110553235360001206761735f75736564390101105532353600012474696d657374616d7018010c75363400012865787472615f6461746138011442797465730001206d69785f68617368340110483235360001146e6f6e63656906010c483634000069060c38657468657265756d5f747970657310686173680c483634000004009501011c5b75383b20385d00006d060000023105007106000002650600750600000259060079060000024506007d060c3c70616c6c65745f657468657265756d1870616c6c6574144572726f7204045400010840496e76616c69645369676e6174757265000004545369676e617475726520697320696e76616c69642e305072654c6f67457869737473000104d85072652d6c6f672069732070726573656e742c207468657265666f7265207472616e73616374206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8106082870616c6c65745f65766d30436f64654d65746164617461000008011073697a6518010c753634000110686173683401104832353600008506000004080501340089060c2870616c6c65745f65766d1870616c6c6574144572726f720404540001382842616c616e63654c6f77000004904e6f7420656e6f7567682062616c616e636520746f20706572666f726d20616374696f6e2c4665654f766572666c6f770001048043616c63756c6174696e6720746f74616c20666565206f766572666c6f7765643c5061796d656e744f766572666c6f770002049043616c63756c6174696e6720746f74616c207061796d656e74206f766572666c6f7765643857697468647261774661696c65640003044c576974686472617720666565206661696c6564384761735072696365546f6f4c6f770004045447617320707269636520697320746f6f206c6f772e30496e76616c69644e6f6e6365000504404e6f6e636520697320696e76616c6964384761734c696d6974546f6f4c6f7700060454476173206c696d697420697320746f6f206c6f772e3c4761734c696d6974546f6f4869676800070458476173206c696d697420697320746f6f20686967682e38496e76616c6964436861696e49640008046054686520636861696e20696420697320696e76616c69642e40496e76616c69645369676e617475726500090464746865207369676e617475726520697320696e76616c69642e285265656e7472616e6379000a043845564d207265656e7472616e6379685472616e73616374696f6e4d757374436f6d6546726f6d454f41000b04244549502d333630372c24556e646566696e6564000c0440556e646566696e6564206572726f722e284e6f74416c6c6f776564000d04bc4f726967696e206973206e6f7420616c6c6f77656420746f20706572666f726d20746865206f7065726174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8d060c4466705f73656c665f636f6e7461696e65644c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730145021043616c6c01bd02245369676e6174757265019106144578747261019506000400d10601250173705f72756e74696d653a3a67656e657269633a3a556e636865636b656445787472696e7369633c416464726573732c2043616c6c2c205369676e61747572652c2045787472610a3e00009106082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400dd010148656432353531393a3a5369676e61747572650000001c537232353531390400dd010148737232353531393a3a5369676e617475726500010014456364736104002104014065636473613a3a5369676e61747572650002000095060000042c99069d06a106a506a906b106b506b906bd06c506c90600990610306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e646572040454000000009d0610306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e04045400000000a10610306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000a50610306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000a90610306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c69747904045400000400ad06010c4572610000ad06102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff0000b1060c586e6f64655f73756274656e736f725f72756e74696d652c636865636b5f6e6f6e636528436865636b4e6f6e63650404540000040051010120543a3a4e6f6e63650000b50610306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b57656967687404045400000000b906086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e740404540000040030013042616c616e63654f663c543e0000bd06084070616c6c65745f73756274656e736f726053756274656e736f725369676e6564457874656e73696f6e04045401c106000000c10608586e6f64655f73756274656e736f725f72756e74696d651c52756e74696d6500000000c506084870616c6c65745f636f6d6d69746d656e747368436f6d6d69746d656e74735369676e6564457874656e73696f6e04045401c106000000c90608746672616d655f6d657461646174615f686173685f657874656e73696f6e44436865636b4d657461646174614861736804045400000401106d6f6465cd0601104d6f64650000cd0608746672616d655f6d657461646174615f686173685f657874656e73696f6e104d6f64650001082044697361626c65640000001c456e61626c656400010000d106102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730145021043616c6c01bd02245369676e617475726501910614457874726101950600040038000000681853797374656d011853797374656d481c4163636f756e7401010402000ce0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010024040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010028180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023449010400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d655570677261646500004d0104000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100240400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100240400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500004501040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500005501040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01590101581830426c6f636b576569676874736901f901624d186c000b00409452a30313ffffffffffffffff4247871900010b30beb1555d021366666666666666a6010b0030ef7dba0213ffffffffffffffbf0100004247871900010b30ce562a46031366666666666666e6010b00409452a30313ffffffffffffffff01070010a5d4e8130000000000000040424787190000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468790130000078000000a0000000a00004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687481014040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e85015104386e6f64652d73756274656e736f72386e6f64652d73756274656e736f7201000000d4000000010000004cdf6acb689907609b0500000037e397fc7c91f5e40200000040fe3ad401f8959a06000000fbc577b9d747efd601000000d2bc9897eed08f1503000000f78b278be53f454c02000000dd718d5cc53262d401000000ab3c0572291feb8b01000000ed99c5acb25eedf503000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab52705903000000582211f65bb14b8905000000e65b00e46cedd0aa0200000042e62be4a39e5b6001000000806df4ccaa9ed485010000008375104b299b74c5010000005d1fbfbe852f280701000000c6886e2f8e598b0a0100000001000000010484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e28535335385072656669789c082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e019901006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c01009d0104000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701001820000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010024040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e01a1010004344d696e696d756d506572696f6418207017000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e00021041757261011041757261082c417574686f7269746965730100a5010400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100b1012000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000430536c6f744475726174696f6e1820e02e000000000000100d012054686520736c6f74206475726174696f6e20417572612073686f756c642072756e20776974682c2065787072657373656420696e206d696c6c697365636f6e64732e3d0120546865206566666563746976652076616c7565206f66207468697320747970652073686f756c64206e6f74206368616e6765207768696c652074686520636861696e2069732072756e6e696e672e00350120466f72206261636b776172647320636f6d7061746962696c6974792065697468657220757365205b604d696e696d756d506572696f6454696d657354776f605d206f72206120636f6e73742e00031c4772616e647061011c4772616e6470611c1453746174650100b50104000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e67650000b901040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000dc0400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010018200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405181004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e2c417574686f7269746965730100bd0104000484205468652063757272656e74206c697374206f6620617574686f7269746965732e01c501017c0c384d6178417574686f726974696573101020000000045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310101400000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e74726965731820000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e01f501042042616c616e636573012042616c616e6365731c34546f74616c49737375616e636501001820000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e63650100182000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014a000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b730101040200f901040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602052657365727665730101040200090204000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c6473010104020015020400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a6573010104020031020400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e014102018c10484578697374656e7469616c4465706f7369741820f40100000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010320000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01550205485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100590240000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01005d0204000000019404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00063c53756274656e736f724d6f64756c65013c53756274656e736f724d6f64756c65f1016c436f6c646b6579537761705363686564756c654475726174696f6e01001010a08c0000007c446973736f6c76654e6574776f726b5363686564756c654475726174696f6e01001010a08c0000007453656e61746552657175697265645374616b6550657263656e746167650100182001000000000000000034546f74616c49737375616e63650100182000000000000000003074203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d70203d3d3d3d205374616b696e67205661726961626c6573203d3d3d3d74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d8901205468652053756274656e736f72205b60546f74616c49737375616e6365605d20726570726573656e74732074686520746f74616c2069737375616e6365206f6620746f6b656e73206f6e207468652042697474656e736f72206e6574776f726b2e008020497420697320636f6d707269736564206f662074687265652070617274733a6501202d2054686520746f74616c20616d6f756e74206f662069737375656420746f6b656e732c20747261636b656420696e2074686520546f74616c49737375616e6365206f66207468652042616c616e6365732070616c6c65743501202d2054686520746f74616c20616d6f756e74206f6620746f6b656e73207374616b656420696e207468652073797374656d2c20747261636b656420696e205b60546f74616c5374616b65605d0102202d2054686520746f74616c20616d6f756e74206f6620746f6b656e73206c6f636b656420757020666f72207375626e6574207265672c20747261636b656420696e205b60546f74616c5375626e65744c6f636b6564605d2061747461696e656420627920697465726174696e67206f766572207375626e6574206c6f636b2e007501204576656e7475616c6c792c2042697474656e736f722073686f756c64206d69677261746520746f207573696e6720486f6c647320616674657277686963682074696d652077652077696c6c206e6f742072657175697265207468697354207365706172617465206163636f756e74696e672e28546f74616c5374616b65010018200000000000000000003c4d617844656c656761746554616b6501009c08142e003c4d696e44656c656761746554616b6501009c080000003c4d61784368696c646b657954616b6501009c08142e003c4d696e4368696c646b657954616b6501009c0800000034426c6f636b456d697373696f6e0100182000ca9a3b00000000005c5461726765745374616b6573506572496e74657276616c01001820010000000000000000345374616b65496e74657276616c0100182068010000000000000040546f74616c486f746b65795374616b650101040600182000000000000000000044546f74616c436f6c646b65795374616b650101040600182000000000000000000090546f74616c486f746b6579436f6c646b65795374616b657354686973496e74657276616c0101080606610265024000000000000000000000000000000000043501204d41502028686f742c20636f6c6429202d2d3e207374616b65207c2052657475726e732061207475706c6520287536343a207374616b65732c207536343a20626c6f636b5f6e756d62657229144f776e6572010104020000800000000000000000000000000000000000000000000000000000000000000000041501204d4150202820686f742029202d2d3e20636f6c64207c2052657475726e732074686520636f6e74726f6c6c696e6720636f6c646b657920666f72206120686f746b65792e2444656c65676174657301010402009c08142e04b501204d4150202820686f742029202d2d3e2074616b65207c2052657475726e732074686520686f746b65792064656c65676174696f6e2074616b652e20416e64207369676e616c7320746861742074686973206b6579206973206f70656e20666f722064656c65676174696f6e2e304368696c646b657954616b65010108020669029c080000045d0120444d4150202820686f742c206e65747569642029202d2d3e2074616b65207c2052657475726e732074686520686f746b6579206368696c646b65792074616b6520666f722061207370656369666963207375626e6574145374616b65010108020661021820000000000000000004550120444d4150202820686f742c20636f6c642029202d2d3e207374616b65207c2052657475726e7320746865207374616b6520756e646572206120636f6c646b657920707265666978656420627920686f746b65792e5c4c617374486f746b6579456d697373696f6e447261696e010104020018200000000000000000046d01204d6170202820686f742029202d2d3e206c6173745f686f746b65795f656d697373696f6e5f647261696e207c204c61737420626c6f636b20776520647261696e6564207468697320686f746b6579277320656d697373696f6e2e4c486f746b6579456d697373696f6e54656d706f01001820201c000000000000047c204954454d202820686f746b65795f656d697373696f6e5f74656d706f20295850656e64696e6764486f746b6579456d697373696f6e01010402001820000000000000000004e0204d6170202820686f742029202d2d3e20656d697373696f6e207c20416363756d756c6174656420686f746b657920656d697373696f6e2e8450656e64696e6764486f746b6579456d697373696f6e556e746f75636861626c6501010402001820000000000000000004ad01204d6170202820686f742029202d2d3e20656d697373696f6e207c2050617274206f6620616363756d756c6174656420686f746b657920656d697373696f6e20746861742077696c6c206e6f7420626520646973747269627574656420746f206e6f6d696e61746f72732e805374616b6544656c746153696e63654c617374456d697373696f6e447261696e010108020661026d024000000000000000000000000000000000044d01204d6170202820686f742c20636f6c642029202d2d3e207374616b653a2069313238207c205374616b652061646465642f72656d6f7665642073696e6365206c61737420656d697373696f6e20647261696e2e244368696c644b65797301010802066902ac040004d020444d4150202820706172656e742c206e65747569642029202d2d3e205665633c2870726f706f7274696f6e2c6368696c64293e28506172656e744b65797301010802066902ac040004d020444d41502028206368696c642c206e65747569642029202d2d3e205665633c2870726f706f7274696f6e2c706172656e74293e385374616b696e67486f746b65797301010402004d02040000304f776e6564486f746b65797301010402004d0204000050436f6c646b6579537761705363686564756c65640101040200a400002055736564576f726b0101040638182000000000000000001074203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d74203d3d3d3d20476c6f62616c20506172616d6574657273203d3d3d3d3d74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d88202d2d2d2053746f726167654974656d20476c6f62616c205573656420576f726b2e604d6178526567697374726174696f6e73506572426c6f636b010104069c9c08010004bc202d2d2d204954454d2820676c6f62616c5f6d61785f726567697374726174696f6e735f7065725f626c6f636b20292c5375626e65744c696d697401009c080c00049c202d2d2d204954454d28206d6178696d756d5f6e756d6265725f6f665f6e6574776f726b73202934546f74616c4e6574776f726b7301009c08000004b8202d2d2d204954454d2820746f74616c5f6e756d6265725f6f665f6578697374696e675f6e6574776f726b732029544e6574776f726b496d6d756e697479506572696f6401001820e0c40000000000000480204954454d28206e6574776f726b5f696d6d756e6974795f706572696f642029544e6574776f726b4c617374526567697374657265640100182000000000000000000498204954454d28206e6574776f726b5f6c6173745f726567697374657265645f626c6f636b2029544e6574776f726b4d696e416c6c6f7765645569647301009c0880000484204954454d28206e6574776f726b5f6d696e5f616c6c6f7765645f756964732029484e6574776f726b4d696e4c6f636b436f7374010018200010a5d4e80000000478204954454d28206d696e5f6e6574776f726b5f6c6f636b5f636f737420294c4e6574776f726b4c6173744c6f636b436f7374010018200010a5d4e8000000047c204954454d28206c6173745f6e6574776f726b5f6c6f636b5f636f73742029704e6574776f726b4c6f636b526564756374696f6e496e74657276616c01001820c08901000000000004a0204954454d28206e6574776f726b5f6c6f636b5f726564756374696f6e5f696e74657276616c2029385375626e65744f776e657243757401009c08142e0464204954454d28207375626e65745f6f776e65725f6375742029404e6574776f726b526174654c696d697401001820201c000000000000046c204954454d28206e6574776f726b5f726174655f6c696d69742029644e6f6d696e61746f724d696e52657175697265645374616b650100182000000000000000000494204954454d28206e6f6d696e61746f725f6d696e5f72657175697265645f7374616b6520292c5375626e6574776f726b4e010104069c9c0800001074203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d74203d3d3d3d205375626e657420506172616d6574657273203d3d3d3d3d74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d1501202d2d2d204d41502028206e65747569642029202d2d3e207375626e6574776f726b5f6e20284e756d626572206f66205549447320696e20746865206e6574776f726b292e3c4e6574776f726b4d6f64616c697479010104069c9c08000004fc202d2d2d204d41502028206e65747569642029202d2d3e206d6f64616c697479202020544558543a20302c20494d4147453a20312c2054454e534f523a2032344e6574776f726b734164646564010104069c24040004a0202d2d2d204d41502028206e65747569642029202d2d3e206e6574776f726b5f69735f61646465643c49734e6574776f726b4d656d626572010108020669022404000494202d2d2d20444d4150202820686f746b65792c206e65747569642029202d2d3e20626f6f6c684e6574776f726b526567697374726174696f6e416c6c6f776564010104069c24040004d0202d2d2d204d41502028206e65747569642029202d2d3e206e6574776f726b5f726567697374726174696f6e5f616c6c6f776564744e6574776f726b506f77526567697374726174696f6e416c6c6f776564010104069c24040004ac202d2d2d204d41502028206e65747569642029202d2d3e206e6574776f726b5f706f775f616c6c6f7765644c4e6574776f726b526567697374657265644174010104069c182000000000000000000494202d2d2d204d41502028206e65747569642029202d2d3e20626c6f636b5f637265617465641454656d706f010104069c9c0863000474202d2d2d204d41502028206e65747569642029202d2d3e2074656d706f38456d697373696f6e56616c756573010104069c18200000000000000000049c202d2d2d204d41502028206e65747569642029202d2d3e20656d697373696f6e5f76616c7565733c50656e64696e67456d697373696f6e010104069c1820000000000000000004a0202d2d2d204d41502028206e65747569642029202d2d3e2070656e64696e675f656d697373696f6e4c426c6f636b7353696e63654c61737453746570010104069c1820000000000000000004b8202d2d2d204d41502028206e65747569642029202d2d3e20626c6f636b735f73696e63655f6c6173745f73746570584c6173744d656368616e73696d53746570426c6f636b010104069c1820000000000000000004c4202d2d2d204d41502028206e65747569642029202d2d3e206c6173745f6d656368616e69736d5f737465705f626c6f636b2c5375626e65744f776e6572010104069c008000000000000000000000000000000000000000000000000000000000000000000490202d2d2d204d41502028206e65747569642029202d2d3e207375626e65745f6f776e6572305375626e65744c6f636b6564010104069c182000000000000000000494202d2d2d204d41502028206e65747569642029202d2d3e207375626e65745f6c6f636b65644053657276696e67526174654c696d6974010104069c1820320000000000000004a8202d2d2d204d41502028206e65747569642029202d2d3e2073657276696e675f726174655f6c696d69740c52686f010104069c9c080a00046c202d2d2d204d41502028206e65747569642029202d2d3e2052686f144b61707061010104069c9c08ff7f0474202d2d2d204d41502028206e65747569642029202d2d3e204b61707061644e6575726f6e73546f5072756e6541744e65787445706f6368010104069c9c080000042901202d2d2d204d41502028206e65747569642029202d2d3e207569642c2077652075736520746f207265636f7264207569647320746f207072756e65206174206e6578742065706f63682e64526567697374726174696f6e7354686973496e74657276616c010104069c9c08000004cc202d2d2d204d41502028206e65747569642029202d2d3e20726567697374726174696f6e735f746869735f696e74657276616c70504f57526567697374726174696f6e7354686973496e74657276616c010104069c9c08000004dc202d2d2d204d41502028206e65747569642029202d2d3e20706f775f726567697374726174696f6e735f746869735f696e74657276616c744275726e526567697374726174696f6e7354686973496e74657276616c010104069c9c08000004e0202d2d2d204d41502028206e65747569642029202d2d3e206275726e5f726567697374726174696f6e735f746869735f696e74657276616c384d6178416c6c6f77656455696473010104069c9c08001004a0202d2d2d204d41502028206e65747569642029202d2d3e206d61785f616c6c6f7765645f7569647338496d6d756e697479506572696f64010104069c9c080010049c202d2d2d204d41502028206e65747569642029202d2d3e20696d6d756e6974795f706572696f643841637469766974794375746f6666010104069c9c088813049c202d2d2d204d41502028206e65747569642029202d2d3e2061637469766974795f6375746f66663c4d6178576569676874734c696d6974010104069c9c08e80304a0202d2d2d204d41502028206e65747569642029202d2d3e206d61785f7765696768745f6c696d6974445765696768747356657273696f6e4b6579010104069c1820000000000000000004ac202d2d2d204d41502028206e65747569642029202d2d3e20776569676874735f76657273696f6e5f6b6579444d696e416c6c6f77656457656967687473010104069c9c08000404ac202d2d2d204d41502028206e65747569642029202d2d3e206d696e5f616c6c6f7765645f77656967687473504d6178416c6c6f77656456616c696461746f7273010104069c9c08800004b8202d2d2d204d41502028206e65747569642029202d2d3e206d61785f616c6c6f7765645f76616c696461746f72734841646a7573746d656e74496e74657276616c010104069c9c08640004ac202d2d2d204d41502028206e65747569642029202d2d3e2061646a7573746d656e745f696e74657276616c48426f6e64734d6f76696e6741766572616765010104069c1820a0bb0d000000000004b0202d2d2d204d41502028206e65747569642029202d2d3e20626f6e64735f6d6f76696e675f617665726167654c57656967687473536574526174654c696d6974010104069c1820640000000000000004b8202d2d2d204d41502028206e65747569642029202d2d3e20776569676874735f7365745f726174655f6c696d69744456616c696461746f725072756e654c656e010104069c1820010000000000000004ac202d2d2d204d41502028206e65747569642029202d2d3e2076616c696461746f725f7072756e655f6c656e3c5363616c696e674c6177506f776572010104069c9c08320004a4202d2d2d204d41502028206e65747569642029202d2d3e207363616c696e675f6c61775f706f77657278546172676574526567697374726174696f6e73506572496e74657276616c010104069c9c08020004e8202d2d2d204d41502028206e65747569642029202d2d3e207461726765745f726567697374726174696f6e735f746869735f696e74657276616c3c41646a7573746d656e74416c706861010104069c1820000000000000000004a0202d2d2d204d41502028206e65747569642029202d2d3e2061646a7573746d656e745f616c70686168436f6d6d697452657665616c57656967687473456e61626c6564010104069c2404000480202d2d2d204d41502028206e65747569642029202d2d3e20696e74657276616c104275726e010104069c182000ca9a3b000000000470202d2d2d204d41502028206e65747569642029202d2d3e204275726e28446966666963756c7479010104069c182080969800000000000488202d2d2d204d41502028206e65747569642029202d2d3e20446966666963756c74791c4d696e4275726e010104069c182000ca9a3b00000000047c202d2d2d204d41502028206e65747569642029202d2d3e204d696e4275726e1c4d61784275726e010104069c182000e8764817000000047c202d2d2d204d41502028206e65747569642029202d2d3e204d61784275726e344d696e446966666963756c7479010104069c182080969800000000000494202d2d2d204d41502028206e65747569642029202d2d3e204d696e446966666963756c7479344d6178446966666963756c7479010104069c1820ffffffffffffff3f0494202d2d2d204d41502028206e65747569642029202d2d3e204d6178446966666963756c74794c4c61737441646a7573746d656e74426c6f636b010104069c1820000000000000000004c8202d2d2d204d41502028206e65747569642029202d2d3e2020426c6f636b206174206c6173742061646a7573746d656e742e58526567697374726174696f6e7354686973426c6f636b010104069c9c08000004d0202d2d2d204d41502028206e65747569642029202d2d3e20526567697374726174696f6e73206f66207468697320426c6f636b2e6852414f52656379636c6564466f72526567697374726174696f6e010104069c1820000000000000000004f0202d2d2d204d41502028206e65747569642029202d2d3e20676c6f62616c5f52414f5f72656379636c65645f666f725f726567697374726174696f6e2c5478526174654c696d697401001820e803000000000000046c202d2d2d204954454d20282074785f726174655f6c696d697420295c547844656c656761746554616b65526174654c696d697401001820c04b03000000000004a4202d2d2d204954454d20282074785f64656c65676174655f74616b655f726174655f6c696d697420295c54784368696c646b657954616b65526174654c696d697401001820c04b03000000000004a4202d2d2d204954454d20282074785f6368696c646b65795f74616b655f726174655f6c696d69742029344c6971756964416c7068614f6e010104029c24040004f8202d2d2d204d41502028206e65747569642029202d2d3e2057686574686572206f72206e6f74204c697175696420416c70686120697320656e61626c65642c416c70686156616c756573010104069c71021033b366e604b020204d41502028206e65747569642029202d2d3e2028616c7068615f6c6f772c20616c7068615f68696768293c4e6574776f726b4d61785374616b65010104069c1820ffffffffffffffff04c8204d41502028206e65747569642029202d2d3e206d6178207374616b6520616c6c6f776564206f6e2061207375626e65742e2c5374616b65576569676874010104069c750204000ca0203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3da0203d3d3d3d205375626e6574776f726b20436f6e73656e7375732053746f7261676520203d3d3d3da0203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d1055696473000108060279029c04000490202d2d2d20444d41502028206e65747569642c20686f746b65792029202d2d3e20756964104b65797301010806067102008000000000000000000000000000000000000000000000000000000000000000000490202d2d2d20444d41502028206e65747569642c207569642029202d2d3e20686f746b6579384c6f61646564456d697373696f6e000104069c7d02040004a4202d2d2d20444d41502028206e65747569642029202d2d3e2028686f746b65792c2073652c2076652918416374697665010104069c85020400047c202d2d2d20444d41502028206e65747569642029202d2d3e206163746976651052616e6b010104069c750204000474202d2d2d20444d41502028206e65747569642029202d2d3e2072616e6b145472757374010104069c750204000478202d2d2d20444d41502028206e65747569642029202d2d3e20747275737424436f6e73656e737573010104069c750204000488202d2d2d20444d41502028206e65747569642029202d2d3e20636f6e73656e73757324496e63656e74697665010104069c750204000488202d2d2d20444d41502028206e65747569642029202d2d3e20696e63656e74697665244469766964656e6473010104069c750204000488202d2d2d20444d41502028206e65747569642029202d2d3e206469766964656e647320456d697373696f6e010104069c890204000484202d2d2d20444d41502028206e65747569642029202d2d3e20656d697373696f6e284c617374557064617465010104069c890204000490202d2d2d20444d41502028206e65747569642029202d2d3e206c6173745f7570646174653856616c696461746f725472757374010104069c7502040004a0202d2d2d20444d41502028206e65747569642029202d2d3e2076616c696461746f725f7472757374345072756e696e6753636f726573010104069c75020400049c202d2d2d20444d41502028206e65747569642029202d2d3e207072756e696e675f73636f7265733c56616c696461746f725065726d6974010104069c8502040004a4202d2d2d20444d41502028206e65747569642029202d2d3e2076616c696461746f725f7065726d69741c57656967687473010108060671028d0204000494202d2d2d20444d41502028206e65747569642c207569642029202d2d3e207765696768747314426f6e6473010108060671028d020400048c202d2d2d20444d41502028206e65747569642c207569642029202d2d3e20626f6e64734c426c6f636b4174526567697374726174696f6e010108060671021820000000000000000004cc202d2d2d20444d41502028206e65747569642c207569642029202d2d3e20626c6f636b5f61745f726567697374726174696f6e1441786f6e73000108060279029102040004a4202d2d2d204d41502028206e65747569642c20686f746b65792029202d2d3e2061786f6e5f696e666f484e6575726f6e436572746966696361746573000108060279029502040004ac202d2d2d204d41502028206e65747569642c20686f746b65792029202d2d3e2063657274696669636174652850726f6d657468657573000108060279029d02040004bc202d2d2d204d41502028206e65747569642c20686f746b65792029202d2d3e2070726f6d6574686575735f696e666f284964656e7469746965730001040200a102040000405375626e65744964656e746974696573000104029ca5020400005c5472616e73616374696f6e4b65794c617374426c6f636b01010c020606a902182000000000000000000c88203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d88203d3d3d3d2041786f6e202f2050726f6d6f20456e64706f696e7473203d3d3d3d3d88203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d2c4c6173745478426c6f636b010104060018200000000000000000047c202d2d2d204d41502028206b65792029202d2d3e206c6173745f626c6f636b5c4c6173745478426c6f636b4368696c644b657954616b6501010406001820000000000000000004c0202d2d2d204d41502028206b65792029202d2d3e206c6173745f74785f626c6f636b5f6368696c646b65795f74616b655c4c6173745478426c6f636b44656c656761746554616b6501010406001820000000000000000004c0202d2d2d204d41502028206b65792029202d2d3e206c6173745f74785f626c6f636b5f64656c65676174655f74616b653c576569676874734d696e5374616b650100182000000000000000000468204954454d2820776569676874735f6d696e5f7374616b65202934576569676874436f6d6d69747300010805057902ad020400047902202d2d2d204d415020286e65747569642c2077686f29202d2d3e2056656344657175653c28686173682c20636f6d6d69745f626c6f636b2c2066697273745f72657665616c5f626c6f636b2c206c6173745f72657665616c5f626c6f636b293e207c2053746f7265732061207175657565206f6620636f6d6d69747320666f7220616e206163636f756e74206f6e206120676976656e206e65747569642e4852657665616c506572696f6445706f636873010104059c18200100000000000000042101202d2d2d204d617020286e657475696429202d2d3e204e756d626572206f662065706f63687320616c6c6f77656420666f7220636f6d6d69742072657665616c20706572696f64733c4861734d6967726174696f6e52756e01010406382404000c4c203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4c203d3d3d3d2047656e65736973203d3d3d3d3d4c203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d01b5020198d43c496e697469616c49737375616e6365182000000000000000001088203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d88203d3d3d3d20496e697469616c2056616c756520436f6e7374616e7473203d3d3d3d88203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d6c20496e697469616c2063757272656e63792069737375616e63652e60496e697469616c4d696e416c6c6f776564576569676874739c080004049420496e697469616c206d696e20616c6c6f77656420776569676874732073657474696e672e50496e697469616c456d697373696f6e56616c75659c080000046020496e697469616c20456d697373696f6e20526174696f2e58496e697469616c4d6178576569676874734c696d69749c08e803046820496e697469616c206d617820776569676874206c696d69742e30496e697469616c54656d706f9c08630004602054656d706f20666f722065616368206e6574776f726b2e44496e697469616c446966666963756c747918208096980000000000045020496e697469616c20446966666963756c74792e50496e697469616c4d6178446966666963756c74791820ffffffffffffff3f046020496e697469616c204d617820446966666963756c74792e50496e697469616c4d696e446966666963756c747918208096980000000000046020496e697469616c204d696e20446966666963756c74792e84496e697469616c52414f52656379636c6564466f72526567697374726174696f6e18200000000000000000045820496e697469616c2052414f2052656379636c65642e2c496e697469616c4275726e182000ca9a3b00000000043820496e697469616c204275726e2e38496e697469616c4d61784275726e182000e8764817000000044820496e697469616c204d6178204275726e2e38496e697469616c4d696e4275726e182000ca9a3b00000000044820496e697469616c204d696e204275726e2e64496e697469616c41646a7573746d656e74496e74657276616c9c086400047420496e697469616c2061646a7573746d656e7420696e74657276616c2e64496e697469616c426f6e64734d6f76696e67417665726167651820a0bb0d0000000000047820496e697469616c20626f6e6473206d6f76696e6720617665726167652e94496e697469616c546172676574526567697374726174696f6e73506572496e74657276616c9c08020004ac20496e697469616c2074617267657420726567697374726174696f6e732070657220696e74657276616c2e28496e697469616c52686f9c080a0004382052686f20636f6e7374616e742e30496e697469616c4b617070619c08ff7f0440204b6170706120636f6e7374616e742e54496e697469616c4d6178416c6c6f776564556964739c0800100448204d61782055494420636f6e7374616e742e60496e697469616c56616c696461746f725072756e654c656e1820010000000000000004a820496e697469616c2076616c696461746f7220636f6e74657874207072756e696e67206c656e6774682e58496e697469616c5363616c696e674c6177506f7765729c083200046c20496e697469616c207363616c696e67206c617720706f7765722e54496e697469616c496d6d756e697479506572696f649c080010046820496d6d756e69747920506572696f6420436f6e7374616e742e54496e697469616c41637469766974794375746f66669c088813044c20416374697669747920636f6e7374616e742e7c496e697469616c4d6178526567697374726174696f6e73506572426c6f636b9c080100049420496e697469616c206d617820726567697374726174696f6e732070657220626c6f636b2e4c496e697469616c5072756e696e6753636f72659c08ffff049c20496e697469616c207072756e696e672073636f726520666f722065616368206e6575726f6e2e6c496e697469616c4d6178416c6c6f77656456616c696461746f72739c08800004c020496e697469616c206d6178696d756d20616c6c6f7765642076616c696461746f727320706572206e6574776f726b2e68496e697469616c44656661756c7444656c656761746554616b659c08142e048420496e697469616c2064656661756c742064656c65676174696f6e2074616b652e58496e697469616c4d696e44656c656761746554616b659c080000048420496e697469616c206d696e696d756d2064656c65676174696f6e2074616b652e68496e697469616c44656661756c744368696c644b657954616b659c080000047c20496e697469616c2064656661756c74206368696c646b65792074616b652e58496e697469616c4d696e4368696c644b657954616b659c080000047c20496e697469616c206d696e696d756d206368696c646b65792074616b652e58496e697469616c4d61784368696c644b657954616b659c08142e047c20496e697469616c206d6178696d756d206368696c646b65792074616b652e60496e697469616c5765696768747356657273696f6e4b657918200000000000000000047420496e697469616c20776569676874732076657273696f6e206b65792e5c496e697469616c53657276696e67526174654c696d697418203200000000000000047020496e697469616c2073657276696e672072617465206c696d69742e48496e697469616c5478526174654c696d69741820e803000000000000048020496e697469616c207472616e73616374696f6e2072617465206c696d69742e78496e697469616c547844656c656761746554616b65526174654c696d69741820c04b03000000000004b820496e697469616c2064656c65676174652074616b65207472616e73616374696f6e2072617465206c696d69742e78496e697469616c54784368696c644b657954616b65526174654c696d69741820c04b03000000000004b820496e697469616c206368696c646b65792074616b65207472616e73616374696f6e2072617465206c696d69742e90496e697469616c53656e61746552657175697265645374616b6550657263656e746167651820010000000000000004ec20496e697469616c2070657263656e74616765206f6620746f74616c207374616b6520726571756972656420746f206a6f696e2073656e6174652e58496e697469616c41646a7573746d656e74416c7068611820000000000000000004a820496e697469616c2061646a7573746d656e7420616c706861206f6e206275726e20616e6420706f772e70496e697469616c4e6574776f726b496d6d756e697479506572696f641820e0c4000000000000048020496e697469616c206e6574776f726b20696d6d756e69747920706572696f6470496e697469616c4e6574776f726b4d696e416c6c6f776564556964739c088000049420496e697469616c206d696e696d756d20616c6c6f776564206e6574776f726b205549447364496e697469616c4e6574776f726b4d696e4c6f636b436f737418200010a5d4e8000000048820496e697469616c206e6574776f726b206d696e696d756d206275726e20636f737454496e697469616c5375626e65744f776e65724375749c08142e047020496e697469616c206e6574776f726b207375626e6574206375742e8c496e697469616c4e6574776f726b4c6f636b526564756374696f6e496e74657276616c1820c089010000000000048420496e697469616c206c6f636b20726564756374696f6e20696e74657276616c2e48496e697469616c5375626e65744c696d69749c080c00047020496e697469616c206d617820616c6c6f776564207375626e6574735c496e697469616c4e6574776f726b526174654c696d69741820201c000000000000049020496e697469616c206e6574776f726b206372656174696f6e2072617465206c696d697478496e697469616c5461726765745374616b6573506572496e74657276616c1820010000000000000004b420496e697469616c20746172676574207374616b65732070657220696e74657276616c2069737375616e63652e2c4b657953776170436f7374182000e1f50500000000046c20436f7374206f66207377617070696e67206120686f746b65792e24416c706861486967689c0866e60401012054686520757070657220626f756e6420666f722074686520616c70686120706172616d657465722e205573656420666f72204c697175696420416c7068612e20416c7068614c6f779c0833b304010120546865206c6f77657220626f756e6420666f722074686520616c70686120706172616d657465722e205573656420666f72204c697175696420416c7068612e344c6971756964416c7068614f6e24040004bc204120666c616720746f20696e646963617465206966204c697175696420416c70686120697320656e61626c65642e58496e697469616c4e6574776f726b4d61785374616b651820ffffffffffffffff046c20496e697469616c206e6574776f726b206d6178207374616b652e68496e697469616c486f746b6579456d697373696f6e54656d706f1820201c000000000000047c20496e697469616c20686f746b657920656d697373696f6e2074656d706f2e88496e697469616c436f6c646b6579537761705363686564756c654475726174696f6e1010a08c0000048020436f6c646b65792073776170207363686564756c65206475617274696f6e2e98496e697469616c446973736f6c76654e6574776f726b5363686564756c654475726174696f6e1010a08c0000048c20446973736f6c7665206e6574776f726b207363686564756c65206475726174696f6e017505072c547269756d766972617465012c547269756d766972617465182450726f706f73616c7301007905040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f660001040634bd02040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406347d05040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d6265727301004d020400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01c10201b8000181050848547269756d7669726174654d656d626572730148547269756d7669726174654d656d62657273081c4d656d6265727301008505040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01c50201bc00018905093453656e6174654d656d62657273013453656e6174654d656d62657273081c4d656d6265727301008d05040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01c90201c0000191050a1c5574696c6974790001cd0201c4044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e0195050b105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e01e50201c8000199050c204d756c746973696701204d756c746973696704244d756c74697369677300010805029d05a105040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01e90201cc0c2c4465706f7369744261736518200029de070000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f7218200048e801000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e01a9050d20507265696d6167650120507265696d6167650c24537461747573466f720001040634ad050400049020546865207265717565737420737461747573206f66206120676976656e20686173682e4052657175657374537461747573466f720001040634b9050400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f7200010406c905cd0504000001f10201d40001d1050e245363686564756c657201245363686564756c6572103c496e636f6d706c65746553696e6365000010040000184167656e64610101040510d5050400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e1c5265747269657300010402dcf105040004210120526574727920636f6e66696775726174696f6e7320666f72206974656d7320746f2062652065786563757465642c20696e6465786564206279207461736b20616464726573732e184c6f6f6b75700001040504dc040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e01f50201d808344d6178696d756d5765696768742c400b0000dd0ee90213cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e01f5050f1450726f7879011450726f7879081c50726f786965730101040500f905240000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e7473010104050009062400000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01fd0201e4184050726f78794465706f736974426173651820008793030000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f721820408af7010000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310101400000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710104b00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651820005125020000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72182000990d040000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e011906102052656769737472790120526567697374727904284964656e746974794f6600010405001d0604000464204964656e746974792064617461206279206163636f756e7401050301ec0c4c4d61784164646974696f6e616c4669656c6473101001000000085420436f6e66696775726174696f6e206669656c6473a8204d6178696d756d20757365722d636f6e66696775726564206164646974696f6e616c206669656c647338496e697469616c4465706f736974182000e1f5050000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f736974182000e1f50500000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e012106112c436f6d6d69746d656e7473012c436f6d6d69746d656e74730830436f6d6d69746d656e744f6600010806057902250604000464204964656e746974792064617461206279206163636f756e74384c617374436f6d6d69746d656e74000108060579021004000001110401f010244d61784669656c647310100100000004290120546865206d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c647320746861742063616e20626520616464656420746f206120636f6d6d69746d656e7438496e697469616c4465706f7369741820000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f73697418200000000000000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e24526174654c696d6974101064000000047c205468652072617465206c696d697420666f7220636f6d6d69746d656e7473012906122841646d696e5574696c730001250501f400012d061320536166654d6f64650120536166654d6f64650830456e7465726564556e74696c000010040014290120436f6e7461696e7320746865206c61737420626c6f636b206e756d62657220746861742074686520736166652d6d6f64652077696c6c2072656d61696e20656e746572656420696e2e00a4202053657420746f20604e6f6e6560207768656e20736166652d6d6f6465206973206578697465642e00510120536166652d6d6f6465206973206175746f6d61746963616c6c7920657869746564207768656e207468652063757272656e7420626c6f636b206e756d626572206578636565647320746869732076616c75652e204465706f736974730001080505310618040010350120486f6c64732074686520726573657276652074686174207761732074616b656e2066726f6d20616e206163636f756e74206174206120737065636966696320626c6f636b206e756d6265722e00750120546869732068656c707320676f7665726e616e636520746f206861766520616e206f76657276696577206f66206f75747374616e64696e67206465706f7369747320746861742073686f756c642062652072657475726e6564206f722420736c61736865642e01290501f81434456e7465724475726174696f6e10100000000004210120466f7220686f77206d616e7920626c6f636b732074686520736166652d6d6f64652077696c6c20626520656e7465726564206279205b6050616c6c65743a3a656e746572605d2e38457874656e644475726174696f6e1010000000000c4d0120466f7220686f77206d616e7920626c6f636b732074686520736166652d6d6f64652063616e20626520657874656e6465642062792065616368205b6050616c6c65743a3a657874656e64605d2063616c6c2e004d01205468697320646f6573206e6f7420696d706f736520612068617264206c696d69742061732074686520736166652d6d6f64652063616e20626520657874656e646564206d756c7469706c652074696d65732e48456e7465724465706f736974416d6f756e74350604000c05012054686520616d6f756e7420746861742077696c6c2062652072657365727665642075706f6e2063616c6c696e67205b6050616c6c65743a3a656e746572605d2e00410120604e6f6e656020646973616c6c6f7773207065726d697373696f6e6c6573736c7920656e61626c696e672074686520736166652d6d6f646520616e6420697320612073616e652064656661756c742e4c457874656e644465706f736974416d6f756e74350604000c09012054686520616d6f756e7420746861742077696c6c2062652072657365727665642075706f6e2063616c6c696e67205b6050616c6c65743a3a657874656e64605d2e00450120604e6f6e656020646973616c6c6f7773207065726d697373696f6e6c6573736c7920657874656e64696e672074686520736166652d6d6f646520616e6420697320612073616e652064656661756c742e3052656c6561736544656c6179c101040020490120546865206d696e696d616c206475726174696f6e2061206465706f7369742077696c6c2072656d61696e20726573657276656420616674657220736166652d6d6f646520697320656e7465726564206f72490120657874656e6465642c20756e6c657373205b6050616c6c65743a3a666f7263655f72656c656173655f6465706f736974605d206973207375636365737366756c6c792063616c6c656420736f6f6e65722e005901204576657279206465706f736974206973207469656420746f20612073706563696669632061637469766174696f6e206f7220657874656e73696f6e2c20746875732065616368206465706f7369742063616e206265e82072656c656173656420696e646570656e64656e746c79206166746572207468652064656c617920666f7220697420686173207061737365642e00450120604e6f6e656020646973616c6c6f7773207065726d697373696f6e6c6573736c792072656c656173696e672074686520736166652d6d6f6465206465706f7369747320616e6420697320612073616e65242064656661756c742e0139061420457468657265756d0120457468657265756d141c50656e64696e6701003d06040004d02043757272656e74206275696c64696e6720626c6f636b2773207472616e73616374696f6e7320616e642072656365697074732e3043757272656e74426c6f636b0000610604000470205468652063757272656e7420457468657265756d20626c6f636b2e3c43757272656e745265636569707473000075060400047c205468652063757272656e7420457468657265756d2072656365697074732e6843757272656e745472616e73616374696f6e53746174757365730000790604000488205468652063757272656e74207472616e73616374696f6e2073746174757365732e24426c6f636b486173680101040539013480000000000000000000000000000000000000000000000000000000000000000000012d0501010100017d06150c45564d010c45564d14304163636f756e74436f64657301010402050138040000504163636f756e74436f6465734d6574616461746100010402050181060400003c4163636f756e7453746f7261676573010108020285063480000000000000000000000000000000000000000000000000000000000000000000205375696369646564000104020501a40400004c57686974656c697374656443726561746f727301006505040000015505012d0100018906162845564d436861696e4964012845564d436861696e4964041c436861696e49640100182000000000000000000448205468652045564d20636861696e2049442e00000000172844796e616d6963466565012844796e616d6963466565082c4d696e47617350726963650100390180000000000000000000000000000000000000000000000000000000000000000000445461726765744d696e476173507269636500003901040000016905000000181c42617365466565011c42617365466565083442617365466565506572476173010039018000c817a8040000000000000000000000000000000000000000000000000000000028456c6173746963697479010041011048e8010000016d050135010000198d06042c48436865636b4e6f6e5a65726f53656e6465729906a440436865636b5370656356657273696f6e9d061038436865636b547856657273696f6ea1061030436865636b47656e65736973a5063438436865636b4d6f7274616c697479a9063428436865636b4e6f6e6365b106a42c436865636b576569676874b506a4604368617267655472616e73616374696f6e5061796d656e74b906a46053756274656e736f725369676e6564457874656e73696f6ebd06a468436f6d6d69746d656e74735369676e6564457874656e73696f6ec506a444436865636b4d6574616461746148617368c906e0c106" +METADATA = "0x6d6574610e6107000c1c73705f636f72651863727970746f2c4163636f756e7449643332000004000401205b75383b2033325d0000040000032000000008000800000503000c08306672616d655f73797374656d2c4163636f756e74496e666f08144e6f6e636501102c4163636f756e74446174610114001401146e6f6e63651001144e6f6e6365000124636f6e73756d657273100120526566436f756e7400012470726f766964657273100120526566436f756e7400012c73756666696369656e7473100120526566436f756e740001106461746114012c4163636f756e74446174610000100000050500140c3c70616c6c65745f62616c616e6365731474797065732c4163636f756e7444617461041c42616c616e63650118001001106672656518011c42616c616e6365000120726573657276656418011c42616c616e636500011866726f7a656e18011c42616c616e6365000114666c6167731c01284578747261466c61677300001800000506001c0c3c70616c6c65745f62616c616e636573147479706573284578747261466c61677300000400200110753132380000200000050700240000050000280c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454012c000c01186e6f726d616c2c01045400012c6f7065726174696f6e616c2c0104540001246d616e6461746f72792c01045400002c0c2873705f77656967687473247765696768745f76321857656967687400000801207265665f74696d6530010c75363400012870726f6f665f73697a6530010c753634000030000006180034083c7072696d69746976655f74797065731048323536000004000401205b75383b2033325d00003800000208003c102873705f72756e74696d651c67656e65726963186469676573741844696765737400000401106c6f677340013c5665633c4469676573744974656d3e000040000002440044102873705f72756e74696d651c67656e6572696318646967657374284469676573744974656d0001142850726552756e74696d650800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e00060024436f6e73656e7375730800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000400105365616c0800480144436f6e73656e737573456e67696e654964000038011c5665633c75383e000500144f74686572040038011c5665633c75383e0000006452756e74696d65456e7669726f6e6d656e745570646174656400080000480000030400000008004c00000250005008306672616d655f73797374656d2c4576656e745265636f7264080445015404540134000c011470686173655501011450686173650001146576656e7454010445000118746f70696373b401185665633c543e00005408586e6f64655f73756274656e736f725f72756e74696d653052756e74696d654576656e740001581853797374656d04005801706672616d655f73797374656d3a3a4576656e743c52756e74696d653e0000001c4772616e64706104007c015470616c6c65745f6772616e6470613a3a4576656e740004002042616c616e63657304008c017c70616c6c65745f62616c616e6365733a3a4576656e743c52756e74696d653e000500485472616e73616374696f6e5061796d656e7404009401a870616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4576656e743c52756e74696d653e0006003c53756274656e736f724d6f64756c65040098018070616c6c65745f73756274656e736f723a3a4576656e743c52756e74696d653e0007002c547269756d7669726174650400c001fc70616c6c65745f636f6c6c6563746976653a3a4576656e743c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e00080048547269756d7669726174654d656d626572730400c401fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365313e0009003453656e6174654d656d626572730400c801fc70616c6c65745f6d656d626572736869703a3a4576656e743c52756e74696d652c2070616c6c65745f6d656d626572736869703a3a496e7374616e6365323e000a001c5574696c6974790400cc015470616c6c65745f7574696c6974793a3a4576656e74000b00105375646f0400d0016c70616c6c65745f7375646f3a3a4576656e743c52756e74696d653e000c00204d756c74697369670400d4017c70616c6c65745f6d756c74697369673a3a4576656e743c52756e74696d653e000d0020507265696d6167650400dc017c70616c6c65745f707265696d6167653a3a4576656e743c52756e74696d653e000e00245363686564756c65720400e0018070616c6c65745f7363686564756c65723a3a4576656e743c52756e74696d653e000f001450726f78790400ec017070616c6c65745f70726f78793a3a4576656e743c52756e74696d653e0010002052656769737472790400f4017c70616c6c65745f72656769737472793a3a4576656e743c52756e74696d653e0011002c436f6d6d69746d656e74730400f8018870616c6c65745f636f6d6d69746d656e74733a3a4576656e743c52756e74696d653e0012002841646d696e5574696c730400fc018870616c6c65745f61646d696e5f7574696c733a3a4576656e743c52756e74696d653e00130020536166654d6f646504000101018070616c6c65745f736166655f6d6f64653a3a4576656e743c52756e74696d653e00140020457468657265756d04000901015870616c6c65745f657468657265756d3a3a4576656e740015000c45564d04003501016870616c6c65745f65766d3a3a4576656e743c52756e74696d653e0016001c4261736546656504003d01015870616c6c65745f626173655f6665653a3a4576656e74001900144472616e6404004d01017070616c6c65745f6472616e643a3a4576656e743c52756e74696d653e001a0000580c306672616d655f73797374656d1870616c6c6574144576656e7404045400011c4045787472696e7369635375636365737304013464697370617463685f696e666f5c01304469737061746368496e666f00000490416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e3c45787472696e7369634661696c656408013864697370617463685f6572726f7268013444697370617463684572726f7200013464697370617463685f696e666f5c01304469737061746368496e666f00010450416e2065787472696e736963206661696c65642e2c436f64655570646174656400020450603a636f6465602077617320757064617465642e284e65774163636f756e7404011c6163636f756e74000130543a3a4163636f756e7449640003046841206e6577206163636f756e742077617320637265617465642e344b696c6c65644163636f756e7404011c6163636f756e74000130543a3a4163636f756e74496400040458416e206163636f756e7420776173207265617065642e2052656d61726b656408011873656e646572000130543a3a4163636f756e7449640001106861736834011c543a3a48617368000504704f6e206f6e2d636861696e2072656d61726b2068617070656e65642e4455706772616465417574686f72697a6564080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e240110626f6f6c00060468416e20757067726164652077617320617574686f72697a65642e04704576656e7420666f72207468652053797374656d2070616c6c65742e5c0c346672616d655f737570706f7274206469737061746368304469737061746368496e666f00000c01187765696768742c0118576569676874000114636c6173736001344469737061746368436c617373000120706179735f666565640110506179730000600c346672616d655f737570706f7274206469737061746368344469737061746368436c61737300010c184e6f726d616c0000002c4f7065726174696f6e616c000100244d616e6461746f727900020000640c346672616d655f737570706f727420646973706174636810506179730001080c596573000000084e6f0001000068082873705f72756e74696d653444697370617463684572726f72000138144f746865720000003043616e6e6f744c6f6f6b7570000100244261644f726967696e000200184d6f64756c6504006c012c4d6f64756c654572726f7200030044436f6e73756d657252656d61696e696e670004002c4e6f50726f76696465727300050040546f6f4d616e79436f6e73756d65727300060014546f6b656e0400700128546f6b656e4572726f720007002841726974686d65746963040074013c41726974686d657469634572726f72000800345472616e73616374696f6e616c04007801485472616e73616374696f6e616c4572726f7200090024457868617573746564000a0028436f7272757074696f6e000b002c556e617661696c61626c65000c0038526f6f744e6f74416c6c6f776564000d00006c082873705f72756e74696d652c4d6f64756c654572726f720000080114696e64657808010875380001146572726f7248018c5b75383b204d41585f4d4f44554c455f4552524f525f454e434f4445445f53495a455d000070082873705f72756e74696d6528546f6b656e4572726f720001284046756e6473556e617661696c61626c65000000304f6e6c7950726f76696465720001003042656c6f774d696e696d756d0002003043616e6e6f7443726561746500030030556e6b6e6f776e41737365740004001846726f7a656e0005002c556e737570706f727465640006004043616e6e6f74437265617465486f6c64000700344e6f74457870656e6461626c650008001c426c6f636b65640009000074083473705f61726974686d657469633c41726974686d657469634572726f7200010c24556e646572666c6f77000000204f766572666c6f77000100384469766973696f6e42795a65726f0002000078082873705f72756e74696d65485472616e73616374696f6e616c4572726f72000108304c696d6974526561636865640000001c4e6f4c61796572000100007c0c3870616c6c65745f6772616e6470611870616c6c6574144576656e7400010c384e6577417574686f726974696573040134617574686f726974795f736574800134417574686f726974794c6973740000048c4e657720617574686f726974792073657420686173206265656e206170706c6965642e185061757365640001049843757272656e7420617574686f726974792073657420686173206265656e207061757365642e1c526573756d65640002049c43757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65748000000284008400000408881800880c5073705f636f6e73656e7375735f6772616e6470610c617070185075626c69630000040004013c656432353531393a3a5075626c696300008c0c3c70616c6c65745f62616c616e6365731870616c6c6574144576656e740804540004490001581c456e646f77656408011c6163636f756e74000130543a3a4163636f756e744964000130667265655f62616c616e6365180128543a3a42616c616e6365000004b8416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e20447573744c6f737408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650001083d01416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c78726573756c74696e6720696e20616e206f75747269676874206c6f73732e205472616e736665720c011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650002044c5472616e73666572207375636365656465642e2842616c616e636553657408010c77686f000130543a3a4163636f756e74496400011066726565180128543a3a42616c616e636500030468412062616c616e6365207761732073657420627920726f6f742e20526573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000404e0536f6d652062616c616e63652077617320726573657276656420286d6f7665642066726f6d206672656520746f207265736572766564292e28556e726573657276656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000504e8536f6d652062616c616e63652077617320756e726573657276656420286d6f7665642066726f6d20726573657276656420746f2066726565292e4852657365727665526570617472696174656410011066726f6d000130543a3a4163636f756e744964000108746f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500014864657374696e6174696f6e5f7374617475739001185374617475730006084d01536f6d652062616c616e636520776173206d6f7665642066726f6d207468652072657365727665206f6620746865206669727374206163636f756e7420746f20746865207365636f6e64206163636f756e742ed846696e616c20617267756d656e7420696e64696361746573207468652064657374696e6174696f6e2062616c616e636520747970652e1c4465706f73697408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000704d8536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20576974686472617708010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650008041d01536f6d6520616d6f756e74207761732077697468647261776e2066726f6d20746865206163636f756e742028652e672e20666f72207472616e73616374696f6e2066656573292e1c536c617368656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e63650009040101536f6d6520616d6f756e74207761732072656d6f7665642066726f6d20746865206163636f756e742028652e672e20666f72206d69736265686176696f72292e184d696e74656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000a049c536f6d6520616d6f756e7420776173206d696e74656420696e746f20616e206163636f756e742e184275726e656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000b049c536f6d6520616d6f756e7420776173206275726e65642066726f6d20616e206163636f756e742e2453757370656e64656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000c041501536f6d6520616d6f756e74207761732073757370656e6465642066726f6d20616e206163636f756e74202869742063616e20626520726573746f726564206c61746572292e20526573746f72656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e6365000d04a4536f6d6520616d6f756e742077617320726573746f72656420696e746f20616e206163636f756e742e20557067726164656404010c77686f000130543a3a4163636f756e744964000e0460416e206163636f756e74207761732075706772616465642e18497373756564040118616d6f756e74180128543a3a42616c616e6365000f042d01546f74616c2069737375616e63652077617320696e637265617365642062792060616d6f756e74602c206372656174696e6720612063726564697420746f2062652062616c616e6365642e2452657363696e646564040118616d6f756e74180128543a3a42616c616e63650010042501546f74616c2069737375616e636520776173206465637265617365642062792060616d6f756e74602c206372656174696e672061206465627420746f2062652062616c616e6365642e184c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500110460536f6d652062616c616e636520776173206c6f636b65642e20556e6c6f636b656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500120468536f6d652062616c616e63652077617320756e6c6f636b65642e1846726f7a656e08010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500130460536f6d652062616c616e6365207761732066726f7a656e2e1854686177656408010c77686f000130543a3a4163636f756e744964000118616d6f756e74180128543a3a42616c616e636500140460536f6d652062616c616e636520776173207468617765642e4c546f74616c49737375616e6365466f7263656408010c6f6c64180128543a3a42616c616e636500010c6e6577180128543a3a42616c616e6365001504ac5468652060546f74616c49737375616e6365602077617320666f72636566756c6c79206368616e6765642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65749014346672616d655f737570706f72741874726169747318746f6b656e73106d6973633442616c616e6365537461747573000108104672656500000020526573657276656400010000940c6870616c6c65745f7472616e73616374696f6e5f7061796d656e741870616c6c6574144576656e74040454000104485472616e73616374696f6e466565506169640c010c77686f000130543a3a4163636f756e74496400012861637475616c5f66656518013042616c616e63654f663c543e00010c74697018013042616c616e63654f663c543e000008590141207472616e73616374696f6e20666565206061637475616c5f666565602c206f662077686963682060746970602077617320616464656420746f20746865206d696e696d756d20696e636c7573696f6e206665652c5c686173206265656e2070616964206279206077686f602e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574980c4070616c6c65745f73756274656e736f721870616c6c6574144576656e7404045400015d01304e6574776f726b416464656408009c010c75313600009c010c7531360000045c61206e6577206e6574776f726b2069732061646465642e384e6574776f726b52656d6f76656404009c010c7531360001045461206e6574776f726b2069732072656d6f7665642e285374616b6541646465641400000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018010c753634000018010c75363400009c010c75313600020459017374616b6520686173206265656e207472616e736665727265642066726f6d20746865206120636f6c646b6579206163636f756e74206f6e746f2074686520686f746b6579207374616b696e67206163636f756e742e305374616b6552656d6f7665641400000130543a3a4163636f756e7449640000000130543a3a4163636f756e744964000018010c753634000018010c75363400009c010c75313600030441017374616b6520686173206265656e2072656d6f7665642066726f6d2074686520686f746b6579207374616b696e67206163636f756e74206f6e746f2074686520636f6c646b6579206163636f756e742e285374616b654d6f7665641800000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c7531360000000130543a3a4163636f756e74496400009c010c753136000018010c753634000404c1017374616b6520686173206265656e206d6f7665642066726f6d206f726967696e2028686f746b65792c207375626e65742049442920746f2064657374696e6174696f6e2028686f746b65792c207375626e657420494429206f66207468697320616d6f756e742028696e2054414f292e285765696768747353657408009c010c75313600009c010c753136000504e4612063616c6c6572207375636365737366756c6c7920736574732074686569722077656967687473206f6e2061207375626e6574776f726b2e404e6575726f6e526567697374657265640c009c010c75313600009c010c7531360000000130543a3a4163636f756e744964000604d861206e6577206e6575726f6e206163636f756e7420686173206265656e207265676973746572656420746f2074686520636861696e2e5442756c6b4e6575726f6e735265676973746572656408009c010c75313600009c010c753136000704c06d756c7469706c6520756964732068617665206265656e20636f6e63757272656e746c7920726567697374657265642e3c42756c6b42616c616e63657353657408009c010c75313600009c010c7531360008044c4649584d453a204e6f74207573656420796574444d6178416c6c6f7765645569647353657408009c010c75313600009c010c753136000904bc6d617820616c6c6f776564207569647320686173206265656e2073657420666f722061207375626e6574776f726b2e444d61785765696768744c696d697453657408009c010c75313600009c010c753136000a04cc746865206d617820776569676874206c696d697420686173206265656e2073657420666f722061207375626e6574776f726b2e34446966666963756c747953657408009c010c753136000018010c753634000b04a474686520646966666963756c747920686173206265656e2073657420666f722061207375626e65742e5441646a7573746d656e74496e74657276616c53657408009c010c75313600009c010c753136000c04b07468652061646a7573746d656e7420696e74657276616c2069732073657420666f722061207375626e65742e68526567697374726174696f6e506572496e74657276616c53657408009c010c75313600009c010c753136000d04b8726567697374726174696f6e2070657220696e74657276616c2069732073657420666f722061207375626e65742e6c4d6178526567697374726174696f6e73506572426c6f636b53657408009c010c75313600009c010c753136000e048c776520736574206d617820726567697374726174696f6e732070657220626c6f636b2e4441637469766974794375746f666653657408009c010c75313600009c010c753136000f049c616e206163746976697479206375746f66662069732073657420666f722061207375626e65742e1852686f53657408009c010c75313600009c010c7531360010044452686f2076616c7565206973207365742e204b6170706153657408009c010c75313600009c010c753136001104684b617070612069732073657420666f722061207375626e65742e4c4d696e416c6c6f77656457656967687453657408009c010c75313600009c010c753136001204ac6d696e696d756d20616c6c6f776564207765696768742069732073657420666f722061207375626e65742e5056616c696461746f725072756e654c656e53657408009c010c753136000018010c753634001304a87468652076616c696461746f72207072756e696e67206c656e67746820686173206265656e207365742e485363616c696e674c6177506f77657253657408009c010c75313600009c010c753136001404c0746865207363616c696e67206c617720706f77657220686173206265656e2073657420666f722061207375626e65742e5857656967687473536574526174654c696d697453657408009c010c753136000018010c753634001504c477656967687473207365742072617465206c696d697420686173206265656e2073657420666f722061207375626e65742e44496d6d756e697479506572696f6453657408009c010c75313600009c010c75313600160490696d6d756e69747920706572696f642069732073657420666f722061207375626e65742e54426f6e64734d6f76696e674176657261676553657408009c010c753136000018010c753634001704a4626f6e6473206d6f76696e6720617665726167652069732073657420666f722061207375626e65742e3c426f6e647350656e616c747953657408009c010c75313600009c010c75313600180488626f6e64732070656e616c74792069732073657420666f722061207375626e65742e5c4d6178416c6c6f77656456616c696461746f727353657408009c010c75313600009c010c753136001904e473657474696e6720746865206d6178206e756d626572206f6620616c6c6f7765642076616c696461746f7273206f6e2061207375626e65742e2841786f6e53657276656408009c010c7531360000000130543a3a4163636f756e744964001a04d07468652061786f6e2073657276657220696e666f726d6174696f6e20697320616464656420746f20746865206e6574776f726b2e4050726f6d65746865757353657276656408009c010c7531360000000130543a3a4163636f756e744964001b04e87468652070726f6d6574686575732073657276657220696e666f726d6174696f6e20697320616464656420746f20746865206e6574776f726b2e44456d697373696f6e56616c756573536574001c04a0656d697373696f6e20726174696f7320666f7220616c6c206e6574776f726b73206973207365742e3444656c656761746541646465640c00000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c753136001d047c6120686f746b657920686173206265636f6d6520612064656c65676174652e3844656661756c7454616b6553657404009c010c753136001e04607468652064656661756c742074616b65206973207365742e505765696768747356657273696f6e4b657953657408009c010c753136000018010c753634001f04a4776569676874732076657273696f6e206b65792069732073657420666f722061206e6574776f726b2e404d696e446966666963756c747953657408009c010c753136000018010c7536340020049073657474696e67206d696e20646966666963756c7479206f6e2061206e6574776f726b2e404d6178446966666963756c747953657408009c010c753136000018010c7536340021049073657474696e67206d617820646966666963756c7479206f6e2061206e6574776f726b2e4c53657276696e67526174654c696d697453657408009c010c753136000018010c753634002204a873657474696e67207468652070726f6d6574686575732073657276696e672072617465206c696d69742e1c4275726e53657408009c010c753136000018010c7536340023046873657474696e67206275726e206f6e2061206e6574776f726b2e284d61784275726e53657408009c010c753136000018010c7536340024047873657474696e67206d6178206275726e206f6e2061206e6574776f726b2e284d696e4275726e53657408009c010c753136000018010c7536340025047873657474696e67206d696e206275726e206f6e2061206e6574776f726b2e385478526174654c696d6974536574040018010c7536340026048c73657474696e6720746865207472616e73616374696f6e2072617465206c696d69742e68547844656c656761746554616b65526174654c696d6974536574040018010c753634002704c473657474696e67207468652064656c65676174652074616b65207472616e73616374696f6e2072617465206c696d69742e6854784368696c644b657954616b65526174654c696d6974536574040018010c753634002804c473657474696e6720746865206368696c646b65792074616b65207472616e73616374696f6e2072617465206c696d69742e484d696e4368696c644b657954616b6553657404009c010c753136002904646d696e696d756d206368696c646b65792074616b6520736574484d61784368696c644b657954616b6553657404009c010c753136002a04646d6178696d756d206368696c646b65792074616b65207365743c4368696c644b657954616b655365740800000130543a3a4163636f756e74496400009c010c753136002b04446368696c646b65792074616b65207365741453756469640400a001384469737061746368526573756c74002c045061207375646f2063616c6c20697320646f6e652e4c526567697374726174696f6e416c6c6f77656408009c010c7531360000240110626f6f6c002d04c0726567697374726174696f6e20697320616c6c6f7765642f646973616c6c6f77656420666f722061207375626e65742e58506f77526567697374726174696f6e416c6c6f77656408009c010c7531360000240110626f6f6c002e04d0504f5720726567697374726174696f6e20697320616c6c6f7765642f646973616c6c6f77656420666f722061207375626e65742e2054656d706f53657408009c010c75313600009c010c753136002f046873657474696e672074656d706f206f6e2061206e6574776f726b7452414f52656379636c6564466f72526567697374726174696f6e53657408009c010c753136000018010c753634003004a873657474696e67207468652052414f2072656379636c656420666f7220726567697374726174696f6e2e445374616b655468726573686f6c64536574040018010c753634003104bc6d696e207374616b652069732073657420666f722076616c696461746f727320746f2073657420776569676874732e7453656e61746552657175697265645374616b6550657263656e74536574040018010c753634003204090173657474696e6720746865206d696e696d756d207265717569726564207374616b6520616d6f756e7420666f722073656e61746520726567697374726174696f6e2e4841646a7573746d656e74416c70686153657408009c010c753136000018010c753634003304a473657474696e67207468652061646a7573746d656e7420616c706861206f6e2061207375626e65742e184661756365740800000130543a3a4163636f756e744964000018010c75363400340494746865206661756365742069742063616c6c6564206f6e207468652074657374206e65742e445375626e65744f776e657243757453657404009c010c75313600350470746865207375626e6574206f776e657220637574206973207365742e4c4e6574776f726b526174654c696d6974536574040018010c7536340036049c746865206e6574776f726b206372656174696f6e2072617465206c696d6974206973207365742e604e6574776f726b496d6d756e697479506572696f64536574040018010c7536340037048c746865206e6574776f726b20696d6d756e69747920706572696f64206973207365742e544e6574776f726b4d696e4c6f636b436f7374536574040018010c753634003804a0746865206e6574776f726b206d696e696d756d206c6f636b696e6720636f7374206973207365742e385375626e65744c696d697453657404009c010c75313600390490746865206d6178696d756d206e756d626572206f66207375626e657473206973207365748c4e6574776f726b4c6f636b436f7374526564756374696f6e496e74657276616c536574040018010c753634003a0478746865206c6f636b20636f737420726564756374696f6e206973207365743454616b654465637265617365640c00000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c753136003b04947468652074616b6520666f7220612064656c6567617465206973206465637265617365642e3454616b65496e637265617365640c00000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c753136003c04947468652074616b6520666f7220612064656c656761746520697320696e637265617365642e34486f746b6579537761707065640c011c636f6c646b6579000130543a3a4163636f756e7449640464746865206163636f756e74204944206f6620636f6c646b657901286f6c645f686f746b6579000130543a3a4163636f756e7449640470746865206163636f756e74204944206f66206f6c6420686f746b657901286e65775f686f746b6579000130543a3a4163636f756e7449640470746865206163636f756e74204944206f66206e657720686f746b65793d045474686520686f746b65792069732073776170706564484d617844656c656761746554616b6553657404009c010c753136003e04d86d6178696d756d2064656c65676174652074616b6520697320736574206279207375646f2f61646d696e207472616e73616374696f6e484d696e44656c656761746554616b6553657404009c010c753136003f04d86d696e696d756d2064656c65676174652074616b6520697320736574206279207375646f2f61646d696e207472616e73616374696f6e3853656e61746541646a75737465640801286f6c645f6d656d626572a801504f7074696f6e3c543a3a4163636f756e7449643e04bc746865206163636f756e74204944206f6620746865206f6c642073656e617465206d656d6265722c20696620616e7901286e65775f6d656d626572000130543a3a4163636f756e744964049c746865206163636f756e74204944206f6620746865206e65772073656e617465206d656d62657240048861206d656d626572206f66207468652073656e6174652069732061646a757374656438436f6c646b6579537761707065640c012c6f6c645f636f6c646b6579000130543a3a4163636f756e7449640474746865206163636f756e74204944206f66206f6c6420636f6c646b6579012c6e65775f636f6c646b6579000130543a3a4163636f756e7449640474746865206163636f756e74204944206f66206e657720636f6c646b65790124737761705f636f737418010c7536340434746865207377617020636f73744104684120636f6c646b657920686173206265656e2073776170706564b0416c6c42616c616e6365556e7374616b6564416e645472616e73666572726564546f4e6577436f6c646b65790c013c63757272656e745f636f6c646b6579000130543a3a4163636f756e7449640494546865206163636f756e74204944206f66207468652063757272656e7420636f6c646b6579012c6e65775f636f6c646b6579000130543a3a4163636f756e7449640484546865206163636f756e74204944206f6620746865206e657720636f6c646b65790134746f74616c5f62616c616e6365180185013c3c5420617320436f6e6669673e3a3a43757272656e63792061732066756e6769626c653a3a496e73706563743c3c54206173206672616d655f73797374656d3a3a0a436f6e6669673e3a3a4163636f756e7449642c3e3e3a3a42616c616e6365047c54686520746f74616c2062616c616e6365206f662074686520686f746b657942042901416c6c2062616c616e6365206f66206120686f746b657920686173206265656e20756e7374616b656420616e64207472616e7366657272656420746f2061206e657720636f6c646b657950436f6c646b6579537761705363686564756c656410012c6f6c645f636f6c646b6579000130543a3a4163636f756e7449640484546865206163636f756e74204944206f6620746865206f6c6420636f6c646b6579012c6e65775f636f6c646b6579000130543a3a4163636f756e7449640484546865206163636f756e74204944206f6620746865206e657720636f6c646b6579013c657865637574696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e04a8546865206172626974726174696f6e20626c6f636b20666f722074686520636f6c646b657920737761700124737761705f636f737418010c7536340434546865207377617020636f73744304844120636f6c646b6579207377617020686173206265656e207363686564756c6564644172626974726174696f6e506572696f64457874656e64656404011c636f6c646b6579000130543a3a4163636f756e7449640474546865206163636f756e74204944206f662074686520636f6c646b65794404a0546865206172626974726174696f6e20706572696f6420686173206265656e20657874656e646564505365744368696c6472656e5363686564756c65641000000130543a3a4163636f756e74496400009c010c753136000018010c7536340000ac01605665633c287536342c20543a3a4163636f756e744964293e004504cc53657474696e67206f66206368696c6472656e206f66206120686f746b65792068617665206265656e207363686564756c65642c5365744368696c6472656e0c00000130543a3a4163636f756e74496400009c010c7531360000ac01605665633c287536342c20543a3a4163636f756e744964293e00460498546865206368696c6472656e206f66206120686f746b65792068617665206265656e20736574484e6574776f726b4d61785374616b6553657408009c010c753136000018010c75363400470498546865206e6574776f726b206d6178696d756d207374616b6520686173206265656e2073657440436861696e4964656e746974795365740400000130543a3a4163636f756e74496400480498546865206964656e74697479206f66206120636f6c646b657920686173206265656e20736574445375626e65744964656e7469747953657404009c010c75313600490494546865206964656e74697479206f662061207375626e657420686173206265656e20736574545375626e65744964656e7469747952656d6f76656404009c010c753136004a04a4546865206964656e74697479206f662061207375626e657420686173206265656e2072656d6f76656460446973736f6c76654e6574776f726b5363686564756c65640c011c6163636f756e74000130543a3a4163636f756e74496404d8546865206163636f756e74204944207363686564756c652074686520646973736f6c7665206e6574776f726b206578747269736e696301186e65747569649c010c75313604706e6574776f726b2049442077696c6c20626520646973736f6c766564013c657865637574696f6e5f626c6f636b100144426c6f636b4e756d626572466f723c543e048065787472696e73696320657865637574696f6e20626c6f636b206e756d6265724b049c4120646973736f6c7665206e6574776f726b2065787472696e736963207363686564756c65642e78436f6c646b6579537761705363686564756c654475726174696f6e5365740400100144426c6f636b4e756d626572466f723c543e004c04c8546865206475726174696f6e206f66207363686564756c6520636f6c646b6579207377617020686173206265656e2073657488446973736f6c76654e6574776f726b5363686564756c654475726174696f6e5365740400100144426c6f636b4e756d626572466f723c543e004d04b4546865206475726174696f6e206f6620646973736f6c7665206e6574776f726b20686173206265656e20736574504352563357656967687473436f6d6d69747465640c00000130543a3a4163636f756e74496400009c010c753136000034011048323536004e14e8436f6d6d69742d72657665616c20763320776569676874732068617665206265656e207375636365737366756c6c7920636f6d6d69747465642e00f42d202a2a77686f2a2a3a20546865206163636f756e74204944206f6620746865207573657220636f6d6d697474696e672074686520776569676874732e942d202a2a6e65747569642a2a3a20546865206e6574776f726b206964656e7469666965722efc2d202a2a636f6d6d69745f686173682a2a3a20546865206861736820726570726573656e74696e672074686520636f6d6d697474656420776569676874732e4057656967687473436f6d6d69747465640c00000130543a3a4163636f756e74496400009c010c753136000034011048323536004f14a4576569676874732068617665206265656e207375636365737366756c6c7920636f6d6d69747465642e00f42d202a2a77686f2a2a3a20546865206163636f756e74204944206f6620746865207573657220636f6d6d697474696e672074686520776569676874732e942d202a2a6e65747569642a2a3a20546865206e6574776f726b206964656e7469666965722efc2d202a2a636f6d6d69745f686173682a2a3a20546865206861736820726570726573656e74696e672074686520636f6d6d697474656420776569676874732e3c5765696768747352657665616c65640c00000130543a3a4163636f756e74496400009c010c753136000034011048323536005014a0576569676874732068617665206265656e207375636365737366756c6c792072657665616c65642e00f02d202a2a77686f2a2a3a20546865206163636f756e74204944206f662074686520757365722072657665616c696e672074686520776569676874732e942d202a2a6e65747569642a2a3a20546865206e6574776f726b206964656e7469666965722ed02d202a2a636f6d6d69745f686173682a2a3a205468652068617368206f66207468652072657665616c656420776569676874732e5057656967687473426174636852657665616c65640c00000130543a3a4163636f756e74496400009c010c7531360000b401245665633c483235363e005114b8576569676874732068617665206265656e207375636365737366756c6c792062617463682072657665616c65642e00f02d202a2a77686f2a2a3a20546865206163636f756e74204944206f662074686520757365722072657665616c696e672074686520776569676874732e942d202a2a6e65747569642a2a3a20546865206e6574776f726b206964656e7469666965722e41012d202a2a72657665616c65645f6861736865732a2a3a204120766563746f72206f662068617368657320726570726573656e74696e6720656163682072657665616c656420776569676874207365742e54426174636857656967687473436f6d706c657465640800b801445665633c436f6d706163743c7531363e3e0000000130543a3a4163636f756e744964005210d041206261746368206f66207765696768747320286f7220636f6d6d697473292068617665206265656e20666f7263652d7365742e0035012d202a2a6e6574756964732a2a3a20546865206e65747569647320746865736520776569676874732077657265207375636365737366756c6c79207365742f636f6d6d697474656420666f722ea82d202a2a77686f2a2a3a2054686520686f746b657920746861742073657420746869732062617463682e604261746368436f6d706c65746564576974684572726f7273005304c4412062617463682065787472696e73696320636f6d706c6574656420627574207769746820736f6d65206572726f72732e5442617463685765696768744974656d4661696c6564040068016473705f72756e74696d653a3a44697370617463684572726f7200540cb441207765696768742073657420616d6f6e672061206261746368206f662077656967687473206661696c65642e00ec2d202a2a6572726f722a2a3a20546865206469737061746368206572726f7220656d697474656420627920746865206661696c6564206974656d2e405374616b655472616e736665727265641800000130543a3a4163636f756e7449640000000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c75313600009c010c753136000018010c75363400550c29015374616b6520686173206265656e207472616e736665727265642066726f6d206f6e6520636f6c646b657920746f20616e6f74686572206f6e207468652073616d65207375626e65742e2c506172616d65746572733a6101286f726967696e5f636f6c646b65792c2064657374696e6174696f6e5f636f6c646b65792c20686f746b65792c206f726967696e5f6e65747569642c2064657374696e6174696f6e5f6e65747569642c20616d6f756e7429305374616b65537761707065641400000130543a3a4163636f756e7449640000000130543a3a4163636f756e74496400009c010c75313600009c010c753136000018010c7536340056104d015374616b6520686173206265656e20737761707065642066726f6d206f6e65207375626e657420746f20616e6f7468657220666f72207468652073616d6520636f6c646b65792d686f746b657920706169722e002c506172616d65746572733af028636f6c646b65792c20686f746b65792c206f726967696e5f6e65747569642c2064657374696e6174696f6e5f6e65747569642c20616d6f756e7429047c54686520604576656e746020656e756d206f6620746869732070616c6c65749c0000050400a00418526573756c7408045401a4044501680108084f6b0400a4000000000c4572720400680000010000a40000040000a804184f7074696f6e04045401000108104e6f6e6500000010536f6d650400000000010000ac000002b000b000000408180000b40000023400b8000002bc00bc0000069c00c00c4470616c6c65745f636f6c6c6563746976651870616c6c6574144576656e7408045400044900011c2050726f706f73656410011c6163636f756e74000130543a3a4163636f756e7449640494546865206163636f756e7420746861742070726f706f73656420746865206d6f74696f6e2e013870726f706f73616c5f696e64657810013450726f706f73616c496e646578046854686520696e646578206f66207468652070726f706f73616c2e013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e01247468726573686f6c6410012c4d656d626572436f756e7404a4546865207468726573686f6c64206f66206d656d62657220666f72207468652070726f706f73616c2e0008490141206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e3c604d656d626572436f756e7460292e14566f74656414011c6163636f756e74000130543a3a4163636f756e744964045c546865206163636f756e74207468617420766f7465642e013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0114766f746564240110626f6f6c04785768657468657220746865206163636f756e7420766f746564206179652e010c79657310012c4d656d626572436f756e740460546865206e756d626572206f662079657320766f7465732e01086e6f10012c4d656d626572436f756e74045c546865206e756d626572206f66206e6f20766f7465732e0108050141206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e671501612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e20417070726f76656404013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0204c041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2c446973617070726f76656404013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0304d041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e20457865637574656408013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0118726573756c74a001384469737061746368526573756c74047054686520726573756c74206f662074686520657865637574696f6e2e0404210141206d6f74696f6e207761732065786563757465643b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e384d656d626572457865637574656408013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e0118726573756c74a001384469737061746368526573756c74047054686520726573756c74206f662074686520657865637574696f6e2e05044901412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b20726573756c742077696c6c20626520604f6b602069662069742072657475726e656420776974686f7574206572726f722e18436c6f7365640c013470726f706f73616c5f6861736834011c543a3a4861736804645468652068617368206f66207468652070726f706f73616c2e010c79657310012c4d656d626572436f756e74048857686574686572207468652070726f706f73616c2077617320617070726f7665642e01086e6f10012c4d656d626572436f756e74048857686574686572207468652070726f706f73616c207761732072656a65637465642e06045501412070726f706f73616c2077617320636c6f736564206265636175736520697473207468726573686f6c64207761732072656163686564206f7220616674657220697473206475726174696f6e207761732075702e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c40c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574c80c4470616c6c65745f6d656d626572736869701870616c6c6574144576656e740804540004490001182c4d656d6265724164646564000004e054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e344d656d62657252656d6f766564000104e854686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e384d656d6265727353776170706564000204d854776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e304d656d6265727352657365740003041501546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e284b65794368616e676564000404844f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e1444756d6d790005046c5068616e746f6d206d656d6265722c206e6576657220757365642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574cc0c3870616c6c65745f7574696c6974791870616c6c6574144576656e74000118404261746368496e746572727570746564080114696e64657810010c7533320001146572726f7268013444697370617463684572726f7200000855014261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061734877656c6c20617320746865206572726f722e384261746368436f6d706c65746564000104c84261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e604261746368436f6d706c65746564576974684572726f7273000204b44261746368206f66206469737061746368657320636f6d706c657465642062757420686173206572726f72732e344974656d436f6d706c657465640003041d01412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206e6f206572726f722e284974656d4661696c65640401146572726f7268013444697370617463684572726f720004041101412073696e676c65206974656d2077697468696e2061204261746368206f6620646973706174636865732068617320636f6d706c657465642077697468206572726f722e30446973706174636865644173040118726573756c74a001384469737061746368526573756c7400050458412063616c6c2077617320646973706174636865642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d00c2c70616c6c65745f7375646f1870616c6c6574144576656e7404045400011014537564696404012c7375646f5f726573756c74a001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e00047041207375646f2063616c6c206a75737420746f6f6b20706c6163652e284b65794368616e67656408010c6f6c64a801504f7074696f6e3c543a3a4163636f756e7449643e04b4546865206f6c64207375646f206b657920286966206f6e65207761732070726576696f75736c7920736574292e010c6e6577000130543a3a4163636f756e7449640488546865206e6577207375646f206b657920286966206f6e652077617320736574292e010478546865207375646f206b657920686173206265656e20757064617465642e284b657952656d6f76656400020480546865206b657920776173207065726d616e656e746c792072656d6f7665642e285375646f4173446f6e6504012c7375646f5f726573756c74a001384469737061746368526573756c7404b454686520726573756c74206f66207468652063616c6c206d61646520627920746865207375646f20757365722e0304c841205b7375646f5f61735d2850616c6c65743a3a7375646f5f6173292063616c6c206a75737420746f6f6b20706c6163652e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d40c3c70616c6c65745f6d756c74697369671870616c6c6574144576656e740404540001102c4e65774d756c74697369670c0124617070726f76696e67000130543a3a4163636f756e7449640001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c486173680000048c41206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e404d756c7469736967417070726f76616c100124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74d8017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000104c841206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e404d756c74697369674578656375746564140124617070726f76696e67000130543a3a4163636f756e74496400012474696d65706f696e74d8017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000118726573756c74a001384469737061746368526573756c740002049c41206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e444d756c746973696743616e63656c6c656410012863616e63656c6c696e67000130543a3a4163636f756e74496400012474696d65706f696e74d8017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e0001206d756c7469736967000130543a3a4163636f756e74496400012463616c6c5f6861736804012043616c6c48617368000304a041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574d8083c70616c6c65745f6d756c74697369672454696d65706f696e74042c426c6f636b4e756d62657201100008011868656967687410012c426c6f636b4e756d626572000114696e64657810010c7533320000dc0c3c70616c6c65745f707265696d6167651870616c6c6574144576656e7404045400010c144e6f7465640401106861736834011c543a3a48617368000004684120707265696d61676520686173206265656e206e6f7465642e245265717565737465640401106861736834011c543a3a48617368000104784120707265696d61676520686173206265656e207265717565737465642e1c436c65617265640401106861736834011c543a3a486173680002046c4120707265696d616765206861732062656e20636c65617265642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574e00c4070616c6c65745f7363686564756c65721870616c6c6574144576656e74040454000124245363686564756c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c753332000004505363686564756c656420736f6d65207461736b2e2043616e63656c65640801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001044c43616e63656c656420736f6d65207461736b2e28446973706174636865640c01107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e801404f7074696f6e3c5461736b4e616d653e000118726573756c74a001384469737061746368526573756c74000204544469737061746368656420736f6d65207461736b2e2052657472795365741001107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e801404f7074696f6e3c5461736b4e616d653e000118706572696f64100144426c6f636b4e756d626572466f723c543e00011c726574726965730801087538000304a0536574206120726574727920636f6e66696775726174696f6e20666f7220736f6d65207461736b2e38526574727943616e63656c6c65640801107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e801404f7074696f6e3c5461736b4e616d653e000404ac43616e63656c206120726574727920636f6e66696775726174696f6e20666f7220736f6d65207461736b2e3c43616c6c556e617661696c61626c650801107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e801404f7074696f6e3c5461736b4e616d653e00050429015468652063616c6c20666f72207468652070726f7669646564206861736820776173206e6f7420666f756e6420736f20746865207461736b20686173206265656e2061626f727465642e38506572696f6469634661696c65640801107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e801404f7074696f6e3c5461736b4e616d653e0006043d0154686520676976656e207461736b2077617320756e61626c6520746f2062652072656e657765642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b2e2c52657472794661696c65640801107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e801404f7074696f6e3c5461736b4e616d653e0007085d0154686520676976656e207461736b2077617320756e61626c6520746f20626520726574726965642073696e636520746865206167656e64612069732066756c6c206174207468617420626c6f636b206f722074686572659c776173206e6f7420656e6f7567682077656967687420746f2072657363686564756c652069742e545065726d616e656e746c794f7665727765696768740801107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e0001086964e801404f7074696f6e3c5461736b4e616d653e000804f054686520676976656e207461736b2063616e206e657665722062652065786563757465642073696e6365206974206973206f7665727765696768742e04304576656e747320747970652ee400000408101000e804184f7074696f6e04045401040108104e6f6e6500000010536f6d650400040000010000ec0c3070616c6c65745f70726f78791870616c6c6574144576656e740404540001143450726f78794578656375746564040118726573756c74a001384469737061746368526573756c74000004bc412070726f78792077617320657865637574656420636f72726563746c792c20776974682074686520676976656e2e2c507572654372656174656410011070757265000130543a3a4163636f756e74496400010c77686f000130543a3a4163636f756e74496400012870726f78795f74797065f00130543a3a50726f787954797065000150646973616d626967756174696f6e5f696e6465789c010c753136000108dc412070757265206163636f756e7420686173206265656e2063726561746564206279206e65772070726f7879207769746820676976656e90646973616d626967756174696f6e20696e64657820616e642070726f787920747970652e24416e6e6f756e6365640c01107265616c000130543a3a4163636f756e74496400011470726f7879000130543a3a4163636f756e74496400012463616c6c5f6861736834013443616c6c486173684f663c543e000204e0416e20616e6e6f756e63656d656e742077617320706c6163656420746f206d616b6520612063616c6c20696e20746865206675747572652e2850726f7879416464656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065f00130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00030448412070726f7879207761732061646465642e3050726f787952656d6f76656410012464656c656761746f72000130543a3a4163636f756e74496400012464656c656761746565000130543a3a4163636f756e74496400012870726f78795f74797065f00130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00040450412070726f7879207761732072656d6f7665642e047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f008586e6f64655f73756274656e736f725f72756e74696d652450726f78795479706500013c0c416e79000000144f776e65720001002c4e6f6e437269746963616c0002002c4e6f6e5472616e736665720003001853656e617465000400304e6f6e46756e676962696c650005002c547269756d76697261746500060028476f7665726e616e63650007001c5374616b696e6700080030526567697374726174696f6e000900205472616e73666572000a0034536d616c6c5472616e73666572000b002c526f6f7457656967687473000c00244368696c644b657973000d00505375646f556e636865636b6564536574436f6465000e0000f40c3c70616c6c65745f72656769737472791870616c6c6574144576656e740404540001082c4964656e7469747953657404010c77686f000130543a3a4163636f756e74496404a0546865206163636f756e742074686174207265676973746572656420746865206964656e746974790004a4456d6974746564207768656e206120757365722072656769737465727320616e206964656e74697479444964656e74697479446973736f6c76656404010c77686f000130543a3a4163636f756e744964049c546865206163636f756e74207468617420646973736f6c76656420746865206964656e746974790104a4456d6974746564207768656e2061207573657220646973736f6c76657320616e206964656e74697479047c54686520604576656e746020656e756d206f6620746869732070616c6c6574f80c4870616c6c65745f636f6d6d69746d656e74731870616c6c6574144576656e7404045400010428436f6d6d69746d656e740801186e65747569649c010c7531360470546865206e6574756964206f662074686520636f6d6d69746d656e74010c77686f000130543a3a4163636f756e744964042c546865206163636f756e740004504120636f6d6d69746d656e742077617320736574047c54686520604576656e746020656e756d206f6620746869732070616c6c6574fc0c4870616c6c65745f61646d696e5f7574696c731870616c6c6574144576656e74040454000100047c54686520604576656e746020656e756d206f6620746869732070616c6c657401010c4070616c6c65745f736166655f6d6f64651870616c6c6574144576656e740404540001201c456e7465726564040114756e74696c100144426c6f636b4e756d626572466f723c543e000004dc54686520736166652d6d6f64652077617320656e746572656420756e74696c20696e636c75736976656c79207468697320626c6f636b2e20457874656e646564040114756e74696c100144426c6f636b4e756d626572466f723c543e000104e054686520736166652d6d6f64652077617320657874656e64656420756e74696c20696e636c75736976656c79207468697320626c6f636b2e18457869746564040118726561736f6e0501012845786974526561736f6e000204ac4578697465642074686520736166652d6d6f646520666f72206120737065636966696320726561736f6e2e344465706f736974506c6163656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e0003042501416e206163636f756e742072657365727665642066756e647320666f722065697468657220656e746572696e67206f7220657874656e64696e672074686520736166652d6d6f64652e3c4465706f73697452656c656173656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000404d0416e206163636f756e7420686164206120726573657276652072656c65617365642074686174207761732072657365727665642e384465706f736974536c617368656408011c6163636f756e74000130543a3a4163636f756e744964000118616d6f756e7418013042616c616e63654f663c543e000504c4416e206163636f756e7420686164207265736572766520736c61736865642074686174207761732072657365727665642e3443616e6e6f744465706f73697400060cf4436f756c64206e6f7420686f6c642066756e647320666f7220656e746572696e67206f7220657874656e64696e672074686520736166652d6d6f64652e00c054686973206572726f7220636f6d65732066726f6d2074686520756e6465726c79696e67206043757272656e6379602e3443616e6e6f7452656c6561736500070c0101436f756c64206e6f742072656c656173652066756e647320666f7220656e746572696e67206f7220657874656e64696e672074686520736166652d6d6f64652e00c054686973206572726f7220636f6d65732066726f6d2074686520756e6465726c79696e67206043757272656e6379602e047c54686520604576656e746020656e756d206f6620746869732070616c6c657405010c4070616c6c65745f736166655f6d6f64651870616c6c65742845786974526561736f6e0001081c54696d656f757400000014466f7263650001000009010c3c70616c6c65745f657468657265756d1870616c6c6574144576656e7400010420457865637574656414011066726f6d0d01011048313630000108746f0d010110483136300001407472616e73616374696f6e5f686173683401104832353600012c657869745f726561736f6e1501012845786974526561736f6e00012865787472615f6461746138011c5665633c75383e000004c8416e20657468657265756d207472616e73616374696f6e20776173207375636365737366756c6c792065786563757465642e047c54686520604576656e746020656e756d206f6620746869732070616c6c65740d01083c7072696d69746976655f7479706573104831363000000400110101205b75383b2032305d0000110100000314000000080015010c2065766d5f636f7265146572726f722845786974526561736f6e0001101c5375636365656404001901012c4578697453756363656564000000144572726f7204001d010124457869744572726f720001001852657665727404002d0101284578697452657665727400020014466174616c04003101012445786974466174616c0003000019010c2065766d5f636f7265146572726f722c457869745375636365656400010c1c53746f707065640000002052657475726e6564000100205375696369646564000200001d010c2065766d5f636f7265146572726f7224457869744572726f7200014038537461636b556e646572666c6f7700000034537461636b4f766572666c6f770001002c496e76616c69644a756d7000020030496e76616c696452616e67650003004444657369676e61746564496e76616c69640004002c43616c6c546f6f446565700005003c437265617465436f6c6c6973696f6e0006004c437265617465436f6e74726163744c696d69740007002c496e76616c6964436f64650400210101184f70636f6465000f002c4f75744f664f6666736574000800204f75744f66476173000900244f75744f6646756e64000a002c5043556e646572666c6f77000b002c437265617465456d707479000c00144f74686572040025010144436f773c277374617469632c207374723e000d00204d61784e6f6e6365000e000021010c2065766d5f636f7265186f70636f6465184f70636f646500000400080108753800002501040c436f770404540129010004002901000000290100000502002d010c2065766d5f636f7265146572726f7228457869745265766572740001042052657665727465640000000031010c2065766d5f636f7265146572726f722445786974466174616c000110304e6f74537570706f7274656400000048556e68616e646c6564496e746572727570740001004043616c6c4572726f724173466174616c04001d010124457869744572726f72000200144f74686572040025010144436f773c277374617469632c207374723e0003000035010c2870616c6c65745f65766d1870616c6c6574144576656e740404540001140c4c6f6704010c6c6f673901010c4c6f670000047c457468657265756d206576656e74732066726f6d20636f6e7472616374732e1c4372656174656404011c616464726573730d01011048313630000104b44120636f6e747261637420686173206265656e206372656174656420617420676976656e20616464726573732e34437265617465644661696c656404011c616464726573730d0101104831363000020405014120636f6e74726163742077617320617474656d7074656420746f20626520637265617465642c206275742074686520657865637574696f6e206661696c65642e20457865637574656404011c616464726573730d01011048313630000304f84120636f6e747261637420686173206265656e206578656375746564207375636365737366756c6c79207769746820737461746573206170706c6965642e3845786563757465644661696c656404011c616464726573730d0101104831363000040465014120636f6e747261637420686173206265656e2065786563757465642077697468206572726f72732e20537461746573206172652072657665727465642077697468206f6e6c79206761732066656573206170706c6965642e047c54686520604576656e746020656e756d206f6620746869732070616c6c657439010c20657468657265756d0c6c6f670c4c6f6700000c011c616464726573730d01011048313630000118746f70696373b401245665633c483235363e00011064617461380114427974657300003d010c3c70616c6c65745f626173655f6665651870616c6c6574144576656e7400010c404e65774261736546656550657247617304010c66656541010110553235360000003c426173654665654f766572666c6f77000100344e6577456c6173746963697479040128656c61737469636974794901011c5065726d696c6c000200047c54686520604576656e746020656e756d206f6620746869732070616c6c65744101083c7072696d69746976655f7479706573105532353600000400450101205b7536343b20345d0000450100000304000000180049010c3473705f61726974686d65746963287065725f7468696e67731c5065726d696c6c0000040010010c75333200004d010c3070616c6c65745f6472616e641870616c6c6574144576656e740404540001084c426561636f6e436f6e6669674368616e676564000000204e657750756c7365040118726f756e6473510101405665633c526f756e644e756d6265723e000104805375636365737366756c6c79207365742061206e65772070756c73652873292e047c54686520604576656e746020656e756d206f6620746869732070616c6c657451010000021800550108306672616d655f73797374656d14506861736500010c384170706c7945787472696e736963040010010c7533320000003046696e616c697a6174696f6e00010038496e697469616c697a6174696f6e000200005901000002e4005d0108306672616d655f73797374656d584c61737452756e74696d6555706772616465496e666f0000080130737065635f76657273696f6e6101014c636f6465633a3a436f6d706163743c7533323e000124737065635f6e616d652901016473705f72756e74696d653a3a52756e74696d65537472696e67000061010000061000650108306672616d655f73797374656d60436f646555706772616465417574686f72697a6174696f6e0404540000080124636f64655f6861736834011c543a3a48617368000134636865636b5f76657273696f6e240110626f6f6c000069010c306672616d655f73797374656d1870616c6c65741043616c6c04045400012c1872656d61726b04011872656d61726b38011c5665633c75383e00000c684d616b6520736f6d65206f6e2d636861696e2072656d61726b2e008843616e20626520657865637574656420627920657665727920606f726967696e602e387365745f686561705f7061676573040114706167657318010c753634000104f853657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e207365745f636f6465040110636f646538011c5665633c75383e0002046453657420746865206e65772072756e74696d6520636f64652e5c7365745f636f64655f776974686f75745f636865636b73040110636f646538011c5665633c75383e000310190153657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e0051014e6f746520746861742072756e74696d652075706772616465732077696c6c206e6f742072756e20696620746869732069732063616c6c656420776974682061206e6f742d696e6372656173696e6720737065632076657273696f6e212c7365745f73746f726167650401146974656d736d0101345665633c4b657956616c75653e0004046853657420736f6d65206974656d73206f662073746f726167652e306b696c6c5f73746f726167650401106b657973750101205665633c4b65793e000504744b696c6c20736f6d65206974656d732066726f6d2073746f726167652e2c6b696c6c5f70726566697808011870726566697838010c4b657900011c7375626b65797310010c75333200061011014b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e0039012a2a4e4f54453a2a2a2057652072656c79206f6e2074686520526f6f74206f726967696e20746f2070726f7669646520757320746865206e756d626572206f66207375626b65797320756e6465723d0174686520707265666978207765206172652072656d6f76696e6720746f2061636375726174656c792063616c63756c6174652074686520776569676874206f6620746869732066756e6374696f6e2e4472656d61726b5f776974685f6576656e7404011872656d61726b38011c5665633c75383e000704a44d616b6520736f6d65206f6e2d636861696e2072656d61726b20616e6420656d6974206576656e742e44617574686f72697a655f75706772616465040124636f64655f6861736834011c543a3a486173680009106101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e80617574686f72697a655f757067726164655f776974686f75745f636865636b73040124636f64655f6861736834011c543a3a48617368000a206101417574686f72697a6520616e207570677261646520746f206120676976656e2060636f64655f686173686020666f72207468652072756e74696d652e205468652072756e74696d652063616e20626520737570706c696564186c617465722e005d015741524e494e473a205468697320617574686f72697a657320616e207570677261646520746861742077696c6c2074616b6520706c61636520776974686f757420616e792073616665747920636865636b732c20666f7259016578616d706c652074686174207468652073706563206e616d652072656d61696e73207468652073616d6520616e642074686174207468652076657273696f6e206e756d62657220696e637265617365732e204e6f74f07265636f6d6d656e64656420666f72206e6f726d616c207573652e205573652060617574686f72697a655f757067726164656020696e73746561642e007c546869732063616c6c20726571756972657320526f6f74206f726967696e2e606170706c795f617574686f72697a65645f75706772616465040110636f646538011c5665633c75383e000b24550150726f766964652074686520707265696d616765202872756e74696d652062696e617279292060636f64656020666f7220616e2075706772616465207468617420686173206265656e20617574686f72697a65642e00490149662074686520617574686f72697a6174696f6e20726571756972656420612076657273696f6e20636865636b2c20746869732063616c6c2077696c6c20656e73757265207468652073706563206e616d65e872656d61696e7320756e6368616e67656420616e6420746861742074686520737065632076657273696f6e2068617320696e637265617365642e005901446570656e64696e67206f6e207468652072756e74696d65277320604f6e536574436f64656020636f6e66696775726174696f6e2c20746869732066756e6374696f6e206d6179206469726563746c79206170706c791101746865206e65772060636f64656020696e207468652073616d6520626c6f636b206f7220617474656d707420746f207363686564756c652074686520757067726164652e0060416c6c206f726967696e732061726520616c6c6f7765642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d010000027101007101000004083838007501000002380079010c306672616d655f73797374656d186c696d69747330426c6f636b5765696768747300000c0128626173655f626c6f636b2c01185765696768740001246d61785f626c6f636b2c01185765696768740001247065725f636c6173737d0101845065724469737061746368436c6173733c57656967687473506572436c6173733e00007d010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c617373040454018101000c01186e6f726d616c810101045400012c6f7065726174696f6e616c81010104540001246d616e6461746f72798101010454000081010c306672616d655f73797374656d186c696d6974733c57656967687473506572436c6173730000100138626173655f65787472696e7369632c01185765696768740001346d61785f65787472696e736963850101384f7074696f6e3c5765696768743e0001246d61785f746f74616c850101384f7074696f6e3c5765696768743e0001207265736572766564850101384f7074696f6e3c5765696768743e0000850104184f7074696f6e040454012c0108104e6f6e6500000010536f6d6504002c000001000089010c306672616d655f73797374656d186c696d6974732c426c6f636b4c656e677468000004010c6d61788d0101545065724469737061746368436c6173733c7533323e00008d010c346672616d655f737570706f7274206469737061746368405065724469737061746368436c6173730404540110000c01186e6f726d616c1001045400012c6f7065726174696f6e616c100104540001246d616e6461746f72791001045400009101082873705f776569676874733c52756e74696d65446257656967687400000801107265616418010c753634000114777269746518010c75363400009501082873705f76657273696f6e3852756e74696d6556657273696f6e0000200124737065635f6e616d652901013452756e74696d65537472696e67000124696d706c5f6e616d652901013452756e74696d65537472696e67000144617574686f72696e675f76657273696f6e10010c753332000130737065635f76657273696f6e10010c753332000130696d706c5f76657273696f6e10010c753332000110617069739901011c4170697356656300014c7472616e73616374696f6e5f76657273696f6e10010c75333200013473746174655f76657273696f6e080108753800009901040c436f77040454019d010004009d010000009d01000002a10100a10100000408a5011000a501000003080000000800a9010c306672616d655f73797374656d1870616c6c6574144572726f720404540001243c496e76616c6964537065634e616d650000081101546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e685370656356657273696f6e4e65656473546f496e63726561736500010841015468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6550616e6420746865206e65772072756e74696d652e744661696c6564546f4578747261637452756e74696d6556657273696f6e00020cec4661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e0009014569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e4c4e6f6e44656661756c74436f6d706f73697465000304fc537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e3c4e6f6e5a65726f526566436f756e74000404350154686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e3043616c6c46696c7465726564000504d0546865206f726967696e2066696c7465722070726576656e74207468652063616c6c20746f20626520646973706174636865642e6c4d756c7469426c6f636b4d6967726174696f6e734f6e676f696e67000604550141206d756c74692d626c6f636b206d6967726174696f6e206973206f6e676f696e6720616e642070726576656e7473207468652063757272656e7420636f64652066726f6d206265696e67207265706c616365642e444e6f7468696e67417574686f72697a6564000704584e6f207570677261646520617574686f72697a65642e30556e617574686f72697a656400080494546865207375626d697474656420636f6465206973206e6f7420617574686f72697a65642e046c4572726f7220666f72207468652053797374656d2070616c6c6574ad010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400b401185665633c543e0000b1010c4070616c6c65745f74696d657374616d701870616c6c65741043616c6c0404540001040c73657404010c6e6f77300124543a3a4d6f6d656e7400004c54536574207468652063757272656e742074696d652e005501546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6ed470686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e0041015468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e7420737065636966696564206279685b60436f6e6669673a3a4d696e696d756d506572696f64605d2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f4e6f6e655f2e0051015468697320646973706174636820636c617373206973205f4d616e6461746f72795f20746f20656e73757265206974206765747320657865637574656420696e2074686520626c6f636b2e204265206177617265510174686174206368616e67696e672074686520636f6d706c6578697479206f6620746869732063616c6c20636f756c6420726573756c742065786861757374696e6720746865207265736f757263657320696e206184626c6f636b20746f206578656375746520616e79206f746865722063616c6c732e0034232320436f6d706c657869747931012d20604f2831296020284e6f7465207468617420696d706c656d656e746174696f6e73206f6620604f6e54696d657374616d7053657460206d75737420616c736f20626520604f283129602955012d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f283129602062656361757365206f6620604469645570646174653a3a74616b656020696e402020606f6e5f66696e616c697a656029d42d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f736574602e204d75737420626520604f283129602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb5010c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401b901045300000400bd0101185665633c543e0000b901104473705f636f6e73656e7375735f617572611c737232353531392c6170705f73723235353139185075626c69630000040004013c737232353531393a3a5075626c69630000bd01000002b90100c101084873705f636f6e73656e7375735f736c6f747310536c6f740000040018010c7536340000c501083870616c6c65745f6772616e6470612c53746f726564537461746504044e01100110104c6976650000003050656e64696e6750617573650801307363686564756c65645f61741001044e00011464656c61791001044e000100185061757365640002003450656e64696e67526573756d650801307363686564756c65645f61741001044e00011464656c61791001044e00030000c901083870616c6c65745f6772616e6470614c53746f72656450656e64696e674368616e676508044e0110144c696d697400001001307363686564756c65645f61741001044e00011464656c61791001044e0001406e6578745f617574686f726974696573cd01016c426f756e646564417574686f726974794c6973743c4c696d69743e000118666f72636564d10101244f7074696f6e3c4e3e0000cd010c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e64656456656308045401840453000004008001185665633c543e0000d10104184f7074696f6e04045401100108104e6f6e6500000010536f6d650400100000010000d5010c3870616c6c65745f6772616e6470611870616c6c65741043616c6c04045400010c4c7265706f72745f65717569766f636174696f6e08014865717569766f636174696f6e5f70726f6f66d90101c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6601020140543a3a4b65794f776e657250726f6f6600001009015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e707265706f72745f65717569766f636174696f6e5f756e7369676e656408014865717569766f636174696f6e5f70726f6f66d90101c8426f783c45717569766f636174696f6e50726f6f663c543a3a486173682c20426c6f636b4e756d626572466f723c543e3e3e00013c6b65795f6f776e65725f70726f6f6601020140543a3a4b65794f776e657250726f6f6600012409015265706f727420766f7465722065717569766f636174696f6e2f6d69736265686176696f722e2054686973206d6574686f642077696c6c2076657269667920746865f465717569766f636174696f6e2070726f6f6620616e642076616c69646174652074686520676976656e206b6579206f776e6572736869702070726f6f66f8616761696e73742074686520657874726163746564206f6666656e6465722e20496620626f7468206172652076616c69642c20746865206f6666656e63654477696c6c206265207265706f727465642e000d01546869732065787472696e736963206d7573742062652063616c6c656420756e7369676e656420616e642069742069732065787065637465642074686174206f6e6c791501626c6f636b20617574686f72732077696c6c2063616c6c206974202876616c69646174656420696e206056616c6964617465556e7369676e656460292c2061732073756368150169662074686520626c6f636b20617574686f7220697320646566696e65642069742077696c6c20626520646566696e6564206173207468652065717569766f636174696f6e247265706f727465722e306e6f74655f7374616c6c656408011464656c6179100144426c6f636b4e756d626572466f723c543e00016c626573745f66696e616c697a65645f626c6f636b5f6e756d626572100144426c6f636b4e756d626572466f723c543e0002303d014e6f74652074686174207468652063757272656e7420617574686f7269747920736574206f6620746865204752414e4450412066696e616c6974792067616467657420686173207374616c6c65642e006101546869732077696c6c2074726967676572206120666f7263656420617574686f7269747920736574206368616e67652061742074686520626567696e6e696e67206f6620746865206e6578742073657373696f6e2c20746f6101626520656e6163746564206064656c61796020626c6f636b7320616674657220746861742e20546865206064656c6179602073686f756c64206265206869676820656e6f75676820746f20736166656c7920617373756d654901746861742074686520626c6f636b207369676e616c6c696e672074686520666f72636564206368616e67652077696c6c206e6f742062652072652d6f7267656420652e672e203130303020626c6f636b732e5d0154686520626c6f636b2070726f64756374696f6e207261746520287768696368206d617920626520736c6f77656420646f776e2062656361757365206f662066696e616c697479206c616767696e67292073686f756c64510162652074616b656e20696e746f206163636f756e74207768656e2063686f6f73696e6720746865206064656c6179602e20546865204752414e44504120766f74657273206261736564206f6e20746865206e65775501617574686f726974792077696c6c20737461727420766f74696e67206f6e20746f70206f662060626573745f66696e616c697a65645f626c6f636b5f6e756d6265726020666f72206e65772066696e616c697a65644d01626c6f636b732e2060626573745f66696e616c697a65645f626c6f636b5f6e756d626572602073686f756c64206265207468652068696768657374206f6620746865206c61746573742066696e616c697a6564c4626c6f636b206f6620616c6c2076616c696461746f7273206f6620746865206e657720617574686f72697479207365742e00584f6e6c792063616c6c61626c6520627920726f6f742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ed901085073705f636f6e73656e7375735f6772616e6470614445717569766f636174696f6e50726f6f660804480134044e0110000801187365745f6964180114536574496400013065717569766f636174696f6edd01014845717569766f636174696f6e3c482c204e3e0000dd01085073705f636f6e73656e7375735f6772616e6470613045717569766f636174696f6e0804480134044e011001081c507265766f74650400e10101890166696e616c6974795f6772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c2066696e616c6974795f6772616e6470613a3a507265766f74653c0a482c204e3e2c20417574686f726974795369676e61747572652c3e00000024507265636f6d6d69740400f50101910166696e616c6974795f6772616e6470613a3a45717569766f636174696f6e3c417574686f7269747949642c2066696e616c6974795f6772616e6470613a3a507265636f6d6d69740a3c482c204e3e2c20417574686f726974795369676e61747572652c3e00010000e101084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c0849640188045601e501045301e90100100130726f756e645f6e756d62657218010c7536340001206964656e7469747988010849640001146669727374f101011828562c2053290001187365636f6e64f101011828562c2053290000e501084066696e616c6974795f6772616e6470611c507265766f74650804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e0000e9010c5073705f636f6e73656e7375735f6772616e6470610c617070245369676e617475726500000400ed010148656432353531393a3a5369676e61747572650000ed01000003400000000800f10100000408e501e90100f501084066696e616c6974795f6772616e6470613045717569766f636174696f6e0c0849640188045601f901045301e90100100130726f756e645f6e756d62657218010c7536340001206964656e7469747988010849640001146669727374fd01011828562c2053290001187365636f6e64fd01011828562c2053290000f901084066696e616c6974795f6772616e64706124507265636f6d6d69740804480134044e01100008012c7461726765745f68617368340104480001347461726765745f6e756d6265721001044e0000fd0100000408f901e901000102081c73705f636f726510566f69640001000005020c3870616c6c65745f6772616e6470611870616c6c6574144572726f7204045400011c2c50617573654661696c65640000080501417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665a42865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e30526573756d654661696c65640001081101417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e277420706175736564a028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e344368616e676550656e64696e67000204e8417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e1c546f6f536f6f6e000304bc43616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e60496e76616c69644b65794f776e65727368697050726f6f66000404310141206b6579206f776e6572736869702070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e60496e76616c696445717569766f636174696f6e50726f6f660005043101416e2065717569766f636174696f6e2070726f6f662070726f76696465642061732070617274206f6620616e2065717569766f636174696f6e207265706f727420697320696e76616c69642e584475706c69636174654f6666656e63655265706f727400060415014120676976656e2065717569766f636174696f6e207265706f72742069732076616c69642062757420616c72656164792070726576696f75736c79207265706f727465642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e09020c4c626f756e6465645f636f6c6c656374696f6e73407765616b5f626f756e6465645f766563385765616b426f756e646564566563080454010d02045300000400150201185665633c543e00000d020c3c70616c6c65745f62616c616e6365731474797065732c42616c616e63654c6f636b041c42616c616e63650118000c01086964a50101384c6f636b4964656e746966696572000118616d6f756e7418011c42616c616e636500011c726561736f6e731102011c526561736f6e73000011020c3c70616c6c65745f62616c616e6365731474797065731c526561736f6e7300010c0c466565000000104d6973630001000c416c6c0002000015020000020d020019020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454011d02045300000400210201185665633c543e00001d020c3c70616c6c65745f62616c616e6365731474797065732c52657365727665446174610844526573657276654964656e74696669657201a5011c42616c616e63650118000801086964a5010144526573657276654964656e746966696572000118616d6f756e7418011c42616c616e6365000021020000021d020025020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540129020453000004003d0201185665633c543e0000290214346672616d655f737570706f72741874726169747318746f6b656e73106d697363204964416d6f756e7408084964012d021c42616c616e636501180008010869642d0201084964000118616d6f756e7418011c42616c616e636500002d0208586e6f64655f73756274656e736f725f72756e74696d654452756e74696d65486f6c64526561736f6e00010c20507265696d61676504003102016c70616c6c65745f707265696d6167653a3a486f6c64526561736f6e000e0020526567697374727904003502016c70616c6c65745f72656769737472793a3a486f6c64526561736f6e00110020536166654d6f646504003902017070616c6c65745f736166655f6d6f64653a3a486f6c64526561736f6e0014000031020c3c70616c6c65745f707265696d6167651870616c6c657428486f6c64526561736f6e00010420507265696d6167650000000035020c3c70616c6c65745f72656769737472791870616c6c657428486f6c64526561736f6e0001044052656769737472794964656e746974790000000039020c4070616c6c65745f736166655f6d6f64651870616c6c657428486f6c64526561736f6e00010434456e7465724f72457874656e64000000003d0200000229020041020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540145020453000004004d0201185665633c543e0000450214346672616d655f737570706f72741874726169747318746f6b656e73106d697363204964416d6f756e74080849640149021c42616c616e63650118000801086964490201084964000118616d6f756e7418011c42616c616e63650000490208586e6f64655f73756274656e736f725f72756e74696d654c52756e74696d65467265657a65526561736f6e000100004d0200000245020051020c3c70616c6c65745f62616c616e6365731870616c6c65741043616c6c080454000449000124507472616e736665725f616c6c6f775f646561746808011064657374550201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565300128543a3a42616c616e636500001cd45472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e003501607472616e736665725f616c6c6f775f6465617468602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e11014966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74b06f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e001501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e38666f7263655f7472616e736665720c0118736f75726365550201504163636f756e7449644c6f6f6b75704f663c543e00011064657374550201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565300128543a3a42616c616e6365000208610145786163746c7920617320607472616e736665725f616c6c6f775f6465617468602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74446d6179206265207370656369666965642e4c7472616e736665725f6b6565705f616c69766508011064657374550201504163636f756e7449644c6f6f6b75704f663c543e00011476616c7565300128543a3a42616c616e6365000318590153616d6520617320746865205b607472616e736665725f616c6c6f775f6465617468605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74606b696c6c20746865206f726967696e206163636f756e742e00e8393925206f66207468652074696d6520796f752077616e74205b607472616e736665725f616c6c6f775f6465617468605d20696e73746561642e00f05b607472616e736665725f616c6c6f775f6465617468605d3a207374727563742e50616c6c65742e68746d6c236d6574686f642e7472616e73666572307472616e736665725f616c6c08011064657374550201504163636f756e7449644c6f6f6b75704f663c543e0001286b6565705f616c697665240110626f6f6c00043c05015472616e736665722074686520656e74697265207472616e7366657261626c652062616c616e63652066726f6d207468652063616c6c6572206163636f756e742e0059014e4f54453a20546869732066756e6374696f6e206f6e6c7920617474656d70747320746f207472616e73666572205f7472616e7366657261626c655f2062616c616e6365732e2054686973206d65616e7320746861746101616e79206c6f636b65642c2072657365727665642c206f72206578697374656e7469616c206465706f7369747320287768656e20606b6565705f616c6976656020697320607472756560292c2077696c6c206e6f742062655d017472616e7366657272656420627920746869732066756e6374696f6e2e20546f20656e73757265207468617420746869732066756e6374696f6e20726573756c747320696e2061206b696c6c6564206163636f756e742c4501796f75206d69676874206e65656420746f207072657061726520746865206163636f756e742062792072656d6f76696e6720616e79207265666572656e636520636f756e746572732c2073746f72616765406465706f736974732c206574632e2e2e00c0546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205369676e65642e00a02d206064657374603a2054686520726563697069656e74206f6620746865207472616e736665722e59012d20606b6565705f616c697665603a204120626f6f6c65616e20746f2064657465726d696e652069662074686520607472616e736665725f616c6c60206f7065726174696f6e2073686f756c642073656e6420616c6c4d0120206f66207468652066756e647320746865206163636f756e74206861732c2063617573696e67207468652073656e646572206163636f756e7420746f206265206b696c6c6564202866616c7365292c206f72590120207472616e736665722065766572797468696e6720657863657074206174206c6561737420746865206578697374656e7469616c206465706f7369742c2077686963682077696c6c2067756172616e74656520746f9c20206b656570207468652073656e646572206163636f756e7420616c697665202874727565292e3c666f7263655f756e7265736572766508010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e000118616d6f756e74180128543a3a42616c616e636500050cb0556e7265736572766520736f6d652062616c616e63652066726f6d2061207573657220627920666f7263652e006c43616e206f6e6c792062652063616c6c656420627920524f4f542e40757067726164655f6163636f756e747304010c77686f5d0201445665633c543a3a4163636f756e7449643e0006207055706772616465206120737065636966696564206163636f756e742e00742d20606f726967696e603a204d75737420626520605369676e6564602e902d206077686f603a20546865206163636f756e7420746f2062652075706772616465642e005501546869732077696c6c20776169766520746865207472616e73616374696f6e20666565206966206174206c6561737420616c6c2062757420313025206f6620746865206163636f756e7473206e656564656420746f410162652075706772616465642e20285765206c657420736f6d65206e6f74206861766520746f206265207570677261646564206a75737420696e206f7264657220746f20616c6c6f7720666f722074686558706f73736962696c697479206f6620636875726e292e44666f7263655f7365745f62616c616e636508010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e0001206e65775f66726565300128543a3a42616c616e636500080cac5365742074686520726567756c61722062616c616e6365206f66206120676976656e206163636f756e742e00b0546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e6c666f7263655f61646a7573745f746f74616c5f69737375616e6365080124646972656374696f6e6102014c41646a7573746d656e74446972656374696f6e00011464656c7461300128543a3a42616c616e6365000914b841646a7573742074686520746f74616c2069737375616e636520696e20612073617475726174696e67207761792e00fc43616e206f6e6c792062652063616c6c656420627920726f6f7420616e6420616c77617973206e65656473206120706f736974697665206064656c7461602e002423204578616d706c65106275726e08011476616c7565300128543a3a42616c616e63650001286b6565705f616c697665240110626f6f6c000a1cfc4275726e2074686520737065636966696564206c697175696420667265652062616c616e63652066726f6d20746865206f726967696e206163636f756e742e002501496620746865206f726967696e2773206163636f756e7420656e64732075702062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c7409016f6620746865206275726e20616e6420606b6565705f616c697665602069732066616c73652c20746865206163636f756e742077696c6c206265207265617065642e005101556e6c696b652073656e64696e672066756e647320746f2061205f6275726e5f20616464726573732c207768696368206d6572656c79206d616b6573207468652066756e647320696e61636365737369626c652c21017468697320606275726e60206f7065726174696f6e2077696c6c2072656475636520746f74616c2069737375616e63652062792074686520616d6f756e74205f6275726e65645f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e55020c2873705f72756e74696d65306d756c746961646472657373304d756c74694164647265737308244163636f756e7449640100304163636f756e74496e64657801a4011408496404000001244163636f756e74496400000014496e6465780400590201304163636f756e74496e6465780001000c526177040038011c5665633c75383e0002002441646472657373333204000401205b75383b2033325d000300244164647265737332300400110101205b75383b2032305d000400005902000006a4005d02000002000061020c3c70616c6c65745f62616c616e6365731474797065734c41646a7573746d656e74446972656374696f6e00010820496e6372656173650000002044656372656173650001000065020c3c70616c6c65745f62616c616e6365731870616c6c6574144572726f720804540004490001303856657374696e6742616c616e63650000049c56657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75652e544c69717569646974795265737472696374696f6e73000104c84163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2e4c496e73756666696369656e7442616c616e63650002047842616c616e636520746f6f206c6f7720746f2073656e642076616c75652e484578697374656e7469616c4465706f736974000304ec56616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742e34457870656e646162696c697479000404905472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742e5c4578697374696e6756657374696e675363686564756c65000504cc412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e742e2c446561644163636f756e740006048c42656e6566696369617279206163636f756e74206d757374207072652d65786973742e3c546f6f4d616e795265736572766573000704b84e756d626572206f66206e616d65642072657365727665732065786365656420604d61785265736572766573602e30546f6f4d616e79486f6c6473000804f84e756d626572206f6620686f6c647320657863656564206056617269616e74436f756e744f663c543a3a52756e74696d65486f6c64526561736f6e3e602e38546f6f4d616e79467265657a6573000904984e756d626572206f6620667265657a65732065786365656420604d6178467265657a6573602e4c49737375616e63654465616374697661746564000a0401015468652069737375616e63652063616e6e6f74206265206d6f6469666965642073696e636520697420697320616c72656164792064656163746976617465642e2444656c74615a65726f000b04645468652064656c74612063616e6e6f74206265207a65726f2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e69020c3473705f61726974686d657469632c66697865645f706f696e7424466978656455313238000004002001107531323800006d02086870616c6c65745f7472616e73616374696f6e5f7061796d656e742052656c6561736573000108245631416e6369656e7400000008563200010000710200000408009c007502000004089c0000790200000408ac18007d020000040c00009c008102000004080000008502083c7375627374726174655f666978656424466978656455313238041046726163018902000401106269747320011075313238000089020c1c747970656e756d1075696e741055496e74080455018d02044201ad020008010c6d73628d0201045500010c6c7362ad0201044200008d020c1c747970656e756d1075696e741055496e74080455019102044201ad020008010c6d7362910201045500010c6c7362ad02010442000091020c1c747970656e756d1075696e741055496e74080455019502044201ad020008010c6d7362950201045500010c6c7362ad02010442000095020c1c747970656e756d1075696e741055496e74080455019902044201ad020008010c6d7362990201045500010c6c7362ad02010442000099020c1c747970656e756d1075696e741055496e74080455019d02044201ad020008010c6d73629d0201045500010c6c7362ad0201044200009d020c1c747970656e756d1075696e741055496e7408045501a102044201ad020008010c6d7362a10201045500010c6c7362ad020104420000a1020c1c747970656e756d1075696e741055496e7408045501a502044201a9020008010c6d7362a50201045500010c6c7362a9020104420000a5020c1c747970656e756d1075696e7414555465726d00000000a9020c1c747970656e756d0c62697408423100000000ad020c1c747970656e756d0c62697408423000000000b102000004089c9c00b5020000029c00b902000002bd0200bd020000040c00181800c1020000022400c502000002b10200c9020c4070616c6c65745f73756274656e736f721870616c6c65742041786f6e496e666f0000200114626c6f636b18010c75363400011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f74797065080108753800012070726f746f636f6c0801087538000130706c616365686f6c646572310801087538000130706c616365686f6c6465723208010875380000cd020c4070616c6c65745f73756274656e736f721870616c6c6574444e6575726f6e436572746966696361746500000801287075626c69635f6b6579d1020170426f756e6465645665633c75382c20436f6e73745533323c36343e3e000124616c676f726974686d08010875380000d1020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000d5020c4070616c6c65745f73756274656e736f721870616c6c65743850726f6d657468657573496e666f0000140114626c6f636b18010c75363400011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f7479706508010875380000d9020c4070616c6c65745f73756274656e736f721870616c6c657434436861696e4964656e7469747900001801106e616d6538011c5665633c75383e00010c75726c38011c5665633c75383e000114696d61676538011c5665633c75383e00011c646973636f726438011c5665633c75383e00012c6465736372697074696f6e38011c5665633c75383e0001286164646974696f6e616c38011c5665633c75383e0000dd020c4070616c6c65745f73756274656e736f721870616c6c6574385375626e65744964656e7469747900000c012c7375626e65745f6e616d6538011c5665633c75383e00012c6769746875625f7265706f38011c5665633c75383e0001387375626e65745f636f6e7461637438011c5665633c75383e0000e1020000040c009c9c00e502000002e90200e902000004103418181800ed02000004089c1800f102000002f50200f5020000040c00f9021800f9020c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000fd020c4070616c6c65745f73756274656e736f721870616c6c65741043616c6c0404540001ac2c7365745f776569676874731001186e65747569649c010c7531360001146465737473b50201205665633c7531363e00011c77656967687473b50201205665633c7531363e00012c76657273696f6e5f6b657918010c7536340000e821012d2d2d2053657473207468652063616c6c6572207765696768747320666f722074686520696e63656e74697665206d656368616e69736d2e205468652063616c6c2063616e20626531016d6164652066726f6d2074686520686f746b6579206163636f756e7420736f20697320706f74656e7469616c6c7920696e7365637572652c20686f77657665722c207468652064616d61676539016f66206368616e67696e672077656967687473206973206d696e696d616c20696620636175676874206561726c792e20546869732066756e6374696f6e20696e636c7564657320616c6c207468654d01636865636b73207468617420746865207061737365642077656967687473206d6565742074686520726571756972656d656e74732e2053746f7265642061732075313673207468657920726570726573656e742d01726174696f6e616c2076616c75657320696e207468652072616e6765205b302c315d2077686963682073756d20746f203120616e642063616e20626520696e746572707265746564206173390170726f626162696c69746965732e2054686520737065636966696320776569676874732064657465726d696e6520686f7720696e666c6174696f6e2070726f70616761746573206f7574776172643c66726f6d207468697320706565722e0019014e6f74653a205468652031362062697420696e74656765727320776569676874732073686f756c6420726570726573656e7420312e3020617320746865206d6178207531362e8901486f77657665722c207468652066756e6374696f6e206e6f726d616c697a657320616c6c20696e74656765727320746f207531365f6d617820616e797761792e2054686973206d65616e732074686174206966207468652073756d206f6620616c6c4501656c656d656e7473206973206c6172676572206f7220736d616c6c6572207468616e2074686520616d6f756e74206f6620656c656d656e7473202a207531365f6d61782c20616c6c20656c656d656e74739477696c6c20626520636f7272656374656420666f72207468697320646576696174696f6e2e001c2320417267733ac02a20606f726967696e603a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aec202020202d205468652063616c6c65722c206120686f746b65792077686f2077697368657320746f2073657420746865697220776569676874732e00442a20606e6574756964602028753136293acc092d20546865206e6574776f726b20756964207765206172652073657474696e672074686573652077656967687473206f6e2e00542a206064657374736020285665633c7531363e293ad4092d20546865206564676520656e64706f696e7420666f7220746865207765696768742c20692e652e206a20666f7220775f696a2e005c2a2027776569676874732720285665633c7531363e293aec092d205468652075313620696e746567657220656e636f64656420776569676874732e20496e74657270726574656420617320726174696f6e616ce0090976616c75657320696e207468652072616e6765205b302c315d2e2054686579206d7573742073756d20746f20696e33323a3a4d41582e00602a202776657273696f6e5f6b65792720282075363420293a0d01092d20546865206e6574776f726b2076657273696f6e206b657920746f20636865636b206966207468652076616c696461746f7220697320757020746f20646174652e002023204576656e743a342a20576569676874735365743bc0092d204f6e207375636365737366756c6c792073657474696e67207468652077656967687473206f6e20636861696e2e002423205261697365733a6c2a20275375624e6574776f726b446f65734e6f744578697374273adc092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6578697374656e74206e6574776f726b2e00482a20274e6f7452656769737465726564273aec092d20417474656d7074696e6720746f2073657420776569676874732066726f6d2061206e6f6e2072656769737465726564206163636f756e742e00682a20275765696768745665634e6f74457175616c53697a65273ae8092d20417474656d7074696e6720746f20736574207765696768747320776974682075696473206e6f74206f662073616d65206c656e6774682e00482a20274475706c696361746555696473273ac4092d20417474656d7074696e6720746f2073657420776569676874732077697468206475706c696361746520756964732e0094202020202a2027556964734c656e67746845786365656455696473496e5375624e6574273ae0092d20417474656d7074696e6720746f2073657420776569676874732061626f766520746865206d617820616c6c6f77656420756964732e00702a2027556964566563436f6e7461696e496e76616c69644f6e65273abc092d20417474656d7074696e6720746f207365742077656967687473207769746820696e76616c696420756964732e00642a20275765696768745665634c656e67746849734c6f77273ae4092d20417474656d7074696e6720746f20736574207765696768747320776974682066657765722077656967687473207468616e206d696e2e00582a20274d61785765696768744578636565646564273af0092d20417474656d7074696e6720746f2073657420776569676874732077697468206d61782076616c756520657863656564696e67206c696d69742e4462617463685f7365745f776569676874730c011c6e657475696473b801445665633c436f6d706163743c7531363e3e00011c77656967687473010301985665633c5665633c28436f6d706163743c7531363e2c20436f6d706163743c7531363e293e3e00013076657273696f6e5f6b6579730d0301445665633c436f6d706163743c7536343e3e0050640d012d2d2d20416c6c6f7773206120686f746b657920746f20736574207765696768747320666f72206d756c7469706c65206e65747569647320617320612062617463682e001c2320417267733ac02a20606f726967696e603a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aec202020202d205468652063616c6c65722c206120686f746b65792077686f2077697368657320746f2073657420746865697220776569676874732e00802a20606e6574756964736020285665633c436f6d706163743c7531363e3e293ad0092d20546865206e6574776f726b2075696473207765206172652073657474696e672074686573652077656967687473206f6e2e00d02a2060776569676874736020285665633c5665633c28436f6d706163743c7531363e2c20436f6d706163743c7531363e293e293af0092d20546865207765696768747320746f2073657420666f722065616368206e6574776f726b2e205b287569642c20776569676874292c202e2e2e5d00942a206076657273696f6e5f6b6579736020285665633c436f6d706163743c7536343e3e293a1101092d20546865206e6574776f726b2076657273696f6e206b65797320746f20636865636b206966207468652076616c696461746f7220697320757020746f20646174652e002023204576656e743a342a20576569676874735365743bc0092d204f6e207375636365737366756c6c792073657474696e67207468652077656967687473206f6e20636861696e2e602a20426174636857656967687473436f6d706c657465643b6c092d204f6e2073756363657373206f66207468652062617463682e6c2a204261746368436f6d706c65746564576974684572726f72733bc4092d204f6e206661696c757265206f6620616e79206f6620746865207765696768747320696e207468652062617463682e602a2042617463685765696768744974656d4661696c65643bc0092d204f6e206661696c75726520666f722065616368206661696c6564206974656d20696e207468652062617463682e0038636f6d6d69745f776569676874730801186e65747569649c010c75313600012c636f6d6d69745f686173683401104832353600604c19012d2d2d2d205573656420746f20636f6d6d697420612068617368206f6620796f7572207765696768742076616c75657320746f206c617465722062652072657665616c65642e001c2320417267733aec2a20606f726967696e603a2028603c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e60293aac20202d20546865207369676e6174757265206f662074686520636f6d6d697474696e6720686f746b65792e004c2a20606e65747569646020286075313660293a7c20202d2054686520753136206e6574776f726b206964656e7469666965722e00642a2060636f6d6d69745f68617368602028604832353660293ac020202d20546865206861736820726570726573656e74696e672074686520636f6d6d697474656420776569676874732e002423205261697365733a642a2060436f6d6d697452657665616c44697361626c6564603a190120202d20417474656d7074696e6720746f20636f6d6d6974207768656e2074686520636f6d6d69742d72657665616c206d656368616e69736d2069732064697361626c65642e00742a2060546f6f4d616e79556e72657665616c6564436f6d6d697473603a750120202d20417474656d7074696e6720746f20636f6d6d6974207768656e20746865207573657220686173206d6f7265207468616e2074686520616c6c6f776564206c696d6974206f6620756e72657665616c656420636f6d6d6974732e005062617463685f636f6d6d69745f7765696768747308011c6e657475696473b801445665633c436f6d706163743c7531363e3e000134636f6d6d69745f686173686573b401245665633c483235363e00645831012d2d2d20416c6c6f7773206120686f746b657920746f20636f6d6d6974207765696768742068617368657320666f72206d756c7469706c65206e65747569647320617320612062617463682e001c2320417267733ac02a20606f726967696e603a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aec202020202d205468652063616c6c65722c206120686f746b65792077686f2077697368657320746f2073657420746865697220776569676874732e00802a20606e6574756964736020285665633c436f6d706163743c7531363e3e293ad0092d20546865206e6574776f726b2075696473207765206172652073657474696e672074686573652077656967687473206f6e2e00782a2060636f6d6d69745f6861736865736020285665633c483235363e293a7c092d2054686520636f6d6d69742068617368657320746f20636f6d6d69742e002023204576656e743a342a20576569676874735365743bc0092d204f6e207375636365737366756c6c792073657474696e67207468652077656967687473206f6e20636861696e2e602a20426174636857656967687473436f6d706c657465643b6c092d204f6e2073756363657373206f66207468652062617463682e6c2a204261746368436f6d706c65746564576974684572726f72733bc4092d204f6e206661696c757265206f6620616e79206f6620746865207765696768747320696e207468652062617463682e602a2042617463685765696768744974656d4661696c65643bc0092d204f6e206661696c75726520666f722065616368206661696c6564206974656d20696e207468652062617463682e003872657665616c5f776569676874731401186e65747569649c010c75313600011075696473b50201205665633c7531363e00011876616c756573b50201205665633c7531363e00011073616c74b50201205665633c7531363e00012c76657273696f6e5f6b657918010c75363400619401012d2d2d2d205573656420746f2072657665616c20746865207765696768747320666f7220612070726576696f75736c7920636f6d6d697474656420686173682e001c2320417267733aec2a20606f726967696e603a2028603c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e60293aa820202d20546865207369676e6174757265206f66207468652072657665616c696e6720686f746b65792e004c2a20606e65747569646020286075313660293a7c20202d2054686520753136206e6574776f726b206964656e7469666965722e00582a206075696473602028605665633c7531363e60293ab020202d20546865207569647320666f72207468652077656967687473206265696e672072657665616c65642e00602a206076616c756573602028605665633c7531363e60293ab420202d205468652076616c756573206f66207468652077656967687473206265696e672072657665616c65642e00582a206073616c74602028605665633c7531363e60293ab820202d205468652073616c74207573656420746f2067656e65726174652074686520636f6d6d697420686173682e00602a206076657273696f6e5f6b65796020286075363460293a7020202d20546865206e6574776f726b2076657273696f6e206b65792e002423205261697365733a642a2060436f6d6d697452657665616c44697361626c6564603a390120202d20417474656d7074696e6720746f2072657665616c2077656967687473207768656e2074686520636f6d6d69742d72657665616c206d656368616e69736d2069732064697361626c65642e00642a20604e6f57656967687473436f6d6d6974466f756e64603af020202d20417474656d7074696e6720746f2072657665616c207765696768747320776974686f757420616e206578697374696e6720636f6d6d69742e00602a206045787069726564576569676874436f6d6d6974603ae820202d20417474656d7074696e6720746f2072657665616c20612077656967687420636f6d6d697420746861742068617320657870697265642e004c2a206052657665616c546f6f4561726c79603a050120202d20417474656d7074696e6720746f2072657665616c2077656967687473206f757473696465207468652076616c69642072657665616c20706572696f642e00902a2060496e76616c696452657665616c436f6d6d6974486173684e6f744d61746368603ae020202d205468652072657665616c6564206861736820646f6573206e6f74206d6174636820616e7920636f6d6d697474656420686173682e004c636f6d6d69745f637276335f776569676874730c01186e65747569649c010c753136000118636f6d6d6974f90201d0426f756e6465645665633c75382c20436f6e73745533323c4d41585f435256335f434f4d4d49545f53495a455f42595445533e3e00013072657665616c5f726f756e6418010c75363400637449012d2d2d2d205573656420746f20636f6d6d697420656e6372797074656420636f6d6d69742d72657665616c207633207765696768742076616c75657320746f206c617465722062652072657665616c65642e001c2320417267733aec2a20606f726967696e603a2028603c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e60293a6820202d2054686520636f6d6d697474696e6720686f746b65792e004c2a20606e65747569646020286075313660293a7c20202d2054686520753136206e6574776f726b206964656e7469666965722e005c2a2060636f6d6d6974602028605665633c75383e60293a9020202d2054686520656e6372797074656420636f6d7072657373656420636f6d6d69742e6c2020202054686520737465707320666f722074686973206172653aa820202020312e20496e7374616e7469617465205b6057656967687473546c6f636b5061796c6f6164605d010120202020322e2053657269616c697a65206974207573696e672074686520607061726974795f7363616c655f636f6465633a3a456e636f646560207472616974750220202020332e20456e637279707420697420666f6c6c6f77696e6720746865207374657073202868657265295b68747470733a2f2f6769746875622e636f6d2f696465616c2d6c6162352f746c652f626c6f622f663865363031396630666230326333383065626661366233306566623631373836646564653037622f74696d656c6f636b2f7372632f746c6f636b2e7273234c3238332d4c3333365ddc20202020202020746f2070726f647563652061205b60544c45436970686572746578743c54696e79424c533338313e605d20747970652e4d0120202020342e2053657269616c697a6520616e6420636f6d7072657373207573696e6720746865206061726b2d73657269616c697a6560206043616e6f6e6963616c53657269616c697a65602074726169742e005c2a2072657665616c5f726f756e6420286075363460293a5d012020202d20546865206472616e642072657665616c20726f756e642077686963682077696c6c206265206176616c6961626c6520647572696e672065706f636820606e2b31602066726f6d207468652063757272656e742c202020202065706f63682e002423205261697365733a6c2a2060436f6d6d697452657665616c563344697361626c6564603a190120202d20417474656d7074696e6720746f20636f6d6d6974207768656e2074686520636f6d6d69742d72657665616c206d656368616e69736d2069732064697361626c65642e00742a2060546f6f4d616e79556e72657665616c6564436f6d6d697473603a750120202d20417474656d7074696e6720746f20636f6d6d6974207768656e20746865207573657220686173206d6f7265207468616e2074686520616c6c6f776564206c696d6974206f6620756e72657665616c656420636f6d6d6974732e005062617463685f72657665616c5f776569676874731401186e65747569649c010c753136000124756964735f6c697374110301345665633c5665633c7531363e3e00012c76616c7565735f6c697374110301345665633c5665633c7531363e3e00012873616c74735f6c697374110301345665633c5665633c7531363e3e00013076657273696f6e5f6b657973510101205665633c7536343e00629cf82d2d2d2d2054686520696d706c656d656e746174696f6e20666f722062617463682072657665616c696e6720636f6d6d697474656420776569676874732e001c2320417267733aec2a20606f726967696e603a2028603c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e60293aa820202d20546865207369676e6174757265206f66207468652072657665616c696e6720686f746b65792e004c2a20606e65747569646020286075313660293a7c20202d2054686520753136206e6574776f726b206964656e7469666965722e00802a2060756964735f6c697374602028605665633c5665633c7531363e3e60293ae820202d2041206c697374206f66207569647320666f72206561636820736574206f662077656967687473206265696e672072657665616c65642e00882a206076616c7565735f6c697374602028605665633c5665633c7531363e3e60293af020202d2041206c697374206f662076616c75657320666f72206561636820736574206f662077656967687473206265696e672072657665616c65642e00842a206073616c74735f6c697374602028605665633c5665633c7531363e3e60293adc20202d2041206c697374206f662073616c7473207573656420746f2067656e65726174652074686520636f6d6d6974206861736865732e00782a206076657273696f6e5f6b657973602028605665633c7536343e60293a8c20202d2041206c697374206f66206e6574776f726b2076657273696f6e206b6579732e002423205261697365733a642a2060436f6d6d697452657665616c44697361626c6564603a390120202d20417474656d7074696e6720746f2072657665616c2077656967687473207768656e2074686520636f6d6d69742d72657665616c206d656368616e69736d2069732064697361626c65642e00642a20604e6f57656967687473436f6d6d6974466f756e64603af020202d20417474656d7074696e6720746f2072657665616c207765696768747320776974686f757420616e206578697374696e6720636f6d6d69742e00602a206045787069726564576569676874436f6d6d6974603ae820202d20417474656d7074696e6720746f2072657665616c20612077656967687420636f6d6d697420746861742068617320657870697265642e004c2a206052657665616c546f6f4561726c79603a050120202d20417474656d7074696e6720746f2072657665616c2077656967687473206f757473696465207468652076616c69642072657665616c20706572696f642e00902a2060496e76616c696452657665616c436f6d6d6974486173684e6f744d61746368603ae020202d205468652072657665616c6564206861736820646f6573206e6f74206d6174636820616e7920636f6d6d697474656420686173682e00602a2060496e76616c6964496e7075744c656e67746873603ac020202d2054686520696e70757420766563746f727320617265206f66206d69736d617463686564206c656e677468732e3c7365745f74616f5f776569676874731401186e65747569649c010c753136000118686f746b6579000130543a3a4163636f756e7449640001146465737473b50201205665633c7531363e00011c77656967687473b50201205665633c7531363e00012c76657273696f6e5f6b657918010c7536340008f01c2320417267733ac02a20606f726967696e603a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293ae0092d205468652063616c6c65722c206120686f746b65792077686f2077697368657320746f2073657420746865697220776569676874732e00442a20606e6574756964602028753136293acc092d20546865206e6574776f726b20756964207765206172652073657474696e672074686573652077656967687473206f6e2e00682a2060686f746b6579602028543a3a4163636f756e744964293a1101092d2054686520686f746b6579206173736f636961746564207769746820746865206f7065726174696f6e20616e64207468652063616c6c696e6720636f6c646b65792e00542a206064657374736020285665633c7531363e293ad4092d20546865206564676520656e64706f696e7420666f7220746865207765696768742c20692e652e206a20666f7220775f696a2e005c2a2027776569676874732720285665633c7531363e293aec092d205468652075313620696e746567657220656e636f64656420776569676874732e20496e74657270726574656420617320726174696f6e616ce0090976616c75657320696e207468652072616e6765205b302c315d2e2054686579206d7573742073756d20746f20696e33323a3a4d41582e00602a202776657273696f6e5f6b65792720282075363420293a0d01092d20546865206e6574776f726b2076657273696f6e206b657920746f20636865636b206966207468652076616c696461746f7220697320757020746f20646174652e002023204576656e743a00342a20576569676874735365743bc0092d204f6e207375636365737366756c6c792073657474696e67207468652077656967687473206f6e20636861696e2e002423205261697365733a005c2a204e6f6e4173736f636961746564436f6c644b65793be8092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6173736f63696174656420636f6c64206b65792e006c2a20275375624e6574776f726b446f65734e6f744578697374273adc092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6578697374656e74206e6574776f726b2e00482a20274e6f74526f6f745375626e6574273a1901092d20417474656d7074696e6720746f207365742077656967687473206f6e2061207375626e65742074686174206973206e6f742074686520726f6f74206e6574776f726b2e00682a20275765696768745665634e6f74457175616c53697a65273ae8092d20417474656d7074696e6720746f20736574207765696768747320776974682075696473206e6f74206f662073616d65206c656e6774682e00702a2027556964566563436f6e7461696e496e76616c69644f6e65273abc092d20417474656d7074696e6720746f207365742077656967687473207769746820696e76616c696420756964732e00482a20274e6f7452656769737465726564273aec092d20417474656d7074696e6720746f2073657420776569676874732066726f6d2061206e6f6e2072656769737465726564206163636f756e742e00642a20275765696768745665634c656e67746849734c6f77273ae4092d20417474656d7074696e6720746f20736574207765696768747320776974682066657765722077656967687473207468616e206d696e2e007c202a2027496e636f727265637457656967687456657273696f6e4b6579273a210120202020202d20417474656d7074696e6720746f20736574207765696768747320776974682074686520696e636f7272656374206e6574776f726b2076657273696f6e206b65792e006c202a202753657474696e6757656967687473546f6f46617374273aa820202020202d20417474656d7074696e6720746f20736574207765696768747320746f6f20666173742e00642a20275765696768745665634c656e67746849734c6f77273ae4092d20417474656d7074696e6720746f20736574207765696768747320776974682066657765722077656967687473207468616e206d696e2e00582a20274d61785765696768744578636565646564273af0092d20417474656d7074696e6720746f2073657420776569676874732077697468206d61782076616c756520657863656564696e67206c696d69742e003c6265636f6d655f64656c6567617465040118686f746b6579000130543a3a4163636f756e74496400015c7c2d2d2d205365747320746865206b657920617320612064656c65676174652e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2027686f746b6579272028543a3a4163636f756e744964293afc092d2054686520686f746b6579207765206172652064656c65676174696e6720286d757374206265206f776e65642062792074686520636f6c646b65792e29003c2a202774616b65272028753634293a0101092d20546865207374616b652070726f706f7274696f6e2074686174207468697320686f746b65792074616b65732066726f6d2064656c65676174696f6e732e002023204576656e743a402a2044656c656761746541646465643bc8092d204f6e207375636365737366756c6c792073657474696e67206120686f746b657920617320612064656c65676174652e002423205261697365733a482a20274e6f7452656769737465726564273a0501092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f742072656769737465726564206f6e20746865206e6574776f726b2e00642a20274e6f6e4173736f636961746564436f6c644b6579273a1101092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f74206f776e6564206279207468652063616c6c696e6720636f6c646b65742e003464656372656173655f74616b65080118686f746b6579000130543a3a4163636f756e74496400011074616b659c010c753136004184c02d2d2d20416c6c6f77732064656c65676174657320746f206465637265617365206974732074616b652076616c75652e001c2320417267733ac82a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2027686f746b6579272028543a3a4163636f756e744964293afc092d2054686520686f746b6579207765206172652064656c65676174696e6720286d757374206265206f776e65642062792074686520636f6c646b65792e2900442a20276e6574756964272028753136293a84092d205375626e657420494420746f2064656372656173652074616b6520666f72003c2a202774616b65272028753136293a1101092d20546865206e6577207374616b652070726f706f7274696f6e2074686174207468697320686f746b65792074616b65732066726f6d2064656c65676174696f6e732e1d0120202020202020546865206e65772076616c75652063616e206265206265747765656e203020616e642031315f37393620616e642073686f756c64206265207374726963746c793901202020202020206c6f776572207468616e207468652070726576696f75732076616c75652e204974205420697320746865206e65772076616c75652028726174696f6e616c206e756d626572292c3d01202020202020207468652074686520706172616d657465722069732063616c63756c61746564206173205b3635353335202a20545d2e20466f72206578616d706c652c20312520776f756c6420626598202020202020205b302e3031202a2036353533355d203d205b3635352e33355d203d20363535002023204576656e743a402a2054616b654465637265617365643bf0092d204f6e207375636365737366756c6c792073657474696e672061206465637265617365642074616b6520666f72207468697320686f746b65792e002423205261697365733a482a20274e6f7452656769737465726564273a0501092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f742072656769737465726564206f6e20746865206e6574776f726b2e00642a20274e6f6e4173736f636961746564436f6c644b6579273a1101092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f74206f776e6564206279207468652063616c6c696e6720636f6c646b65792e005c2a202744656c656761746554616b65546f6f4c6f77273a1d01092d205468652064656c65676174652069732073657474696e6720612074616b65207768696368206973206e6f74206c6f776572207468616e207468652070726576696f75732e0034696e6372656173655f74616b65080118686f746b6579000130543a3a4163636f756e74496400011074616b659c010c7531360042782d012d2d2d20416c6c6f77732064656c65676174657320746f20696e637265617365206974732074616b652076616c75652e20546869732063616c6c20697320726174652d6c696d697465642e001c2320417267733ac82a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2027686f746b6579272028543a3a4163636f756e744964293afc092d2054686520686f746b6579207765206172652064656c65676174696e6720286d757374206265206f776e65642062792074686520636f6c646b65792e29003c2a202774616b65272028753136293a1101092d20546865206e6577207374616b652070726f706f7274696f6e2074686174207468697320686f746b65792074616b65732066726f6d2064656c65676174696f6e732e1d0120202020202020546865206e65772076616c75652063616e206265206265747765656e203020616e642031315f37393620616e642073686f756c64206265207374726963746c7935012020202020202067726561746572207468616e207468652070726576696f75732076616c75652e205420697320746865206e65772076616c75652028726174696f6e616c206e756d626572292c3d01202020202020207468652074686520706172616d657465722069732063616c63756c61746564206173205b3635353335202a20545d2e20466f72206578616d706c652c20312520776f756c6420626598202020202020205b302e3031202a2036353533355d203d205b3635352e33355d203d20363535002023204576656e743a402a2054616b65496e637265617365643bf0092d204f6e207375636365737366756c6c792073657474696e67206120696e637265617365642074616b6520666f72207468697320686f746b65792e002423205261697365733a482a20274e6f7452656769737465726564273a0501092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f742072656769737465726564206f6e20746865206e6574776f726b2e00642a20274e6f6e4173736f636961746564436f6c644b6579273a1101092d2054686520686f746b6579207765206172652064656c65676174696e67206973206e6f74206f776e6564206279207468652063616c6c696e6720636f6c646b65792e00602a202744656c656761746554616b65546f6f48696768273a2501092d205468652064656c65676174652069732073657474696e6720612074616b65207768696368206973206e6f742067726561746572207468616e207468652070726576696f75732e00246164645f7374616b650c0118686f746b6579000130543a3a4163636f756e7449640001186e65747569649c010c753136000134616d6f756e745f7374616b656418010c753634000278d42d2d2d2041646473207374616b6520746f206120686f746b65792e205468652063616c6c206973206d6164652066726f6d2074686594636f6c646b6579206163636f756e74206c696e6b656420696e2074686520686f746b65792ee84f6e6c7920746865206173736f63696174656420636f6c646b657920697320616c6c6f77656420746f206d616b65207374616b696e6720616e64d0756e7374616b696e672072657175657374732e20546869732070726f746563747320746865206e6575726f6e20616761696e7374c461747461636b73206f6e2069747320686f746b65792072756e6e696e6720696e2070726f64756374696f6e20636f64652e001c2320417267733ac4202a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e006c202a2027686f746b6579272028543a3a4163636f756e744964293a84092d20546865206173736f63696174656420686f746b6579206163636f756e742e0064202a2027616d6f756e745f7374616b6564272028753634293a0501092d2054686520616d6f756e74206f66207374616b6520746f20626520616464656420746f2074686520686f746b6579207374616b696e67206163636f756e742e002023204576656e743a38202a205374616b6541646465643be0092d204f6e20746865207375636365737366756c6c7920616464696e67207374616b6520746f206120676c6f62616c206163636f756e742e002423205261697365733a74202a20274e6f74456e6f75676842616c616e6365546f5374616b65273a1101092d204e6f7420656e6f7567682062616c616e6365206f6e2074686520636f6c646b657920746f20616464206f6e746f2074686520676c6f62616c206163636f756e742e0068202a20274e6f6e4173736f636961746564436f6c644b6579273ae8092d205468652063616c6c696e6720636f6c646b6579206973206e6f74206173736f6369617465642077697468207468697320686f746b65792e0070202a202742616c616e63655769746864726177616c4572726f72273ab020092d204572726f7273207374656d6d696e672066726f6d207472616e73616374696f6e2070616c6c65742e003072656d6f76655f7374616b650c0118686f746b6579000130543a3a4163636f756e7449640001186e65747569649c010c75313600013c616d6f756e745f756e7374616b656418010c753634000370f052656d6f7665207374616b652066726f6d20746865207374616b696e67206163636f756e742e205468652063616c6c206d757374206265206d6164651d0166726f6d2074686520636f6c646b6579206163636f756e7420617474616368656420746f20746865206e6575726f6e206d657461646174612e204f6e6c792074686973206b6579d8686173207065726d697373696f6e20746f206d616b65207374616b696e6720616e6420756e7374616b696e672072657175657374732e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293aa4092d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2027686f746b6579272028543a3a4163636f756e744964293a84092d20546865206173736f63696174656420686f746b6579206163636f756e742e00682a2027616d6f756e745f756e7374616b6564272028753634293a0501092d2054686520616d6f756e74206f66207374616b6520746f20626520616464656420746f2074686520686f746b6579207374616b696e67206163636f756e742e002023204576656e743a3c2a205374616b6552656d6f7665643bf8092d204f6e20746865207375636365737366756c6c792072656d6f76696e67207374616b652066726f6d2074686520686f746b6579206163636f756e742e002423205261697365733a482a20274e6f7452656769737465726564273a2d01092d205468726f776e20696620746865206163636f756e742077652061726520617474656d7074696e6720746f20756e7374616b652066726f6d206973206e6f6e206578697374656e742e00642a20274e6f6e4173736f636961746564436f6c644b6579273a1d01092d205468726f776e2069662074686520636f6c646b657920646f6573206e6f74206f776e2074686520686f746b65792077652061726520756e7374616b696e672066726f6d2e00742a20274e6f74456e6f7567685374616b65546f5769746864726177273a3901092d205468726f776e206966207468657265206973206e6f7420656e6f756768207374616b65206f6e2074686520686f746b657920746f20776974686477726177207468697320616d6f756e742e002873657276655f61786f6e2001186e65747569649c010c75313600011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f74797065080108753800012070726f746f636f6c0801087538000130706c616365686f6c646572310801087538000130706c616365686f6c6465723208010875380004cca901536572766573206f7220757064617465732061786f6e202f70726f6d65746865757320696e666f726d6174696f6e20666f7220746865206e6575726f6e206173736f6369617465642077697468207468652063616c6c65722e204966207468652063616c6c6572206973ad01616c7265616479207265676973746572656420746865206d6574616461746120697320757064617465642e204966207468652063616c6c6572206973206e6f74207265676973746572656420746869732063616c6c207468726f7773204e6f74526567697374657265642e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a7c092d20546865207369676e6174757265206f66207468652063616c6c65722e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00482a202776657273696f6e272028753634293a90092d205468652062697474656e736f722076657273696f6e206964656e7469666965722e00342a20276970272028753634293ae4092d2054686520656e64706f696e7420697020696e666f726d6174696f6e2061732061207531323820656e636f64656420696e74656765722e003c2a2027706f7274272028753136293ae8092d2054686520656e64706f696e7420706f727420696e666f726d6174696f6e20617320612075313620656e636f64656420696e74656765722e00442a202769705f747970652720287538293aac092d2054686520656e64706f696e742069702076657273696f6e20617320612075382c2034206f7220362e00482a202770726f746f636f6c2720287538293a44092d205544503a31206f72205443503a3000582a2027706c616365686f6c646572312720287538293aa0092d20506c616365686f6c64657220666f72206675727468657220657874726120706172616d732e00582a2027706c616365686f6c646572322720287538293aa0092d20506c616365686f6c64657220666f72206675727468657220657874726120706172616d732e002023204576656e743a342a2041786f6e5365727665643ba4092d204f6e207375636365737366756c6c792073657276696e67207468652061786f6e20696e666f2e002423205261697365733a6c2a20275375624e6574776f726b446f65734e6f744578697374273adc092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6578697374656e74206e6574776f726b2e00482a20274e6f7452656769737465726564273aec092d20417474656d7074696e6720746f2073657420776569676874732066726f6d2061206e6f6e2072656769737465726564206163636f756e742e00482a2027496e76616c6964497054797065273a74092d205468652069702074797065206973206e6f742034206f7220362e00542a2027496e76616c6964497041646472657373273a1901092d20546865206e756d65726963616c6c7920656e636f646564206970206164647265737320646f6573206e6f74207265736f6c766520746f20612070726f7065722069702e00742a202753657276696e67526174654c696d69744578636565646564273a1d01092d20417474656d7074696e6720746f207365742070726f6d65746865757320696e666f726d6174696f6e2077697468696e67207468652072617465206c696d6974206d696e2e003873657276655f61786f6e5f746c732401186e65747569649c010c75313600011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f74797065080108753800012070726f746f636f6c0801087538000130706c616365686f6c646572310801087538000130706c616365686f6c64657232080108753800012c636572746966696361746538011c5665633c75383e0028dc2d0153616d65206173206073657276655f61786f6e60206275742074616b6573206120636572746966696361746520617320616e206578747261206f7074696f6e616c20617267756d656e742ea901536572766573206f7220757064617465732061786f6e202f70726f6d65746865757320696e666f726d6174696f6e20666f7220746865206e6575726f6e206173736f6369617465642077697468207468652063616c6c65722e204966207468652063616c6c6572206973ad01616c7265616479207265676973746572656420746865206d6574616461746120697320757064617465642e204966207468652063616c6c6572206973206e6f74207265676973746572656420746869732063616c6c207468726f7773204e6f74526567697374657265642e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a7c092d20546865207369676e6174757265206f66207468652063616c6c65722e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00482a202776657273696f6e272028753634293a90092d205468652062697474656e736f722076657273696f6e206964656e7469666965722e00342a20276970272028753634293ae4092d2054686520656e64706f696e7420697020696e666f726d6174696f6e2061732061207531323820656e636f64656420696e74656765722e003c2a2027706f7274272028753136293ae8092d2054686520656e64706f696e7420706f727420696e666f726d6174696f6e20617320612075313620656e636f64656420696e74656765722e00442a202769705f747970652720287538293aac092d2054686520656e64706f696e742069702076657273696f6e20617320612075382c2034206f7220362e00482a202770726f746f636f6c2720287538293a44092d205544503a31206f72205443503a3000582a2027706c616365686f6c646572312720287538293aa0092d20506c616365686f6c64657220666f72206675727468657220657874726120706172616d732e00582a2027706c616365686f6c646572322720287538293aa0092d20506c616365686f6c64657220666f72206675727468657220657874726120706172616d732e00682a202763657274696669636174652720285665633c75383e293ad4202020202d20544c5320636572746966696361746520666f7220696e746572206e6575726f6e20636f6d6d756e69746174696f6e2e002023204576656e743a342a2041786f6e5365727665643ba4092d204f6e207375636365737366756c6c792073657276696e67207468652061786f6e20696e666f2e002423205261697365733a6c2a20275375624e6574776f726b446f65734e6f744578697374273adc092d20417474656d7074696e6720746f207365742077656967687473206f6e2061206e6f6e2d6578697374656e74206e6574776f726b2e00482a20274e6f7452656769737465726564273aec092d20417474656d7074696e6720746f2073657420776569676874732066726f6d2061206e6f6e2072656769737465726564206163636f756e742e00482a2027496e76616c6964497054797065273a74092d205468652069702074797065206973206e6f742034206f7220362e00542a2027496e76616c6964497041646472657373273a1901092d20546865206e756d65726963616c6c7920656e636f646564206970206164647265737320646f6573206e6f74207265736f6c766520746f20612070726f7065722069702e00742a202753657276696e67526174654c696d69744578636565646564273a1d01092d20417474656d7074696e6720746f207365742070726f6d65746865757320696e666f726d6174696f6e2077697468696e67207468652072617465206c696d6974206d696e2e004073657276655f70726f6d6574686575731401186e65747569649c010c75313600011c76657273696f6e10010c753332000108697020011075313238000110706f72749c010c75313600011c69705f747970650801087538000550bc2d2d2d2d205365742070726f6d65746865757320696e666f726d6174696f6e20666f7220746865206e6575726f6e2e1c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a9c092d20546865207369676e6174757265206f66207468652063616c6c696e6720686f746b65792e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00482a202776657273696f6e272028753136293a94092d20205468652062697474656e736f722076657273696f6e206964656e7469666965722e00382a2027697027202875313238293aec092d205468652070726f6d65746865757320697020696e666f726d6174696f6e2061732061207531323820656e636f64656420696e74656765722e003c2a2027706f7274272028753136293af0092d205468652070726f6d65746865757320706f727420696e666f726d6174696f6e20617320612075313620656e636f64656420696e74656765722e00442a202769705f747970652720287538293a60092d205468652069702074797065207634206f722076362e002072656769737465721801186e65747569649c010c753136000130626c6f636b5f6e756d62657218010c7536340001146e6f6e636518010c753634000110776f726b38011c5665633c75383e000118686f746b6579000130543a3a4163636f756e74496400011c636f6c646b6579000130543a3a4163636f756e7449640006bcb82d2d2d2d205265676973746572732061206e6577206e6575726f6e20746f20746865207375626e6574776f726b2e001c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a9c092d20546865207369676e6174757265206f66207468652063616c6c696e6720686f746b65792e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00642a2027626c6f636b5f6e756d6265722720282075363420293a98092d20426c6f636b2068617368207573656420746f2070726f766520776f726b20646f6e652e00482a20276e6f6e63652720282075363420293a98092d20506f73697469766520696e7465676572206e6f6e6365207573656420696e20504f572e00542a2027776f726b272028205665633c75383e20293abc092d20566563746f7220656e636f64656420627974657320726570726573656e74696e6720776f726b20646f6e652e00702a2027686f746b657927202820543a3a4163636f756e74496420293aa8092d20486f746b657920746f206265207265676973746572656420746f20746865206e6574776f726b2e00742a2027636f6c646b657927202820543a3a4163636f756e74496420293a78092d204173736f63696174656420636f6c646b6579206163636f756e742e002023204576656e743a4c2a204e6575726f6e526567697374657265643b1901092d204f6e207375636365737366756c6c79207265676973746572696e6720612075696420746f2061206e6575726f6e20736c6f74206f6e2061207375626e6574776f726b2e002423205261697365733a6c2a20275375624e6574776f726b446f65734e6f744578697374273ad0092d20417474656d7074696e6720746f20726567697374657220746f2061206e6f6e206578697374656e74206e6574776f726b2e00882a2027546f6f4d616e79526567697374726174696f6e7354686973426c6f636b273a2901092d205468697320726567697374726174696f6e20657863656564732074686520746f74616c20616c6c6f776564206f6e2074686973206e6574776f726b207468697320626c6f636b2e00902a2027486f744b6579416c726561647952656769737465726564496e5375624e6574273ad0092d2054686520686f746b657920697320616c72656164792072656769737465726564206f6e2074686973206e6574776f726b2e00542a2027496e76616c6964576f726b426c6f636b273a2501092d2054686520776f726b20686173206265656e20706572666f726d6564206f6e2061207374616c652c206675747572652c206f72206e6f6e206578697374656e7420626c6f636b2e00582a2027496e76616c6964446966666963756c7479273aa8092d2054686520776f726b20646f6573206e6f74206d617463682074686520646966666963756c74792e00402a2027496e76616c69645365616c273a64092d20546865207365616c20697320696e636f72726563742e0034726f6f745f7265676973746572040118686f746b6579000130543a3a4163636f756e744964003e048c52656769737465722074686520686f746b657920746f20726f6f74206e6574776f726b3461646a7573745f73656e617465040118686f746b6579000130543a3a4163636f756e744964003f04ec417474656d707420746f2061646a757374207468652073656e617465206d656d6265727368697020746f20696e636c756465206120686f746b65793c6275726e65645f72656769737465720801186e65747569649c010c753136000118686f746b6579000130543a3a4163636f756e744964000704c0557365722072656769737465722061206e6577207375626e6574776f726b20766961206275726e696e6720746f6b656e2c737761705f686f746b6579080118686f746b6579000130543a3a4163636f756e7449640001286e65775f686f746b6579000130543a3a4163636f756e744964004604ac5468652065787472696e73696320666f72207573657220746f206368616e67652069747320686f746b657930737761705f636f6c646b65790c012c6f6c645f636f6c646b6579000130543a3a4163636f756e74496400012c6e65775f636f6c646b6579000130543a3a4163636f756e744964000124737761705f636f737418010c75363400473c2d015468652065787472696e73696320666f72207573657220746f206368616e67652074686520636f6c646b6579206173736f6369617465642077697468207468656972206163636f756e742e002c2320417267756d656e7473001d012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d757374206265207369676e656420627920746865206f6c6420636f6c646b65792e09012a20606f6c645f636f6c646b657960202d205468652063757272656e7420636f6c646b6579206173736f636961746564207769746820746865206163636f756e742e11012a20606e65775f636f6c646b657960202d20546865206e657720636f6c646b657920746f206265206173736f636961746564207769746820746865206163636f756e742e0024232052657475726e7300590152657475726e73206120604469737061746368526573756c7457697468506f7374496e666f6020696e6469636174696e672073756363657373206f72206661696c757265206f6620746865206f7065726174696f6e2e002023205765696768740019015765696768742069732063616c63756c61746564206261736564206f6e20746865206e756d626572206f6620646174616261736520726561647320616e64207772697465732e447365745f6368696c646b65795f74616b650c0118686f746b6579000130543a3a4163636f756e7449640001186e65747569649c010c75313600011074616b659c010c753136004b74a85365747320746865206368696c646b65792074616b6520666f72206120676976656e20686f746b65792e002d01546869732066756e6374696f6e20616c6c6f7773206120636f6c646b657920746f2073657420746865206368696c646b65792074616b6520666f72206120676976656e20686f746b65792e5501546865206368696c646b65792074616b652064657465726d696e6573207468652070726f706f7274696f6e206f66207374616b6520746861742074686520686f746b6579206b6565707320666f7220697473656c66a07768656e20646973747269627574696e67207374616b6520746f20697473206368696c6472656e2e00302320417267756d656e74733ae02a20606f726967696e6020283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e293a8901202020202d20546865207369676e6174757265206f66207468652063616c6c696e6720636f6c646b65792e2053657474696e67206368696c646b65792074616b652063616e206f6e6c7920626520646f6e652062792074686520636f6c646b65792e00682a2060686f746b6579602028543a3a4163636f756e744964293ae4202020202d2054686520686f746b657920666f7220776869636820746865206368696c646b65792074616b652077696c6c206265207365742e003c2a206074616b65602028753136293a8d01202020202d20546865206e6577206368696c646b65792074616b652076616c75652e205468697320697320612070657263656e7461676520726570726573656e74656420617320612076616c7565206265747765656e203020616e642031303030302c88202020202020776865726520313030303020726570726573656e747320313030252e002423204576656e74733a502a20604368696c646b657954616b65536574603af4202020202d204f6e207375636365737366756c6c792073657474696e6720746865206368696c646b65792074616b6520666f72206120686f746b65792e002423204572726f72733a642a20604e6f6e4173736f636961746564436f6c644b6579603aa8202020202d2054686520636f6c646b657920646f6573206e6f74206f776e2074686520686f746b65792e602a2060496e76616c69644368696c646b657954616b65603a4501202020202d205468652070726f76696465642074616b652076616c756520697320696e76616c6964202867726561746572207468616e20746865206d6178696d756d20616c6c6f7765642074616b65292e902a206054784368696c646b657954616b65526174654c696d69744578636565646564603a0901202020202d205468652072617465206c696d697420666f72206368616e67696e67206368696c646b65792074616b6520686173206265656e2065786365656465642e00907375646f5f7365745f74785f6368696c646b65795f74616b655f726174655f6c696d697404013474785f726174655f6c696d697418010c75363400452cec5365747320746865207472616e73616374696f6e2072617465206c696d697420666f72206368616e67696e67206368696c646b65792074616b652e00d0546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520726f6f74206f726967696e2e00302320417267756d656e74733ac82a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d75737420626520726f6f742ec42a206074785f726174655f6c696d697460202d20546865206e65772072617465206c696d697420696e20626c6f636b732e002423204572726f72733aa82a20604261644f726967696e60202d20496620746865206f726967696e206973206e6f7420726f6f742e00687375646f5f7365745f6d696e5f6368696c646b65795f74616b6504011074616b659c010c753136004c2c9c5365747320746865206d696e696d756d20616c6c6f776564206368696c646b65792074616b652e00d0546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520726f6f74206f726967696e2e00302320417267756d656e74733ac82a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d75737420626520726f6f742ebc2a206074616b6560202d20546865206e6577206d696e696d756d206368696c646b65792074616b652076616c75652e002423204572726f72733aa82a20604261644f726967696e60202d20496620746865206f726967696e206973206e6f7420726f6f742e00687375646f5f7365745f6d61785f6368696c646b65795f74616b6504011074616b659c010c753136004d2c9c5365747320746865206d6178696d756d20616c6c6f776564206368696c646b65792074616b652e00d0546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520726f6f74206f726967696e2e00302320417267756d656e74733ac82a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d75737420626520726f6f742ebc2a206074616b6560202d20546865206e6577206d6178696d756d206368696c646b65792074616b652076616c75652e002423204572726f72733aa82a20604261644f726967696e60202d20496620746865206f726967696e206973206e6f7420726f6f742e00107375646f04011063616c6c1503015c426f783c543a3a5375646f52756e74696d6543616c6c3e0033184d0141757468656e74696361746573206120636f756e63696c2070726f706f73616c20616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e00f4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265206120636f756e63696c206d616a6f726974792e0034232320436f6d706c65786974791c2d204f2831292e547375646f5f756e636865636b65645f77656967687408011063616c6c1503015c426f783c543a3a5375646f52756e74696d6543616c6c3e0001187765696768742c01185765696768740034204d0141757468656e74696361746573206120636f756e63696c2070726f706f73616c20616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f7773207468659c7573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00f4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265206120636f756e63696c206d616a6f726974792e0034232320436f6d706c65786974791c2d204f2831292e10766f7465100118686f746b6579000130543a3a4163636f756e74496400012070726f706f73616c34011c543a3a48617368000114696e6465786101010c75333200011c617070726f7665240110626f6f6c0037045c5573657220766f7465206f6e20612070726f706f73616c4072656769737465725f6e6574776f726b040118686f746b6579000130543a3a4163636f756e744964003b0478557365722072656769737465722061206e6577207375626e6574776f726b186661756365740c0130626c6f636b5f6e756d62657218010c7536340001146e6f6e636518010c753634000110776f726b38011c5665633c75383e003c0cd0466163696c6974792065787472696e73696320666f72207573657220746f206765742074616b656e2066726f6d20666175636574d04974206973206f6e6c7920617661696c61626c65207768656e20706f772d666175636574206665617475726520656e61626c6564dc4a757374206465706c6f79656420696e20746573746e657420616e64206465766e657420666f722074657374696e6720707572706f736540646973736f6c76655f6e6574776f726b08011c636f6c646b6579000130543a3a4163636f756e7449640001186e65747569649c010c753136003d086852656d6f7665206120757365722773207375626e6574776f726bac5468652063616c6c6572206d75737420626520746865206f776e6572206f6620746865206e6574776f726b307365745f6368696c6472656e0c0118686f746b6579000130543a3a4163636f756e7449640001186e65747569649c010c7531360001206368696c6472656eac01605665633c287536342c20543a3a4163636f756e744964293e0043b0f453657420612073696e676c65206368696c6420666f72206120676976656e20686f746b6579206f6e206120737065636966696564206e6574776f726b2e007d01546869732066756e6374696f6e20616c6c6f7773206120636f6c646b657920746f2073657420612073696e676c65206368696c6420666f72206120676976656e20686f746b6579206f6e206120737065636966696564206e6574776f726b2e51015468652070726f706f7274696f6e206f662074686520686f746b65792773207374616b6520746f20626520616c6c6f636174656420746f20746865206368696c6420697320616c736f207370656369666965642e00302320417267756d656e74733ae02a20606f726967696e6020283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a52756e74696d654f726967696e293a8d01202020202d20546865207369676e6174757265206f66207468652063616c6c696e6720636f6c646b65792e2053657474696e67206120686f746b6579206368696c642063616e206f6e6c7920626520646f6e652062792074686520636f6c646b65792e00682a2060686f746b6579602028543a3a4163636f756e744964293ac8202020202d2054686520686f746b65792077686963682077696c6c2062652061737369676e656420746865206368696c642e00642a20606368696c64602028543a3a4163636f756e744964293ad4202020202d20546865206368696c642077686963682077696c6c2062652061737369676e656420746f2074686520686f746b65792e00442a20606e6574756964602028753136293afc202020202d2054686520753136206e6574776f726b206964656e74696669657220776865726520746865206368696c646b65792077696c6c2065786973742e00542a206070726f706f7274696f6e602028753634293a8901202020202d2050726f706f7274696f6e206f662074686520686f746b65792773207374616b6520746f20626520676976656e20746f20746865206368696c642c207468652076616c7565206d75737420626520753634206e6f726d616c697a65642e002423204576656e74733a5c2a20604368696c64416464656453696e67756c6172603ad8202020202d204f6e207375636365737366756c6c79207265676973746572696e672061206368696c6420746f206120686f746b65792e002423204572726f72733a6c2a20605375624e6574776f726b446f65734e6f744578697374603adc202020202d20417474656d7074696e6720746f20726567697374657220746f2061206e6f6e2d6578697374656e74206e6574776f726b2ea42a2060526567697374726174696f6e4e6f745065726d69747465644f6e526f6f745375626e6574603ae4202020202d20417474656d7074696e6720746f2072656769737465722061206368696c64206f6e2074686520726f6f74206e6574776f726b2e642a20604e6f6e4173736f636961746564436f6c644b6579603a4501202020202d2054686520636f6c646b657920646f6573206e6f74206f776e2074686520686f746b6579206f7220746865206368696c64206973207468652073616d652061732074686520686f746b65792e6c2a2060486f744b65794163636f756e744e6f74457869737473603aa0202020202d2054686520686f746b6579206163636f756e7420646f6573206e6f742065786973742e0084232044657461696c6564204578706c616e6174696f6e206f6620436865636b733aa501312e202a2a5369676e617475726520566572696669636174696f6e2a2a3a20456e73757265732074686174207468652063616c6c657220686173207369676e656420746865207472616e73616374696f6e2c20766572696679696e672074686520636f6c646b65792ef901322e202a2a526f6f74204e6574776f726b20436865636b2a2a3a20456e73757265732074686174207468652064656c65676174696f6e206973206e6f74206f6e2074686520726f6f74206e6574776f726b2c206173206368696c6420686f746b65797320617265206e6f742076616c6964206f6e2074686520726f6f742e2901332e202a2a4e6574776f726b204578697374656e636520436865636b2a2a3a20456e737572657320746861742074686520737065636966696564206e6574776f726b206578697374732e2101342e202a2a4f776e65727368697020566572696669636174696f6e2a2a3a20456e737572657320746861742074686520636f6c646b6579206f776e732074686520686f746b65792e5901352e202a2a486f746b6579204163636f756e74204578697374656e636520436865636b2a2a3a20456e737572657320746861742074686520686f746b6579206163636f756e7420616c7265616479206578697374732e5901362e202a2a4368696c642d486f746b65792044697374696e6374696f6e2a2a3a20456e7375726573207468617420746865206368696c64206973206e6f74207468652073616d652061732074686520686f746b65792e6501372e202a2a4f6c64204368696c6472656e20436c65616e75702a2a3a2052656d6f7665732074686520686f746b65792066726f6d2074686520706172656e74206c697374206f6620697473206f6c64206368696c6472656e2ec901382e202a2a4e6577204368696c6472656e2041737369676e6d656e742a2a3a2041737369676e7320746865206e6577206368696c6420746f2074686520686f746b657920616e6420757064617465732074686520706172656e74206c69737420666f7220746865206e6577206368696c642e547363686564756c655f737761705f636f6c646b657904012c6e65775f636f6c646b6579000130543a3a4163636f756e74496400498011015363686564756c6573206120636f6c646b65792073776170206f7065726174696f6e20746f20626520657865637574656420617420612066757475726520626c6f636b2e004901546869732066756e6374696f6e20616c6c6f77732061207573657220746f207363686564756c6520746865207377617070696e67206f6620746865697220636f6c646b657920746f2061206e6577206f6e65490161742061207370656369666965642066757475726520626c6f636b2e205468652073776170206973206e6f7420657865637574656420696d6d6564696174656c7920627574206973207363686564756c65649c746f206f63637572206174207468652073706563696669656420626c6f636b206e756d6265722e002c2320417267756d656e74730065012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c2077686963682073686f756c64206265207369676e6564206279207468652063757272656e7420636f6c646b6579206f776e65722e59012a20606e65775f636f6c646b657960202d20546865206163636f756e74204944206f6620746865206e657720636f6c646b657920746861742077696c6c207265706c616365207468652063757272656e74206f6e652e25012a20607768656e60202d2054686520626c6f636b206e756d6265722061742077686963682074686520636f6c646b657920737761702073686f756c642062652065786563757465642e0024232052657475726e7300610152657475726e73206120604469737061746368526573756c7457697468506f7374496e666f6020696e6469636174696e67207768657468657220746865207363686564756c696e6720776173207375636365737366756c2e002023204572726f72730094546869732066756e6374696f6e206d61792072657475726e20616e206572726f722069663a6c2a20546865206f726967696e206973206e6f74207369676e65642ef82a20546865207363686564756c696e67206661696c732064756520746f20636f6e666c69637473206f722073797374656d20636f6e73747261696e74732e001c23204e6f7465730071012d205468652061637475616c2073776170206973206e6f7420706572666f726d656420627920746869732066756e6374696f6e2e204974206d6572656c79207363686564756c6573207468652073776170206f7065726174696f6e2e81012d2054686520776569676874206f6620746869732063616c6c2069732073657420746f20612066697865642076616c756520616e64206d6179206e6565642061646a7573746d656e74206261736564206f6e2062656e63686d61726b696e672e00182320544f444f003d012d20496d706c656d656e742070726f706572207765696768742063616c63756c6174696f6e206261736564206f6e2074686520636f6d706c6578697479206f6620746865206f7065726174696f6e2e1d012d20436f6e736964657220616464696e6720636865636b7320746f2070726576656e74207363686564756c696e6720746f6f2066617220696e746f20746865206675747572652e64544f444f3a2042656e63686d61726b20746869732063616c6c647363686564756c655f646973736f6c76655f6e6574776f726b0401186e65747569649c010c753136004a3809015363686564756c652074686520646973736f6c7574696f6e206f662061206e6574776f726b20617420612073706563696669656420626c6f636b206e756d6265722e002c2320417267756d656e74730009012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c206d757374206265207369676e6564206279207468652073656e6465722ee02a20606e657475696460202d2054686520753136206e6574776f726b206964656e74696669657220746f20626520646973736f6c7665642e0024232052657475726e7300590152657475726e73206120604469737061746368526573756c7457697468506f7374496e666f6020696e6469636174696e672073756363657373206f72206661696c757265206f6620746865206f7065726174696f6e2e002023205765696768740019015765696768742069732063616c63756c61746564206261736564206f6e20746865206e756d626572206f6620646174616261736520726561647320616e64207772697465732e307365745f6964656e746974791801106e616d6538011c5665633c75383e00010c75726c38011c5665633c75383e000114696d61676538011c5665633c75383e00011c646973636f726438011c5665633c75383e00012c6465736372697074696f6e38011c5665633c75383e0001286164646974696f6e616c38011c5665633c75383e004450bc2d2d2d2d205365742070726f6d65746865757320696e666f726d6174696f6e20666f7220746865206e6575726f6e2e1c2320417267733ac02a20276f726967696e273a20283c54206173206672616d655f73797374656d3a3a436f6e6669673e4f726967696e293a9c092d20546865207369676e6174757265206f66207468652063616c6c696e6720686f746b65792e00442a20276e6574756964272028753136293a78092d2054686520753136206e6574776f726b206964656e7469666965722e00482a202776657273696f6e272028753136293a94092d20205468652062697474656e736f722076657273696f6e206964656e7469666965722e00382a2027697027202875313238293aec092d205468652070726f6d65746865757320697020696e666f726d6174696f6e2061732061207531323820656e636f64656420696e74656765722e003c2a2027706f7274272028753136293af0092d205468652070726f6d65746865757320706f727420696e666f726d6174696f6e20617320612075313620656e636f64656420696e74656765722e00442a202769705f747970652720287538293a60092d205468652069702074797065207634206f722076362e004c7365745f7375626e65745f6964656e746974791001186e65747569649c010c75313600012c7375626e65745f6e616d6538011c5665633c75383e00012c6769746875625f7265706f38011c5665633c75383e0001387375626e65745f636f6e7461637438011c5665633c75383e004e40bc2d2d2d2d2053657420746865206964656e7469747920696e666f726d6174696f6e20666f722061207375626e65742e1c2320417267733acc2a20606f726967696e60202d20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293a4901202020202d20546865207369676e6174757265206f66207468652063616c6c696e6720636f6c646b65792c207768696368206d75737420626520746865206f776e6572206f6620746865207375626e65742e00442a20606e6574756964602028753136293ac8202020202d2054686520756e69717565206e6574776f726b206964656e746966696572206f6620746865207375626e65742e00682a20607375626e65745f6e616d656020285665633c75383e293a74202020202d20546865206e616d65206f6620746865207375626e65742e00682a20606769746875625f7265706f6020285665633c75383e293a0101202020202d2054686520476974487562207265706f7369746f7279206173736f636961746564207769746820746865207375626e6574206964656e746974792e00742a20607375626e65745f636f6e746163746020285665633c75383e293ab4202020202d2054686520636f6e7461637420696e666f726d6174696f6e20666f7220746865207375626e65742e7872656769737465725f6e6574776f726b5f776974685f6964656e74697479080118686f746b6579000130543a3a4163636f756e7449640001206964656e74697479fd0501604f7074696f6e3c5375626e65744964656e746974794f663e004f0478557365722072656769737465722061206e6577207375626e6574776f726b2c756e7374616b655f616c6c040118686f746b6579000130543a3a4163636f756e74496400536435022d2d2d2d2054686520696d706c656d656e746174696f6e20666f72207468652065787472696e73696320756e7374616b655f616c6c3a2052656d6f76657320616c6c207374616b652066726f6d206120686f746b6579206163636f756e74206163726f737320616c6c207375626e65747320616e642061646473206974206f6e746f206120636f6c646b65792e001c2320417267733acc2a20606f726967696e60202d20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293ab0202020202d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2060686f746b6579602028543a3a4163636f756e744964293a90202020202d20546865206173736f63696174656420686f746b6579206163636f756e742e002023204576656e743a3c2a205374616b6552656d6f7665643b0501202020202d204f6e20746865207375636365737366756c6c792072656d6f76696e67207374616b652066726f6d2074686520686f746b6579206163636f756e742e002423205261697365733a482a20604e6f7452656769737465726564603a3901202020202d205468726f776e20696620746865206163636f756e742077652061726520617474656d7074696e6720746f20756e7374616b652066726f6d206973206e6f6e206578697374656e742e00642a20604e6f6e4173736f636961746564436f6c644b6579603a2901202020202d205468726f776e2069662074686520636f6c646b657920646f6573206e6f74206f776e2074686520686f746b65792077652061726520756e7374616b696e672066726f6d2e00742a20604e6f74456e6f7567685374616b65546f5769746864726177603a4101202020202d205468726f776e206966207468657265206973206e6f7420656e6f756768207374616b65206f6e2074686520686f746b657920746f207769746864726177207468697320616d6f756e742e00602a20605478526174654c696d69744578636565646564603ac8202020202d205468726f776e206966206b65792068617320686974207472616e73616374696f6e2072617465206c696d697444756e7374616b655f616c6c5f616c706861040118686f746b6579000130543a3a4163636f756e74496400546435022d2d2d2d2054686520696d706c656d656e746174696f6e20666f72207468652065787472696e73696320756e7374616b655f616c6c3a2052656d6f76657320616c6c207374616b652066726f6d206120686f746b6579206163636f756e74206163726f737320616c6c207375626e65747320616e642061646473206974206f6e746f206120636f6c646b65792e001c2320417267733acc2a20606f726967696e60202d20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293ab0202020202d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00682a2060686f746b6579602028543a3a4163636f756e744964293a90202020202d20546865206173736f63696174656420686f746b6579206163636f756e742e002023204576656e743a3c2a205374616b6552656d6f7665643b0501202020202d204f6e20746865207375636365737366756c6c792072656d6f76696e67207374616b652066726f6d2074686520686f746b6579206163636f756e742e002423205261697365733a482a20604e6f7452656769737465726564603a3901202020202d205468726f776e20696620746865206163636f756e742077652061726520617474656d7074696e6720746f20756e7374616b652066726f6d206973206e6f6e206578697374656e742e00642a20604e6f6e4173736f636961746564436f6c644b6579603a2901202020202d205468726f776e2069662074686520636f6c646b657920646f6573206e6f74206f776e2074686520686f746b65792077652061726520756e7374616b696e672066726f6d2e00742a20604e6f74456e6f7567685374616b65546f5769746864726177603a4101202020202d205468726f776e206966207468657265206973206e6f7420656e6f756768207374616b65206f6e2074686520686f746b657920746f207769746864726177207468697320616d6f756e742e00602a20605478526174654c696d69744578636565646564603ac8202020202d205468726f776e206966206b65792068617320686974207472616e73616374696f6e2072617465206c696d6974286d6f76655f7374616b651401346f726967696e5f686f746b6579000130543a3a4163636f756e74496400014864657374696e6174696f6e5f686f746b6579000130543a3a4163636f756e7449640001346f726967696e5f6e65747569649c010c75313600014864657374696e6174696f6e5f6e65747569649c010c753136000130616c7068615f616d6f756e7418010c753634005554f9012d2d2d2d2054686520696d706c656d656e746174696f6e20666f72207468652065787472696e736963206d6f76655f7374616b653a204d6f7665732073706563696669656420616d6f756e74206f66207374616b652066726f6d206120686f746b657920746f20616e6f74686572206163726f7373207375626e6574732e001c2320417267733acc2a20606f726967696e60202d20283c54206173206672616d655f73797374656d3a3a436f6e6669673e3a3a4f726967696e293ab0202020202d20546865207369676e6174757265206f66207468652063616c6c6572277320636f6c646b65792e00842a20606f726967696e5f686f746b6579602028543a3a4163636f756e744964293ab0202020202d2054686520686f746b6579206163636f756e7420746f206d6f7665207374616b652066726f6d2e00982a206064657374696e6174696f6e5f686f746b6579602028543a3a4163636f756e744964293aa8202020202d2054686520686f746b6579206163636f756e7420746f206d6f7665207374616b6520746f2e00842a20606f726967696e5f6e6574756964602028543a3a4163636f756e744964293a9c202020202d20546865207375626e657420494420746f206d6f7665207374616b652066726f6d2e00982a206064657374696e6174696f6e5f6e6574756964602028543a3a4163636f756e744964293a94202020202d20546865207375626e657420494420746f206d6f7665207374616b6520746f2e00802a2060616c7068615f616d6f756e74602028543a3a4163636f756e744964293a94202020202d2054686520616c706861207374616b6520616d6f756e7420746f206d6f76652e00387472616e736665725f7374616b6514014c64657374696e6174696f6e5f636f6c646b6579000130543a3a4163636f756e744964000118686f746b6579000130543a3a4163636f756e7449640001346f726967696e5f6e65747569649c010c75313600014864657374696e6174696f6e5f6e65747569649c010c753136000130616c7068615f616d6f756e7418010c75363400565475015472616e736665727320612073706563696669656420616d6f756e74206f66207374616b652066726f6d206f6e6520636f6c646b657920746f20616e6f746865722c206f7074696f6e616c6c79206163726f7373207375626e6574732c787768696c65206b656570696e67207468652073616d6520686f746b65792e002c2320417267756d656e747365012a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2c207768696368206d757374206265207369676e65642062792074686520606f726967696e5f636f6c646b6579602e21012a206064657374696e6174696f6e5f636f6c646b657960202d2054686520636f6c646b657920746f20776869636820746865207374616b65206973207472616e736665727265642ec82a2060686f746b657960202d2054686520686f746b6579206173736f636961746564207769746820746865207374616b652ef42a20606f726967696e5f6e657475696460202d20546865206e6574776f726b2f7375626e657420494420746f206d6f7665207374616b652066726f6d2e71012a206064657374696e6174696f6e5f6e657475696460202d20546865206e6574776f726b2f7375626e657420494420746f206d6f7665207374616b6520746f2028666f722063726f73732d7375626e6574207472616e73666572292ecc2a2060616c7068615f616d6f756e7460202d2054686520616d6f756e74206f66207374616b6520746f207472616e736665722e002023204572726f72735052657475726e7320616e206572726f722069663ac82a20546865206f726967696e206973206e6f74207369676e65642062792074686520636f727265637420636f6c646b65792e7c2a20456974686572207375626e657420646f6573206e6f742065786973742e702a2054686520686f746b657920646f6573206e6f742065786973742e2d012a20546865726520697320696e73756666696369656e74207374616b65206f6e2060286f726967696e5f636f6c646b65792c20686f746b65792c206f726967696e5f6e657475696429602ef42a20546865207472616e7366657220616d6f756e742069732062656c6f7720746865206d696e696d756d207374616b6520726571756972656d656e742e002023204576656e7473bc4d617920656d6974206120605374616b655472616e7366657272656460206576656e74206f6e20737563636573732e28737761705f7374616b65100118686f746b6579000130543a3a4163636f756e7449640001346f726967696e5f6e65747569649c010c75313600014864657374696e6174696f6e5f6e65747569649c010c753136000130616c7068615f616d6f756e7418010c75363400574ca101537761707320612073706563696669656420616d6f756e74206f66207374616b652066726f6d206f6e65207375626e657420746f20616e6f746865722c207768696c65206b656570696e67207468652073616d6520636f6c646b657920616e6420686f746b65792e002c2320417267756d656e74739d012a20606f726967696e60202d20546865206f726967696e206f6620746865207472616e73616374696f6e2c207768696368206d757374206265207369676e65642062792074686520636f6c646b65792074686174206f776e73207468652060686f746b6579602ed42a2060686f746b657960202d2054686520686f746b65792077686f7365207374616b65206973206265696e6720737761707065642e19012a20606f726967696e5f6e657475696460202d20546865206e6574776f726b2f7375626e65742049442066726f6d207768696368207374616b652069732072656d6f7665642e1d012a206064657374696e6174696f6e5f6e657475696460202d20546865206e6574776f726b2f7375626e657420494420746f207768696368207374616b652069732061646465642ebc2a2060616c7068615f616d6f756e7460202d2054686520616d6f756e74206f66207374616b6520746f20737761702e002023204572726f72735052657475726e7320616e206572726f722069663a6d012a20546865207472616e73616374696f6e206973206e6f74207369676e65642062792074686520636f727265637420636f6c646b65792028692e652e2c2060636f6c646b65795f6f776e735f686f746b657960206661696c73292e01012a2045697468657220606f726967696e5f6e657475696460206f72206064657374696e6174696f6e5f6e65747569646020646f6573206e6f742065786973742e702a2054686520686f746b657920646f6573206e6f742065786973742e11012a20546865726520697320696e73756666696369656e74207374616b65206f6e206028636f6c646b65792c20686f746b65792c206f726967696e5f6e657475696429602ee42a20546865207377617020616d6f756e742069732062656c6f7720746865206d696e696d756d207374616b6520726571756972656d656e742e002023204576656e7473ac4d617920656d6974206120605374616b655377617070656460206576656e74206f6e20737563636573732e0c6101446973706174636861626c652066756e6374696f6e7320616c6c6f7720757365727320746f20696e7465726163742077697468207468652070616c6c657420616e6420696e766f6b65207374617465206368616e6765732e590154686573652066756e6374696f6e73206d6174657269616c697a65206173202265787472696e73696373222c20776869636820617265206f6674656e20636f6d706172656420746f207472616e73616374696f6e732e6101446973706174636861626c652066756e6374696f6e73206d75737420626520616e6e6f7461746564207769746820612077656967687420616e64206d7573742072657475726e2061204469737061746368526573756c742e01030000020503000503000002090300090300000408bcbc000d0300000230001103000002b50200150308586e6f64655f73756274656e736f725f72756e74696d652c52756e74696d6543616c6c00015c1853797374656d0400690101ad0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53797374656d2c2052756e74696d653e0000002454696d657374616d700400b10101b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c54696d657374616d702c2052756e74696d653e0002001c4772616e6470610400d50101b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4772616e6470612c2052756e74696d653e0004002042616c616e6365730400510201b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c42616c616e6365732c2052756e74696d653e0005003c53756274656e736f724d6f64756c650400fd0201d10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53756274656e736f724d6f64756c652c2052756e74696d653e0007002c547269756d7669726174650400190301c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547269756d7669726174652c2052756e74696d653e00080048547269756d7669726174654d656d6265727304001d0301dd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c547269756d7669726174654d656d626572732c2052756e74696d653e0009003453656e6174654d656d626572730400210301c90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c53656e6174654d656d626572732c2052756e74696d653e000a001c5574696c6974790400250301b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5574696c6974792c2052756e74696d653e000b00105375646f04003d0301a50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5375646f2c2052756e74696d653e000c00204d756c74697369670400410301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4d756c74697369672c2052756e74696d653e000d0020507265696d6167650400490301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c507265696d6167652c2052756e74696d653e000e00245363686564756c657204004d0301b90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c5363686564756c65722c2052756e74696d653e000f001450726f78790400550301a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c50726f78792c2052756e74696d653e00100020526567697374727904005d0301b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c52656769737472792c2052756e74696d653e0011002c436f6d6d69746d656e74730400690401c10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c436f6d6d69746d656e74732c2052756e74696d653e0012002841646d696e5574696c7304007d0501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c41646d696e5574696c732c2052756e74696d653e00130020536166654d6f64650400810501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c536166654d6f64652c2052756e74696d653e00140020457468657265756d0400850501b50173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c457468657265756d2c2052756e74696d653e0015000c45564d0400ad0501a10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c45564d2c2052756e74696d653e0016002844796e616d69634665650400c10501bd0173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c44796e616d69634665652c2052756e74696d653e0018001c426173654665650400c50501b10173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c426173654665652c2052756e74696d653e001900144472616e640400c90501a90173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a64697370617463680a3a3a43616c6c61626c6543616c6c466f723c4472616e642c2052756e74696d653e001a000019030c4470616c6c65745f636f6c6c6563746976651870616c6c65741043616c6c0804540004490001182c7365745f6d656d626572730c012c6e65775f6d656d626572735d0201445665633c543a3a4163636f756e7449643e0001147072696d65a801504f7074696f6e3c543a3a4163636f756e7449643e0001246f6c645f636f756e7410012c4d656d626572436f756e74000060805365742074686520636f6c6c6563746976652773206d656d626572736869702e0045012d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e642070726f7669646520697420736f727465642ee02d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e59012d20606f6c645f636f756e74603a2054686520757070657220626f756e6420666f72207468652070726576696f7573206e756d626572206f66206d656d6265727320696e2073746f726167652e205573656420666f7250202077656967687420657374696d6174696f6e2e00d4546865206469737061746368206f6620746869732063616c6c206d75737420626520605365744d656d626572734f726967696e602e0051014e4f54453a20446f6573206e6f7420656e666f7263652074686520657870656374656420604d61784d656d6265727360206c696d6974206f6e2074686520616d6f756e74206f66206d656d626572732c2062757421012020202020207468652077656967687420657374696d6174696f6e732072656c79206f6e20697420746f20657374696d61746520646973706174636861626c65207765696768742e002823205741524e494e473a005901546865206070616c6c65742d636f6c6c656374697665602063616e20616c736f206265206d616e61676564206279206c6f676963206f757473696465206f66207468652070616c6c6574207468726f75676820746865b8696d706c656d656e746174696f6e206f6620746865207472616974205b604368616e67654d656d62657273605d2e5501416e792063616c6c20746f20607365745f6d656d6265727360206d757374206265206361726566756c207468617420746865206d656d6265722073657420646f65736e277420676574206f7574206f662073796e63a477697468206f74686572206c6f676963206d616e6167696e6720746865206d656d626572207365742e0038232320436f6d706c65786974793a502d20604f284d50202b204e29602077686572653ae020202d20604d60206f6c642d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429e020202d20604e60206e65772d6d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564299820202d206050602070726f706f73616c732d636f756e742028636f64652d626f756e646564291c6578656375746508012070726f706f73616c1503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e646101010c753332000124f0446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e00a84f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e0038232320436f6d706c65786974793a5c2d20604f2842202b204d202b205029602077686572653ad82d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429882d20604d60206d656d626572732d636f756e742028636f64652d626f756e64656429a82d2060506020636f6d706c6578697479206f66206469737061746368696e67206070726f706f73616c601c70726f706f73650c012070726f706f73616c1503017c426f783c3c5420617320436f6e6669673c493e3e3a3a50726f706f73616c3e0001306c656e6774685f626f756e646101010c7533320001206475726174696f6e100144426c6f636b4e756d626572466f723c543e000238f84164642061206e65772070726f706f73616c20746f2065697468657220626520766f746564206f6e206f72206578656375746564206469726563746c792e00845265717569726573207468652073656e64657220746f206265206d656d6265722e004101607468726573686f6c64602064657465726d696e65732077686574686572206070726f706f73616c60206973206578656375746564206469726563746c792028607468726573686f6c64203c20326029546f722070757420757020666f7220766f74696e672e0034232320436f6d706c6578697479ac2d20604f2842202b204d202b2050312960206f7220604f2842202b204d202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c420202d206272616e6368696e6720697320696e666c75656e63656420627920607468726573686f6c64602077686572653af4202020202d20605031602069732070726f706f73616c20657865637574696f6e20636f6d706c65786974792028607468726573686f6c64203c20326029fc202020202d20605032602069732070726f706f73616c732d636f756e742028636f64652d626f756e646564292028607468726573686f6c64203e3d2032602910766f74650c012070726f706f73616c34011c543a3a48617368000114696e6465786101013450726f706f73616c496e64657800011c617070726f7665240110626f6f6c000324f041646420616e20617965206f72206e617920766f746520666f72207468652073656e64657220746f2074686520676976656e2070726f706f73616c2e008c5265717569726573207468652073656e64657220746f2062652061206d656d6265722e0049015472616e73616374696f6e20666565732077696c6c2062652077616976656420696620746865206d656d62657220697320766f74696e67206f6e20616e7920706172746963756c61722070726f706f73616c5101666f72207468652066697273742074696d6520616e64207468652063616c6c206973207375636365737366756c2e2053756273657175656e7420766f7465206368616e6765732077696c6c206368617267652061106665652e34232320436f6d706c657869747909012d20604f284d296020776865726520604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e646564294c646973617070726f76655f70726f706f73616c04013470726f706f73616c5f6861736834011c543a3a486173680005285901446973617070726f766520612070726f706f73616c2c20636c6f73652c20616e642072656d6f76652069742066726f6d207468652073797374656d2c207265676172646c657373206f66206974732063757272656e741873746174652e00884d7573742062652063616c6c65642062792074686520526f6f74206f726967696e2e002c506172616d65746572733a1d012a206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20746861742073686f756c6420626520646973617070726f7665642e0034232320436f6d706c6578697479ac4f285029207768657265205020697320746865206e756d626572206f66206d61782070726f706f73616c7314636c6f736510013470726f706f73616c5f6861736834011c543a3a48617368000114696e6465786101013450726f706f73616c496e64657800015470726f706f73616c5f7765696768745f626f756e642c01185765696768740001306c656e6774685f626f756e646101010c7533320006604d01436c6f7365206120766f746520746861742069732065697468657220617070726f7665642c20646973617070726f766564206f722077686f736520766f74696e6720706572696f642068617320656e6465642e0055014d61792062652063616c6c656420627920616e79207369676e6564206163636f756e7420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e00490149662063616c6c6564206265666f72652074686520656e64206f662074686520766f74696e6720706572696f642069742077696c6c206f6e6c7920636c6f73652074686520766f7465206966206974206973bc68617320656e6f75676820766f74657320746f20626520617070726f766564206f7220646973617070726f7665642e00490149662063616c6c65642061667465722074686520656e64206f662074686520766f74696e6720706572696f642061627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e732501756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e00610149662074686520636c6f7365206f7065726174696f6e20636f6d706c65746573207375636365737366756c6c79207769746820646973617070726f76616c2c20746865207472616e73616374696f6e206665652077696c6c5d016265207761697665642e204f746865727769736520657865637574696f6e206f662074686520617070726f766564206f7065726174696f6e2077696c6c206265206368617267656420746f207468652063616c6c65722e0061012b206070726f706f73616c5f7765696768745f626f756e64603a20546865206d6178696d756d20616d6f756e74206f662077656967687420636f6e73756d656420627920657865637574696e672074686520636c6f7365642470726f706f73616c2e61012b20606c656e6774685f626f756e64603a2054686520757070657220626f756e6420666f7220746865206c656e677468206f66207468652070726f706f73616c20696e2073746f726167652e20436865636b65642076696135016073746f726167653a3a726561646020736f206974206973206073697a655f6f663a3a3c7533323e2829203d3d203460206c6172676572207468616e207468652070757265206c656e6774682e0034232320436f6d706c6578697479742d20604f2842202b204d202b205031202b20503229602077686572653ae020202d20604260206973206070726f706f73616c602073697a6520696e20627974657320286c656e6774682d6665652d626f756e64656429dc20202d20604d60206973206d656d626572732d636f756e742028636f64652d20616e6420676f7665726e616e63652d626f756e64656429c820202d20605031602069732074686520636f6d706c6578697479206f66206070726f706f73616c6020707265696d6167652ea420202d20605032602069732070726f706f73616c2d636f756e742028636f64652d626f756e64656429040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e1d030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665550201504163636f756e7449644c6f6f6b75704f663c543e00010c616464550201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d626572735d0201445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577550201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e21030c4470616c6c65745f6d656d626572736869701870616c6c65741043616c6c08045400044900011c286164645f6d656d62657204010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e00000c784164642061206d656d626572206077686f6020746f20746865207365742e009c4d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a4164644f726967696e602e3472656d6f76655f6d656d62657204010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e00010c8c52656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e00a84d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52656d6f76654f726967696e602e2c737761705f6d656d62657208011872656d6f7665550201504163636f756e7449644c6f6f6b75704f663c543e00010c616464550201504163636f756e7449644c6f6f6b75704f663c543e000214bc53776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e00a04d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a537761704f726967696e602e000d015072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e3472657365745f6d656d6265727304011c6d656d626572735d0201445665633c543a3a4163636f756e7449643e00031055014368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64687061737320606d656d6265727360207072652d736f727465642e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a52657365744f726967696e602e286368616e67655f6b657904010c6e6577550201504163636f756e7449644c6f6f6b75704f663c543e000414d453776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e00f04d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e001d015072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e247365745f7072696d6504010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e00050cbc53657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e2c636c6561725f7072696d6500060c9452656d6f766520746865207072696d65206d656d626572206966206974206578697374732e00a44d6179206f6e6c792062652063616c6c65642066726f6d2060543a3a5072696d654f726967696e602e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e25030c3870616c6c65745f7574696c6974791870616c6c65741043616c6c04045400011814626174636804011463616c6c732903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000487c53656e642061206261746368206f662064697370617463682063616c6c732e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e005501546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e31016576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e207468655501604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d6164654d01616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c65746564604c6576656e74206973206465706f73697465642e3461735f64657269766174697665080114696e6465789c010c75313600011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000134dc53656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e00550146696c7465722066726f6d206f726967696e206172652070617373656420616c6f6e672e205468652063616c6c2077696c6c2062652064697370617463686564207769746820616e206f726967696e207768696368bc757365207468652073616d652066696c74657220617320746865206f726967696e206f6620746869732063616c6c2e0045014e4f54453a20496620796f75206e65656420746f20656e73757265207468617420616e79206163636f756e742d62617365642066696c746572696e67206973206e6f7420686f6e6f7265642028692e652e61016265636175736520796f7520657870656374206070726f78796020746f2068617665206265656e2075736564207072696f7220696e207468652063616c6c20737461636b20616e6420796f7520646f206e6f742077616e7451017468652063616c6c207265737472696374696f6e7320746f206170706c7920746f20616e79207375622d6163636f756e7473292c207468656e20757365206061735f6d756c74695f7468726573686f6c645f31607c696e20746865204d756c74697369672070616c6c657420696e73746561642e00f44e4f54453a205072696f7220746f2076657273696f6e202a31322c2074686973207761732063616c6c6564206061735f6c696d697465645f737562602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2462617463685f616c6c04011463616c6c732903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000234ec53656e642061206261746368206f662064697370617463682063616c6c7320616e642061746f6d6963616c6c792065786563757465207468656d2e21015468652077686f6c65207472616e73616374696f6e2077696c6c20726f6c6c6261636b20616e64206661696c20696620616e79206f66207468652063616c6c73206661696c65642e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e0055014966206f726967696e20697320726f6f74207468656e207468652063616c6c7320617265206469737061746368656420776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c64697370617463685f617308012461735f6f726967696e2d030154426f783c543a3a50616c6c6574734f726967696e3e00011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000318c84469737061746368657320612066756e6374696f6e2063616c6c207769746820612070726f7669646564206f726967696e2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e0034232320436f6d706c65786974791c2d204f2831292e2c666f7263655f626174636804011463616c6c732903017c5665633c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0004347c53656e642061206261746368206f662064697370617463682063616c6c732ed4556e6c696b6520606261746368602c20697420616c6c6f7773206572726f727320616e6420776f6e277420696e746572727570742e00b04d61792062652063616c6c65642066726f6d20616e79206f726967696e2065786365707420604e6f6e65602e005d012d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e20546865206e756d626572206f662063616c6c206d757374206e6f74390120206578636565642074686520636f6e7374616e743a2060626174636865645f63616c6c735f6c696d6974602028617661696c61626c6520696e20636f6e7374616e74206d65746164617461292e004d014966206f726967696e20697320726f6f74207468656e207468652063616c6c732061726520646973706174636820776974686f757420636865636b696e67206f726967696e2066696c7465722e202854686973ec696e636c7564657320627970617373696e6720606672616d655f73797374656d3a3a436f6e6669673a3a4261736543616c6c46696c74657260292e0034232320436f6d706c6578697479d02d204f284329207768657265204320697320746865206e756d626572206f662063616c6c7320746f20626520626174636865642e2c776974685f77656967687408011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001187765696768742c0118576569676874000518c4446973706174636820612066756e6374696f6e2063616c6c2077697468206120737065636966696564207765696768742e002d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b8526f6f74206f726967696e20746f20737065636966792074686520776569676874206f66207468652063616c6c2e00c4546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e29030000021503002d0308586e6f64655f73756274656e736f725f72756e74696d65304f726967696e43616c6c65720001101873797374656d0400310301746672616d655f73797374656d3a3a4f726967696e3c52756e74696d653e0000002c547269756d7669726174650400350301010170616c6c65745f636f6c6c6563746976653a3a4f726967696e3c52756e74696d652c2070616c6c65745f636f6c6c6563746976653a3a496e7374616e6365313e00080020457468657265756d04003903015c70616c6c65745f657468657265756d3a3a4f726967696e00150010566f69640400010201410173656c663a3a73705f6170695f68696464656e5f696e636c756465735f636f6e7374727563745f72756e74696d653a3a68696464656e5f696e636c7564653a3a0a5f5f707269766174653a3a566f69640003000031030c346672616d655f737570706f7274206469737061746368245261774f726967696e04244163636f756e7449640100010c10526f6f74000000185369676e656404000001244163636f756e744964000100104e6f6e65000200003503084470616c6c65745f636f6c6c656374697665245261774f726967696e08244163636f756e7449640100044900010c1c4d656d62657273080010012c4d656d626572436f756e74000010012c4d656d626572436f756e74000000184d656d62657204000001244163636f756e744964000100205f5068616e746f6d000200003903083c70616c6c65745f657468657265756d245261774f726967696e0001044c457468657265756d5472616e73616374696f6e04000d01011048313630000000003d030c2c70616c6c65745f7375646f1870616c6c65741043616c6c040454000114107375646f04011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000004350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e547375646f5f756e636865636b65645f77656967687408011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001187765696768742c0118576569676874000114350141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e2d01546869732066756e6374696f6e20646f6573206e6f7420636865636b2074686520776569676874206f66207468652063616c6c2c20616e6420696e737465616420616c6c6f777320746865b05375646f207573657220746f20737065636966792074686520776569676874206f66207468652063616c6c2e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e1c7365745f6b657904010c6e6577550201504163636f756e7449644c6f6f6b75704f663c543e0002085d0141757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f106b65792e1c7375646f5f617308010c77686f550201504163636f756e7449644c6f6f6b75704f663c543e00011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0003104d0141757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d406120676976656e206163636f756e742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e2872656d6f76655f6b657900040c845065726d616e656e746c792072656d6f76657320746865207375646f206b65792e006c2a2a546869732063616e6e6f7420626520756e2d646f6e652e2a2a040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e41030c3c70616c6c65745f6d756c74697369671870616c6c65741043616c6c0404540001105061735f6d756c74695f7468726573686f6c645f310801446f746865725f7369676e61746f726965735d0201445665633c543a3a4163636f756e7449643e00011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000305101496d6d6564696174656c792064697370617463682061206d756c74692d7369676e61747572652063616c6c207573696e6720612073696e676c6520617070726f76616c2066726f6d207468652063616c6c65722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e003d012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f206172652070617274206f662074686501016d756c74692d7369676e61747572652c2062757420646f206e6f7420706172746963697061746520696e2074686520617070726f76616c2070726f636573732e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e00b8526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c742e0034232320436f6d706c657869747919014f285a202b204329207768657265205a20697320746865206c656e677468206f66207468652063616c6c20616e6420432069747320657865637574696f6e207765696768742e2061735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965735d0201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74450301904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0001286d61785f7765696768742c011857656967687400019c5501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e00b049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e882d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e001d014e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f20757365190160617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e005901526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f746865727769736555016f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642cdc6d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e0034232320436f6d706c6578697479502d20604f2853202b205a202b2043616c6c29602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e21012d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e6c2d2054686520776569676874206f6620746865206063616c6c602e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e40617070726f76655f61735f6d756c74691401247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965735d0201445665633c543a3a4163636f756e7449643e00013c6d617962655f74696d65706f696e74450301904f7074696f6e3c54696d65706f696e743c426c6f636b4e756d626572466f723c543e3e3e00012463616c6c5f686173680401205b75383b2033325d0001286d61785f7765696768742c01185765696768740002785501526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e74206966f8617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e002d015061796d656e743a20604465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c75733d01607468726573686f6c64602074696d657320604465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f723469732063616e63656c6c65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e59012d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e20496620697420697351016e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64d47472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0035014e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602ed42d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292ef82d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e302d204f6e65206576656e742e4d012d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c20776974682061206465706f7369741901202074616b656e20666f7220697473206c69666574696d65206f6620604465706f73697442617365202b207468726573686f6c64202a204465706f736974466163746f72602e3c63616e63656c5f61735f6d756c74691001247468726573686f6c649c010c7531360001446f746865725f7369676e61746f726965735d0201445665633c543a3a4163636f756e7449643e00012474696d65706f696e74d8017054696d65706f696e743c426c6f636b4e756d626572466f723c543e3e00012463616c6c5f686173680401205b75383b2033325d000354550143616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c79c4666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0055012d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e41012d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869736c64697370617463682e204d6179206e6f7420626520656d7074792e5d012d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c787472616e73616374696f6e20666f7220746869732064697370617463682ecc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e0034232320436f6d706c6578697479242d20604f285329602ecc2d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e3d012d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f66450120207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2ebc2d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e302d204f6e65206576656e742e842d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e702d2053746f726167653a2072656d6f766573206f6e65206974656d2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e450304184f7074696f6e04045401d80108104e6f6e6500000010536f6d650400d8000001000049030c3c70616c6c65745f707265696d6167651870616c6c65741043616c6c040454000114346e6f74655f707265696d616765040114627974657338011c5665633c75383e000010745265676973746572206120707265696d616765206f6e2d636861696e2e00550149662074686520707265696d616765207761732070726576696f75736c79207265717565737465642c206e6f2066656573206f72206465706f73697473206172652074616b656e20666f722070726f766964696e67550174686520707265696d6167652e204f74686572776973652c2061206465706f7369742069732074616b656e2070726f706f7274696f6e616c20746f207468652073697a65206f662074686520707265696d6167652e3c756e6e6f74655f707265696d6167650401106861736834011c543a3a48617368000118dc436c65617220616e20756e72657175657374656420707265696d6167652066726f6d207468652072756e74696d652073746f726167652e00fc496620606c656e602069732070726f76696465642c207468656e2069742077696c6c2062652061206d7563682063686561706572206f7065726174696f6e2e0001012d206068617368603a205468652068617368206f662074686520707265696d61676520746f2062652072656d6f7665642066726f6d207468652073746f72652eb82d20606c656e603a20546865206c656e677468206f662074686520707265696d616765206f66206068617368602e40726571756573745f707265696d6167650401106861736834011c543a3a48617368000210410152657175657374206120707265696d6167652062652075706c6f6164656420746f2074686520636861696e20776974686f757420706179696e6720616e792066656573206f72206465706f736974732e00550149662074686520707265696d6167652072657175657374732068617320616c7265616479206265656e2070726f7669646564206f6e2d636861696e2c20776520756e7265736572766520616e79206465706f7369743901612075736572206d6179206861766520706169642c20616e642074616b652074686520636f6e74726f6c206f662074686520707265696d616765206f7574206f662074686569722068616e64732e48756e726571756573745f707265696d6167650401106861736834011c543a3a4861736800030cbc436c65617220612070726576696f75736c79206d616465207265717565737420666f72206120707265696d6167652e002d014e4f54453a2054484953204d555354204e4f542042452043414c4c4544204f4e20606861736860204d4f52452054494d4553205448414e2060726571756573745f707265696d616765602e38656e737572655f75706461746564040118686173686573b401305665633c543a3a486173683e00040cc4456e7375726520746861742074686520612062756c6b206f66207072652d696d616765732069732075706772616465642e003d015468652063616c6c65722070617973206e6f20666565206966206174206c6561737420393025206f66207072652d696d616765732077657265207375636365737366756c6c7920757064617465642e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e4d030c4070616c6c65745f7363686564756c65721870616c6c65741043616c6c040454000128207363686564756c651001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963510301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00000470416e6f6e796d6f75736c79207363686564756c652061207461736b2e1863616e63656c0801107768656e100144426c6f636b4e756d626572466f723c543e000114696e64657810010c7533320001049443616e63656c20616e20616e6f6e796d6f75736c79207363686564756c6564207461736b2e387363686564756c655f6e616d656414010869640401205461736b4e616d650001107768656e100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963510301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000204585363686564756c652061206e616d6564207461736b2e3063616e63656c5f6e616d656404010869640401205461736b4e616d650003047843616e63656c2061206e616d6564207363686564756c6564207461736b2e387363686564756c655f61667465721001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963510301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000404a8416e6f6e796d6f75736c79207363686564756c652061207461736b20616674657220612064656c61792e507363686564756c655f6e616d65645f616674657214010869640401205461736b4e616d650001146166746572100144426c6f636b4e756d626572466f723c543e0001386d617962655f706572696f646963510301ac4f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d626572466f723c543e3e3e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e000504905363686564756c652061206e616d6564207461736b20616674657220612064656c61792e247365745f72657472790c01107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e00011c726574726965730801087538000118706572696f64100144426c6f636b4e756d626572466f723c543e0006305901536574206120726574727920636f6e66696775726174696f6e20666f722061207461736b20736f20746861742c20696e206361736520697473207363686564756c65642072756e206661696c732c2069742077696c6c5501626520726574726965642061667465722060706572696f646020626c6f636b732c20666f72206120746f74616c20616d6f756e74206f66206072657472696573602072657472696573206f7220756e74696c2069742473756363656564732e0055015461736b73207768696368206e65656420746f206265207363686564756c656420666f72206120726574727920617265207374696c6c207375626a65637420746f20776569676874206d65746572696e6720616e6451016167656e64612073706163652c2073616d65206173206120726567756c6172207461736b2e204966206120706572696f646963207461736b206661696c732c2069742077696c6c206265207363686564756c6564906e6f726d616c6c79207768696c6520746865207461736b206973207265747279696e672e0051015461736b73207363686564756c6564206173206120726573756c74206f66206120726574727920666f72206120706572696f646963207461736b2061726520756e6e616d65642c206e6f6e2d706572696f6469633d01636c6f6e6573206f6620746865206f726967696e616c207461736b2e20546865697220726574727920636f6e66696775726174696f6e2077696c6c20626520646572697665642066726f6d207468654d016f726967696e616c207461736b277320636f6e66696775726174696f6e2c206275742077696c6c20686176652061206c6f7765722076616c756520666f72206072656d61696e696e6760207468616e20746865646f726967696e616c2060746f74616c5f72657472696573602e3c7365745f72657472795f6e616d65640c010869640401205461736b4e616d6500011c726574726965730801087538000118706572696f64100144426c6f636b4e756d626572466f723c543e0007305d01536574206120726574727920636f6e66696775726174696f6e20666f722061206e616d6564207461736b20736f20746861742c20696e206361736520697473207363686564756c65642072756e206661696c732c2069745d0177696c6c20626520726574726965642061667465722060706572696f646020626c6f636b732c20666f72206120746f74616c20616d6f756e74206f66206072657472696573602072657472696573206f7220756e74696c3069742073756363656564732e0055015461736b73207768696368206e65656420746f206265207363686564756c656420666f72206120726574727920617265207374696c6c207375626a65637420746f20776569676874206d65746572696e6720616e6451016167656e64612073706163652c2073616d65206173206120726567756c6172207461736b2e204966206120706572696f646963207461736b206661696c732c2069742077696c6c206265207363686564756c6564906e6f726d616c6c79207768696c6520746865207461736b206973207265747279696e672e0051015461736b73207363686564756c6564206173206120726573756c74206f66206120726574727920666f72206120706572696f646963207461736b2061726520756e6e616d65642c206e6f6e2d706572696f6469633d01636c6f6e6573206f6620746865206f726967696e616c207461736b2e20546865697220726574727920636f6e66696775726174696f6e2077696c6c20626520646572697665642066726f6d207468654d016f726967696e616c207461736b277320636f6e66696775726174696f6e2c206275742077696c6c20686176652061206c6f7765722076616c756520666f72206072656d61696e696e6760207468616e20746865646f726967696e616c2060746f74616c5f72657472696573602e3063616e63656c5f72657472790401107461736be401785461736b416464726573733c426c6f636b4e756d626572466f723c543e3e000804a852656d6f7665732074686520726574727920636f6e66696775726174696f6e206f662061207461736b2e4863616e63656c5f72657472795f6e616d656404010869640401205461736b4e616d65000904bc43616e63656c2074686520726574727920636f6e66696775726174696f6e206f662061206e616d6564207461736b2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e510304184f7074696f6e04045401e40108104e6f6e6500000010536f6d650400e4000001000055030c3070616c6c65745f70726f78791870616c6c65741043616c6c0404540001281470726f78790c01107265616c550201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065590301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e0000244d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f726973656420666f72207468726f75676830606164645f70726f7879602e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e246164645f70726f78790c012064656c6567617465550201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065f00130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e0001244501526567697374657220612070726f7879206163636f756e7420666f72207468652073656e64657220746861742069732061626c6520746f206d616b652063616c6c73206f6e2069747320626568616c662e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a11012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f206d616b6520612070726f78792efc2d206070726f78795f74797065603a20546865207065726d697373696f6e7320616c6c6f77656420666f7220746869732070726f7879206163636f756e742e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e3072656d6f76655f70726f78790c012064656c6567617465550201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065f00130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e00021ca8556e726567697374657220612070726f7879206163636f756e7420666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a25012d206070726f7879603a20546865206163636f756e74207468617420746865206063616c6c65726020776f756c64206c696b6520746f2072656d6f766520617320612070726f78792e41012d206070726f78795f74797065603a20546865207065726d697373696f6e732063757272656e746c7920656e61626c656420666f72207468652072656d6f7665642070726f7879206163636f756e742e3872656d6f76655f70726f78696573000318b4556e726567697374657220616c6c2070726f7879206163636f756e747320666f72207468652073656e6465722e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e0041015741524e494e473a2054686973206d61792062652063616c6c6564206f6e206163636f756e74732063726561746564206279206070757265602c20686f776576657220696620646f6e652c207468656e590174686520756e726573657276656420666565732077696c6c20626520696e61636365737369626c652e202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a2c6372656174655f707572650c012870726f78795f74797065f00130543a3a50726f78795479706500011464656c6179100144426c6f636b4e756d626572466f723c543e000114696e6465789c010c7531360004483901537061776e2061206672657368206e6577206163636f756e7420746861742069732067756172616e7465656420746f206265206f746865727769736520696e61636365737369626c652c20616e64fc696e697469616c697a65206974207769746820612070726f7879206f66206070726f78795f747970656020666f7220606f726967696e602073656e6465722e006c5265717569726573206120605369676e656460206f726967696e2e0051012d206070726f78795f74797065603a205468652074797065206f66207468652070726f78792074686174207468652073656e6465722077696c6c2062652072656769737465726564206173206f766572207468654d016e6577206163636f756e742e20546869732077696c6c20616c6d6f737420616c7761797320626520746865206d6f7374207065726d697373697665206050726f7879547970656020706f737369626c6520746f78616c6c6f7720666f72206d6178696d756d20666c65786962696c6974792e51012d2060696e646578603a204120646973616d626967756174696f6e20696e6465782c20696e206361736520746869732069732063616c6c6564206d756c7469706c652074696d657320696e207468652073616d655d017472616e73616374696f6e2028652e672e207769746820607574696c6974793a3a626174636860292e20556e6c65737320796f75277265207573696e67206062617463686020796f752070726f6261626c79206a7573744077616e7420746f20757365206030602e4d012d206064656c6179603a2054686520616e6e6f756e63656d656e7420706572696f64207265717569726564206f662074686520696e697469616c2070726f78792e2057696c6c2067656e6572616c6c79206265147a65726f2e0051014661696c73207769746820604475706c69636174656020696620746869732068617320616c7265616479206265656e2063616c6c656420696e2074686973207472616e73616374696f6e2c2066726f6d207468659873616d652073656e6465722c2077697468207468652073616d6520706172616d65746572732e00e44661696c732069662074686572652061726520696e73756666696369656e742066756e647320746f2070617920666f72206465706f7369742e246b696c6c5f7075726514011c737061776e6572550201504163636f756e7449644c6f6f6b75704f663c543e00012870726f78795f74797065f00130543a3a50726f787954797065000114696e6465789c010c75313600011868656967687461010144426c6f636b4e756d626572466f723c543e0001246578745f696e6465786101010c753332000540a052656d6f76657320612070726576696f75736c7920737061776e656420707572652070726f78792e0049015741524e494e473a202a2a416c6c2061636365737320746f2074686973206163636f756e742077696c6c206265206c6f73742e2a2a20416e792066756e64732068656c6420696e2069742077696c6c20626534696e61636365737369626c652e0059015265717569726573206120605369676e656460206f726967696e2c20616e64207468652073656e646572206163636f756e74206d7573742068617665206265656e206372656174656420627920612063616c6c20746f94607075726560207769746820636f72726573706f6e64696e6720706172616d65746572732e0039012d2060737061776e6572603a20546865206163636f756e742074686174206f726967696e616c6c792063616c6c65642060707572656020746f206372656174652074686973206163636f756e742e39012d2060696e646578603a2054686520646973616d626967756174696f6e20696e646578206f726967696e616c6c792070617373656420746f206070757265602e2050726f6261626c79206030602eec2d206070726f78795f74797065603a205468652070726f78792074797065206f726967696e616c6c792070617373656420746f206070757265602e29012d2060686569676874603a2054686520686569676874206f662074686520636861696e207768656e207468652063616c6c20746f20607075726560207761732070726f6365737365642e35012d20606578745f696e646578603a205468652065787472696e73696320696e64657820696e207768696368207468652063616c6c20746f20607075726560207761732070726f6365737365642e0035014661696c73207769746820604e6f5065726d697373696f6e6020696e2063617365207468652063616c6c6572206973206e6f7420612070726576696f75736c7920637265617465642070757265dc6163636f756e742077686f7365206070757265602063616c6c2068617320636f72726573706f6e64696e6720706172616d65746572732e20616e6e6f756e63650801107265616c550201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e00063c05015075626c697368207468652068617368206f6620612070726f78792d63616c6c20746861742077696c6c206265206d61646520696e20746865206675747572652e005d0154686973206d7573742062652063616c6c656420736f6d65206e756d626572206f6620626c6f636b73206265666f72652074686520636f72726573706f6e64696e67206070726f78796020697320617474656d7074656425016966207468652064656c6179206173736f6369617465642077697468207468652070726f78792072656c6174696f6e736869702069732067726561746572207468616e207a65726f2e0011014e6f206d6f7265207468616e20604d617850656e64696e676020616e6e6f756e63656d656e7473206d6179206265206d61646520617420616e79206f6e652074696d652e000901546869732077696c6c2074616b652061206465706f736974206f662060416e6e6f756e63656d656e744465706f736974466163746f72602061732077656c6c206173190160416e6e6f756e63656d656e744465706f736974426173656020696620746865726520617265206e6f206f746865722070656e64696e6720616e6e6f756e63656d656e74732e002501546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420612070726f7879206f6620607265616c602e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656d6f76655f616e6e6f756e63656d656e740801107265616c550201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e0007287052656d6f7665206120676976656e20616e6e6f756e63656d656e742e0059014d61792062652063616c6c656420627920612070726f7879206163636f756e7420746f2072656d6f766520612063616c6c20746865792070726576696f75736c7920616e6e6f756e63656420616e642072657475726e30746865206465706f7369742e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e15012d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e4c72656a6563745f616e6e6f756e63656d656e7408012064656c6567617465550201504163636f756e7449644c6f6f6b75704f663c543e00012463616c6c5f6861736834013443616c6c486173684f663c543e000828b052656d6f76652074686520676976656e20616e6e6f756e63656d656e74206f6620612064656c65676174652e0061014d61792062652063616c6c6564206279206120746172676574202870726f7869656429206163636f756e7420746f2072656d6f766520612063616c6c2074686174206f6e65206f662074686569722064656c6567617465732501286064656c656761746560292068617320616e6e6f756e63656420746865792077616e7420746f20657865637574652e20546865206465706f7369742069732072657475726e65642e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733af42d206064656c6567617465603a20546865206163636f756e7420746861742070726576696f75736c7920616e6e6f756e636564207468652063616c6c2ebc2d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f206265206d6164652e3c70726f78795f616e6e6f756e63656410012064656c6567617465550201504163636f756e7449644c6f6f6b75704f663c543e0001107265616c550201504163636f756e7449644c6f6f6b75704f663c543e000140666f7263655f70726f78795f74797065590301504f7074696f6e3c543a3a50726f7879547970653e00011063616c6c1503017c426f783c3c5420617320436f6e6669673e3a3a52756e74696d6543616c6c3e00092c4d0144697370617463682074686520676976656e206063616c6c602066726f6d20616e206163636f756e742074686174207468652073656e64657220697320617574686f72697a656420666f72207468726f75676830606164645f70726f7879602e00a852656d6f76657320616e7920636f72726573706f6e64696e6720616e6e6f756e63656d656e742873292e00cc546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e002c506172616d65746572733a0d012d20607265616c603a20546865206163636f756e742074686174207468652070726f78792077696c6c206d616b6520612063616c6c206f6e20626568616c66206f662e61012d2060666f7263655f70726f78795f74797065603a2053706563696679207468652065786163742070726f7879207479706520746f206265207573656420616e6420636865636b656420666f7220746869732063616c6c2ed02d206063616c6c603a205468652063616c6c20746f206265206d6164652062792074686520607265616c60206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e590304184f7074696f6e04045401f00108104e6f6e6500000010536f6d650400f000000100005d030c3c70616c6c65745f72656769737472791870616c6c65741043616c6c040454000108307365745f6964656e746974790801286964656e746966696564000130543a3a4163636f756e744964000110696e666f610301a4426f783c4964656e74697479496e666f3c543a3a4d61784164646974696f6e616c4669656c64733e3e0000043d01526567697374657220616e206964656e7469747920666f7220616e206163636f756e742e20546869732077696c6c206f766572777269746520616e79206578697374696e67206964656e746974792e38636c6561725f6964656e746974790401286964656e746966696564000130543a3a4163636f756e74496400010484436c65617220746865206964656e74697479206f6620616e206163636f756e742e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e61030c3c70616c6c65745f7265676973747279147479706573304964656e74697479496e666f04284669656c644c696d697400002401286164646974696f6e616c65030190426f756e6465645665633c28446174612c2044617461292c204669656c644c696d69743e00011c646973706c61796d030110446174610001146c6567616c6d0301104461746100010c7765626d0301104461746100011072696f746d03011044617461000114656d61696c6d0301104461746100013c7067705f66696e6765727072696e74650401404f7074696f6e3c5b75383b2032305d3e000114696d6167656d0301104461746100011c747769747465726d03011044617461000065030c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016903045300000400610401185665633c543e00006903000004086d036d03006d030c3c70616c6c65745f7265676973747279147479706573104461746100011901104e6f6e65000000105261773004007103000001001052617731040075030000020010526177320400790300000300105261773304007d030000040010526177340400480000050010526177350400810300000600105261773604008503000007001052617737040089030000080010526177380400a50100000900105261773904008d0300000a001452617731300400910300000b001452617731310400950300000c001452617731320400990300000d0014526177313304009d0300000e001452617731340400a10300000f001452617731350400a503000010001452617731360400a903000011001452617731370400ad03000012001452617731380400b103000013001452617731390400b5030000140014526177323004001101000015001452617732310400b903000016001452617732320400bd03000017001452617732330400c103000018001452617732340400c503000019001452617732350400c90300001a001452617732360400cd0300001b001452617732370400d10300001c001452617732380400d50300001d001452617732390400d90300001e001452617733300400dd0300001f001452617733310400e10300002000145261773332040004000021001452617733330400e503000022001452617733340400e903000023001452617733350400ed03000024001452617733360400f103000025001452617733370400f503000026001452617733380400f903000027001452617733390400fd030000280014526177343004000104000029001452617734310400050400002a001452617734320400090400002b0014526177343304000d0400002c001452617734340400110400002d001452617734350400150400002e001452617734360400190400002f0014526177343704001d040000300014526177343804002104000031001452617734390400250400003200145261773530040029040000330014526177353104002d040000340014526177353204003104000035001452617735330400350400003600145261773534040039040000370014526177353504003d040000380014526177353604004104000039001452617735370400450400003a001452617735380400490400003b0014526177353904004d0400003c001452617736300400510400003d001452617736310400550400003e001452617736320400590400003f0014526177363304005d04000040001452617736340400ed01000041002c426c616b6554776f323536040004000042001853686132353604000400004300244b656363616b323536040004000044002c536861546872656532353604000400004500007103000003000000000800750300000301000000080079030000030200000008007d030000030300000008008103000003050000000800850300000306000000080089030000030700000008008d0300000309000000080091030000030a000000080095030000030b000000080099030000030c00000008009d030000030d0000000800a1030000030e0000000800a5030000030f0000000800a903000003100000000800ad03000003110000000800b103000003120000000800b503000003130000000800b903000003150000000800bd03000003160000000800c103000003170000000800c503000003180000000800c903000003190000000800cd030000031a0000000800d1030000031b0000000800d5030000031c0000000800d9030000031d0000000800dd030000031e0000000800e1030000031f0000000800e503000003210000000800e903000003220000000800ed03000003230000000800f103000003240000000800f503000003250000000800f903000003260000000800fd030000032700000008000104000003280000000800050400000329000000080009040000032a00000008000d040000032b000000080011040000032c000000080015040000032d000000080019040000032e00000008001d040000032f00000008002104000003300000000800250400000331000000080029040000033200000008002d040000033300000008003104000003340000000800350400000335000000080039040000033600000008003d040000033700000008004104000003380000000800450400000339000000080049040000033a00000008004d040000033b000000080051040000033c000000080055040000033d000000080059040000033e00000008005d040000033f00000008006104000002690300650404184f7074696f6e0404540111010108104e6f6e6500000010536f6d6504001101000001000069040c4870616c6c65745f636f6d6d69746d656e74731870616c6c65741043616c6c040454000108387365745f636f6d6d69746d656e740801186e65747569649c010c753136000110696e666f6d040184426f783c436f6d6d69746d656e74496e666f3c543a3a4d61784669656c64733e3e000004945365742074686520636f6d6d69746d656e7420666f72206120676976656e206e6574756964387365745f726174655f6c696d6974040144726174655f6c696d69745f626c6f636b7310010c753332000104885375646f2d7365742074686520636f6d6d69746d656e742072617465206c696d6974040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e6d040c4870616c6c65745f636f6d6d69746d656e747314747970657338436f6d6d69746d656e74496e666f04284669656c644c696d697400000401186669656c647371040170426f756e6465645665633c446174612c204669656c644c696d69743e000071040c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454017504045300000400790501185665633c543e000075040c4870616c6c65745f636f6d6d69746d656e7473147479706573104461746100011902104e6f6e65000000105261773004007103000001001052617731040075030000020010526177320400790300000300105261773304007d030000040010526177340400480000050010526177350400810300000600105261773604008503000007001052617737040089030000080010526177380400a50100000900105261773904008d0300000a001452617731300400910300000b001452617731310400950300000c001452617731320400990300000d0014526177313304009d0300000e001452617731340400a10300000f001452617731350400a503000010001452617731360400a903000011001452617731370400ad03000012001452617731380400b103000013001452617731390400b5030000140014526177323004001101000015001452617732310400b903000016001452617732320400bd03000017001452617732330400c103000018001452617732340400c503000019001452617732350400c90300001a001452617732360400cd0300001b001452617732370400d10300001c001452617732380400d50300001d001452617732390400d90300001e001452617733300400dd0300001f001452617733310400e10300002000145261773332040004000021001452617733330400e503000022001452617733340400e903000023001452617733350400ed03000024001452617733360400f103000025001452617733370400f503000026001452617733380400f903000027001452617733390400fd030000280014526177343004000104000029001452617734310400050400002a001452617734320400090400002b0014526177343304000d0400002c001452617734340400110400002d001452617734350400150400002e001452617734360400190400002f0014526177343704001d040000300014526177343804002104000031001452617734390400250400003200145261773530040029040000330014526177353104002d040000340014526177353204003104000035001452617735330400350400003600145261773534040039040000370014526177353504003d040000380014526177353604004104000039001452617735370400450400003a001452617735380400490400003b0014526177353904004d0400003c001452617736300400510400003d001452617736310400550400003e001452617736320400590400003f0014526177363304005d04000040001452617736340400ed0100004100145261773635040079040000420014526177363604007d040000430014526177363704008104000044001452617736380400850400004500145261773639040089040000460014526177373004008d0400004700145261773731040091040000480014526177373204009504000049001452617737330400990400004a0014526177373404009d0400004b001452617737350400a10400004c001452617737360400a50400004d001452617737370400a90400004e001452617737380400ad0400004f001452617737390400b104000050001452617738300400b504000051001452617738310400b904000052001452617738320400bd04000053001452617738330400c104000054001452617738340400c504000055001452617738350400c904000056001452617738360400cd04000057001452617738370400d104000058001452617738380400d504000059001452617738390400d90400005a001452617739300400dd0400005b001452617739310400e10400005c001452617739320400e50400005d001452617739330400e90400005e001452617739340400ed0400005f001452617739350400f104000060001452617739360400f504000061001452617739370400f904000062001452617739380400fd040000630014526177393904000105000064001852617731303004000505000065001852617731303104000905000066001852617731303204000d0500006700185261773130330400110500006800185261773130340400150500006900185261773130350400190500006a001852617731303604001d0500006b00185261773130370400210500006c00185261773130380400250500006d00185261773130390400290500006e001852617731313004002d0500006f001852617731313104003105000070001852617731313204003505000071001852617731313304003905000072001852617731313404003d05000073001852617731313504004105000074001852617731313604004505000075001852617731313704004905000076001852617731313804004d0500007700185261773131390400510500007800185261773132300400550500007900185261773132310400590500007a001852617731323204005d0500007b00185261773132330400610500007c00185261773132340400650500007d00185261773132350400690500007e001852617731323604006d0500007f001852617731323704007105000080001852617731323804007505000081002c426c616b6554776f323536040004000082001853686132353604000400008300244b656363616b323536040004000084002c5368615468726565323536040004000085000079040000034100000008007d040000034200000008008104000003430000000800850400000344000000080089040000034500000008008d040000034600000008009104000003470000000800950400000348000000080099040000034900000008009d040000034a0000000800a1040000034b0000000800a5040000034c0000000800a9040000034d0000000800ad040000034e0000000800b1040000034f0000000800b504000003500000000800b904000003510000000800bd04000003520000000800c104000003530000000800c504000003540000000800c904000003550000000800cd04000003560000000800d104000003570000000800d504000003580000000800d904000003590000000800dd040000035a0000000800e1040000035b0000000800e5040000035c0000000800e9040000035d0000000800ed040000035e0000000800f1040000035f0000000800f504000003600000000800f904000003610000000800fd040000036200000008000105000003630000000800050500000364000000080009050000036500000008000d050000036600000008001105000003670000000800150500000368000000080019050000036900000008001d050000036a000000080021050000036b000000080025050000036c000000080029050000036d00000008002d050000036e000000080031050000036f0000000800350500000370000000080039050000037100000008003d050000037200000008004105000003730000000800450500000374000000080049050000037500000008004d050000037600000008005105000003770000000800550500000378000000080059050000037900000008005d050000037a000000080061050000037b000000080065050000037c000000080069050000037d00000008006d050000037e000000080071050000037f0000000800750500000380000000080079050000027504007d050c4870616c6c65745f61646d696e5f7574696c731870616c6c65741043616c6c0404540001c440737761705f617574686f72697469657304013c6e65775f617574686f726974696573b50101e4426f756e6465645665633c3c5420617320436f6e6669673e3a3a417574686f7269747949642c20543a3a4d6178417574686f7269746965733e00000ce85468652065787472696e736963207365747320746865206e657720617574686f72697469657320666f72204175726120636f6e73656e7375732ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e09015468652065787472696e7369632077696c6c2063616c6c2074686520417572612070616c6c657420746f206368616e67652074686520617574686f7269746965732e547375646f5f7365745f64656661756c745f74616b6504013064656661756c745f74616b659c010c75313600010cd05468652065787472696e7369632073657473207468652064656661756c742074616b6520666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652064656661756c742074616b652e587375646f5f7365745f74785f726174655f6c696d697404013474785f726174655f6c696d697418010c75363400020cf85468652065787472696e736963207365747320746865207472616e73616374696f6e2072617465206c696d697420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e3d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865207472616e73616374696f6e2072617465206c696d69742e6c7375646f5f7365745f73657276696e675f726174655f6c696d69740801186e65747569649c010c75313600014873657276696e675f726174655f6c696d697418010c75363400030cdc5468652065787472696e7369632073657473207468652073657276696e672072617465206c696d697420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e2d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652073657276696e672072617465206c696d69742e5c7375646f5f7365745f6d696e5f646966666963756c74790801186e65747569649c010c7531360001386d696e5f646966666963756c747918010c75363400040cdc5468652065787472696e736963207365747320746865206d696e696d756d20646966666963756c747920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e2d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d20646966666963756c74792e5c7375646f5f7365745f6d61785f646966666963756c74790801186e65747569649c010c7531360001386d61785f646966666963756c747918010c75363400050cdc5468652065787472696e736963207365747320746865206d6178696d756d20646966666963756c747920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e2d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d20646966666963756c74792e707375646f5f7365745f776569676874735f76657273696f6e5f6b65790801186e65747569649c010c75313600014c776569676874735f76657273696f6e5f6b657918010c75363400060ce05468652065787472696e73696320736574732074686520776569676874732076657273696f6e206b657920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e31015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520776569676874732076657273696f6e206b65792e7c7375646f5f7365745f776569676874735f7365745f726174655f6c696d69740801186e65747569649c010c753136000158776569676874735f7365745f726174655f6c696d697418010c75363400070cec5468652065787472696e7369632073657473207468652077656967687473207365742072617465206c696d697420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e3d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652077656967687473207365742072617465206c696d69742e707375646f5f7365745f61646a7573746d656e745f696e74657276616c0801186e65747569649c010c75313600014c61646a7573746d656e745f696e74657276616c9c010c75313600080ce05468652065787472696e7369632073657473207468652061646a7573746d656e7420696e74657276616c20666f722061207375626e65742e31014974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742c206e6f74206368616e676561626c6520627920746865207375626e6574206f776e65722e31015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652061646a7573746d656e7420696e74657276616c2e647375646f5f7365745f61646a7573746d656e745f616c7068610801186e65747569649c010c75313600014061646a7573746d656e745f616c70686118010c75363400090cd45468652065787472696e7369632073657473207468652061646a7573746d656e7420616c70686120666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e25015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652061646a7573746d656e7420616c7068612e647375646f5f7365745f6d61785f7765696768745f6c696d69740801186e65747569649c010c7531360001406d61785f7765696768745f6c696d69749c010c753136000c0cd05468652065787472696e7369632073657473207468652061646a7573746d656e74206265746120666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e21015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652061646a7573746d656e7420626574612e607375646f5f7365745f696d6d756e6974795f706572696f640801186e65747569649c010c75313600013c696d6d756e6974795f706572696f649c010c753136000d0cd05468652065787472696e73696320736574732074686520696d6d756e69747920706572696f6420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e21015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520696d6d756e69747920706572696f642e707375646f5f7365745f6d696e5f616c6c6f7765645f776569676874730801186e65747569649c010c75313600014c6d696e5f616c6c6f7765645f776569676874739c010c753136000e0cf05468652065787472696e736963207365747320746865206d696e696d756d20616c6c6f776564207765696768747320666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e41015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d20616c6c6f77656420776569676874732e647375646f5f7365745f6d61785f616c6c6f7765645f756964730801186e65747569649c010c7531360001406d61785f616c6c6f7765645f756964739c010c753136000f0ce45468652065787472696e736963207365747320746865206d6178696d756d20616c6c6f776564205549447320666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e69015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d20616c6c6f776564205549447320666f722061207375626e65742e387375646f5f7365745f6b617070610801186e65747569649c010c7531360001146b617070619c010c75313600100ca85468652065787472696e736963207365747320746865206b6170706120666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722ef85468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206b617070612e307375646f5f7365745f72686f0801186e65747569649c010c75313600010c72686f9c010c75313600110ca05468652065787472696e7369632073657473207468652072686f20666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722ef05468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652072686f2e607375646f5f7365745f61637469766974795f6375746f66660801186e65747569649c010c75313600013c61637469766974795f6375746f66669c010c75313600120cd05468652065787472696e736963207365747320746865206163746976697479206375746f666620666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e21015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206163746976697479206375746f66662e947375646f5f7365745f6e6574776f726b5f726567697374726174696f6e5f616c6c6f7765640801186e65747569649c010c753136000150726567697374726174696f6e5f616c6c6f776564240110626f6f6c00130c05015468652065787472696e736963207365747320746865206e6574776f726b20726567697374726174696f6e20616c6c6f77656420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e55015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206e6574776f726b20726567697374726174696f6e20616c6c6f7765642ea47375646f5f7365745f6e6574776f726b5f706f775f726567697374726174696f6e5f616c6c6f7765640801186e65747569649c010c753136000150726567697374726174696f6e5f616c6c6f776564240110626f6f6c00140c15015468652065787472696e736963207365747320746865206e6574776f726b20506f5720726567697374726174696f6e20616c6c6f77656420666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e65015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206e6574776f726b20506f5720726567697374726174696f6e20616c6c6f7765642ea87375646f5f7365745f7461726765745f726567697374726174696f6e735f7065725f696e74657276616c0801186e65747569649c010c7531360001847461726765745f726567697374726174696f6e735f7065725f696e74657276616c9c010c75313600150c19015468652065787472696e7369632073657473207468652074617267657420726567697374726174696f6e732070657220696e74657276616c20666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e69015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652074617267657420726567697374726174696f6e732070657220696e74657276616c2e447375646f5f7365745f6d696e5f6275726e0801186e65747569649c010c7531360001206d696e5f6275726e18010c75363400160cc45468652065787472696e736963207365747320746865206d696e696d756d206275726e20666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d206275726e2e447375646f5f7365745f6d61785f6275726e0801186e65747569649c010c7531360001206d61785f6275726e18010c75363400170cc45468652065787472696e736963207365747320746865206d6178696d756d206275726e20666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d206275726e2e4c7375646f5f7365745f646966666963756c74790801186e65747569649c010c753136000128646966666963756c747918010c75363400180cbc5468652065787472696e73696320736574732074686520646966666963756c747920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e0d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520646966666963756c74792e7c7375646f5f7365745f6d61785f616c6c6f7765645f76616c696461746f72730801186e65747569649c010c7531360001586d61785f616c6c6f7765645f76616c696461746f72739c010c75313600190cfc5468652065787472696e736963207365747320746865206d6178696d756d20616c6c6f7765642076616c696461746f727320666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e4d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d20616c6c6f7765642076616c696461746f72732e747375646f5f7365745f626f6e64735f6d6f76696e675f617665726167650801186e65747569649c010c753136000150626f6e64735f6d6f76696e675f6176657261676518010c753634001a0ce45468652065787472696e73696320736574732074686520626f6e6473206d6f76696e67206176657261676520666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e35015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520626f6e6473206d6f76696e6720617665726167652e587375646f5f7365745f626f6e64735f70656e616c74790801186e65747569649c010c753136000134626f6e64735f70656e616c74799c010c753136003c0cc85468652065787472696e73696320736574732074686520626f6e64732070656e616c747920666f722061207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722e19015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520626f6e64732070656e616c74792e907375646f5f7365745f6d61785f726567697374726174696f6e735f7065725f626c6f636b0801186e65747569649c010c75313600016c6d61785f726567697374726174696f6e735f7065725f626c6f636b9c010c753136001b0c11015468652065787472696e736963207365747320746865206d6178696d756d20726567697374726174696f6e732070657220626c6f636b20666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e61015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d6178696d756d20726567697374726174696f6e732070657220626c6f636b2e647375646f5f7365745f7375626e65745f6f776e65725f6375740401407375626e65745f6f776e65725f6375749c010c753136001c0cd45468652065787472696e736963207365747320746865207375626e6574206f776e65722063757420666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e25015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865207375626e6574206f776e6572206375742e6c7375646f5f7365745f6e6574776f726b5f726174655f6c696d6974040128726174655f6c696d697418010c753634001d0ce85468652065787472696e736963207365747320746865206e6574776f726b2072617465206c696d697420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e2d015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206e6574776f726b2072617465206c696d69742e387375646f5f7365745f74656d706f0801186e65747569649c010c75313600011474656d706f9c010c753136001e0ca85468652065787472696e7369632073657473207468652074656d706f20666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742ef85468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652074656d706f2e5c7375646f5f7365745f746f74616c5f69737375616e6365040138746f74616c5f69737375616e636518010c75363400210cd85468652065787472696e73696320736574732074686520746f74616c2069737375616e636520666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e45015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652069737375616e636520666f7220746865206e6574776f726b2e807375646f5f7365745f6e6574776f726b5f696d6d756e6974795f706572696f6404013c696d6d756e6974795f706572696f6418010c75363400230cdc5468652065787472696e73696320736574732074686520696d6d756e69747920706572696f6420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e61015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f207365742074686520696d6d756e69747920706572696f6420666f7220746865206e6574776f726b2e787375646f5f7365745f6e6574776f726b5f6d696e5f6c6f636b5f636f73740401246c6f636b5f636f737418010c75363400240cd45468652065787472696e736963207365747320746865206d696e206c6f636b20636f737420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e59015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e206c6f636b20636f737420666f7220746865206e6574776f726b2e547375646f5f7365745f7375626e65745f6c696d697404012c6d61785f7375626e6574739c010c75313600250cd05468652065787472696e736963207365747320746865207375626e6574206c696d697420666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865207375626e6574206c696d69742e807375646f5f7365745f6c6f636b5f726564756374696f6e5f696e74657276616c040120696e74657276616c18010c75363400260cfc5468652065787472696e736963207365747320746865206c6f636b20726564756374696f6e20696e74657276616c20666f7220746865206e6574776f726b2ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e41015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206c6f636b20726564756374696f6e20696e74657276616c2e547375646f5f7365745f72616f5f72656379636c65640801186e65747569649c010c75313600013072616f5f72656379636c656418010c75363400270cc45468652065787472696e7369632073657473207468652072656379636c65642052414f20666f722061207375626e65742ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e15015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652072656379636c65642052414f2e607375646f5f7365745f7374616b655f7468726573686f6c640401246d696e5f7374616b6518010c753634002a0ca45468652065787472696e7369632073657473207468652077656967687473206d696e207374616b652ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e29015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652077656967687473206d696e207374616b652e947375646f5f7365745f6e6f6d696e61746f725f6d696e5f72657175697265645f7374616b650401246d696e5f7374616b6518010c753634002b0cf45468652065787472696e736963207365747320746865206d696e696d756d207374616b6520726571756972656420666f72206e6f6d696e61746f72732ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e79015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d207374616b6520726571756972656420666f72206e6f6d696e61746f72732e907375646f5f7365745f74785f64656c65676174655f74616b655f726174655f6c696d697404013474785f726174655f6c696d697418010c753634002d0c05015468652065787472696e7369632073657473207468652072617465206c696d697420666f722064656c65676174652074616b65207472616e73616374696f6e732ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e89015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652072617465206c696d697420666f722064656c65676174652074616b65207472616e73616374696f6e732e687375646f5f7365745f6d696e5f64656c65676174655f74616b6504011074616b659c010c753136002e0cb45468652065787472696e736963207365747320746865206d696e696d756d2064656c65676174652074616b652ea04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e742e39015468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f2073657420746865206d696e696d756d2064656c65676174652074616b652e987375646f5f7365745f636f6d6d69745f72657665616c5f776569676874735f656e61626c65640801186e65747569649c010c75313600011c656e61626c6564240110626f6f6c00310c05015468652065787472696e73696320656e61626c65642f64697361626c657320636f6d6d69742f7265617665616c20666f72206120676976656e207375626e65742ee04974206973206f6e6c792063616c6c61626c652062792074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722ef85468652065787472696e7369632077696c6c2063616c6c207468652053756274656e736f722070616c6c657420746f20736574207468652076616c75652e747375646f5f7365745f6c69717569645f616c7068615f656e61626c65640801186e65747569649c010c75313600011c656e61626c6564240110626f6f6c003224d0456e61626c6573206f722064697361626c6573204c697175696420416c70686120666f72206120676976656e207375626e65742e00302320506172616d65746572734d012d20606f726967696e603a20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e74206f72207375626e6574206f776e65722ec42d20606e6574756964603a2054686520756e69717565206964656e74696669657220666f7220746865207375626e65742ef82d2060656e61626c6564603a204120626f6f6c65616e20666c616720746f20656e61626c65206f722064697361626c65204c697175696420416c7068612e00202320576569676874cd01546869732066756e6374696f6e20686173206120666978656420776569676874206f66203020616e6420697320636c617373696669656420617320616e206f7065726174696f6e616c207472616e73616374696f6e207468617420646f6573206e6f7420696e63757220616e7920666565732e547375646f5f7365745f616c7068615f76616c7565730c01186e65747569649c010c753136000124616c7068615f6c6f779c010c753136000128616c7068615f686967689c010c75313600330470536574732076616c75657320666f72206c697175696420616c706861687375646f5f7365745f6e6574776f726b5f6d61785f7374616b650801186e65747569649c010c7531360001246d61785f7374616b6518010c753634003564d85365747320746865206d6178696d756d207374616b6520616c6c6f77656420666f722061207370656369666963206e6574776f726b2e004d01546869732066756e6374696f6e20616c6c6f77732074686520726f6f74206163636f756e7420746f2073657420746865206d6178696d756d207374616b6520666f72206120676976656e206e6574776f726b2e05014974207570646174657320746865206e6574776f726b2773206d6178696d756d207374616b652076616c756520616e64206c6f677320746865206368616e67652e002c2320417267756d656e74730011012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e742ec82a20606e657475696460202d2054686520756e69717565206964656e746966696572206f6620746865206e6574776f726b2ecc2a20606d61785f7374616b6560202d20546865206e6577206d6178696d756d207374616b652076616c756520746f207365742e0024232052657475726e7300250152657475726e7320604f6b282829296020696620746865206f7065726174696f6e206973207375636365737366756c2c206f7220616e206572726f72206966206974206661696c732e002423204578616d706c6500001c23204e6f74657300dc2d20546869732066756e6374696f6e2063616e206f6e6c792062652063616c6c65642062792074686520726f6f74206163636f756e742ee02d2054686520606e6574756964602073686f756c6420636f72726573706f6e6420746f20616e206578697374696e67206e6574776f726b2e00182320544f444f009c7375646f5f7365745f636f6c646b65795f737761705f7363686564756c655f6475726174696f6e0401206475726174696f6e100144426c6f636b4e756d626572466f723c543e003638bc5365747320746865206475726174696f6e206f662074686520636f6c646b65792073776170207363686564756c652e006501546869732065787472696e73696320616c6c6f77732074686520726f6f74206163636f756e7420746f2073657420746865206475726174696f6e20666f722074686520636f6c646b65792073776170207363686564756c652e810154686520636f6c646b65792073776170207363686564756c652064657465726d696e657320686f77206c6f6e672069742074616b657320666f72206120636f6c646b65792073776170206f7065726174696f6e20746f20636f6d706c6574652e002c2320417267756d656e747311012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e742e4d012a20606475726174696f6e60202d20546865206e6577206475726174696f6e20666f722074686520636f6c646b65792073776170207363686564756c652c20696e206e756d626572206f6620626c6f636b732e002023204572726f7273d82a20604261644f726967696e60202d204966207468652063616c6c6572206973206e6f742074686520726f6f74206163636f756e742e00202320576569676874dc5765696768742069732068616e646c6564206279207468652060235b70616c6c65743a3a7765696768745d60206174747269627574652eac7375646f5f7365745f646973736f6c76655f6e6574776f726b5f7363686564756c655f6475726174696f6e0401206475726174696f6e100144426c6f636b4e756d626572466f723c543e003738cc5365747320746865206475726174696f6e206f662074686520646973736f6c7665206e6574776f726b207363686564756c652e007501546869732065787472696e73696320616c6c6f77732074686520726f6f74206163636f756e7420746f2073657420746865206475726174696f6e20666f722074686520646973736f6c7665206e6574776f726b207363686564756c652ead0154686520646973736f6c7665206e6574776f726b207363686564756c652064657465726d696e657320686f77206c6f6e672069742074616b657320666f722061206e6574776f726b20646973736f6c7574696f6e206f7065726174696f6e20746f20636f6d706c6574652e002c2320417267756d656e747311012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d7573742062652074686520726f6f74206163636f756e742e5d012a20606475726174696f6e60202d20546865206e6577206475726174696f6e20666f722074686520646973736f6c7665206e6574776f726b207363686564756c652c20696e206e756d626572206f6620626c6f636b732e002023204572726f7273d82a20604261644f726967696e60202d204966207468652063616c6c6572206973206e6f742074686520726f6f74206163636f756e742e00202320576569676874dc5765696768742069732068616e646c6564206279207468652060235b70616c6c65743a3a7765696768745d60206174747269627574652e9c7375646f5f7365745f636f6d6d69745f72657665616c5f776569676874735f696e74657276616c0801186e65747569649c010c753136000120696e74657276616c18010c753634003940f4536574732074686520636f6d6d69742d72657665616c207765696768747320706572696f647320666f722061207370656369666963207375626e65742e001d02546869732065787472696e73696320616c6c6f777320746865207375626e6574206f776e6572206f7220726f6f74206163636f756e7420746f2073657420746865206475726174696f6e2028696e2065706f6368732920647572696e6720776869636820636f6d6d69747465642077656967687473206d7573742062652072657665616c65642ee10154686520636f6d6d69742d72657665616c206d656368616e69736d20656e7375726573207468617420757365727320636f6d6d6974207765696768747320696e20616476616e636520616e642072657665616c207468656d206f6e6c792077697468696e20612073706563696669656420706572696f642e002c2320417267756d656e747361012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d75737420626520746865207375626e6574206f776e6572206f722074686520726f6f74206163636f756e742e55012a20606e657475696460202d2054686520756e69717565206964656e746966696572206f6620746865207375626e657420666f722077686963682074686520706572696f647320617265206265696e67207365742e21012a2060706572696f647360202d20546865206e756d626572206f662065706f636873207468617420646566696e652074686520636f6d6d69742d72657665616c20706572696f642e002023204572726f72733d012a20604261644f726967696e60202d204966207468652063616c6c6572206973206e65697468657220746865207375626e6574206f776e6572206e6f722074686520726f6f74206163636f756e742e01012a20605375626e6574446f65734e6f74457869737460202d2049662074686520737065636966696564207375626e657420646f6573206e6f742065786973742e00202320576569676874dc5765696768742069732068616e646c6564206279207468652060235b70616c6c65743a3a7765696768745d60206174747269627574652e547375646f5f7365745f65766d5f636861696e5f6964040120636861696e5f696418010c753634003a2c5453657473207468652045564d20436861696e49442e002c2320417267756d656e747361012a20606f726967696e60202d20546865206f726967696e206f66207468652063616c6c2c207768696368206d75737420626520746865207375626e6574206f776e6572206f722074686520726f6f74206163636f756e742e782a2060636861696e496460202d205468652075363420636861696e204944002023204572726f72733d012a20604261644f726967696e60202d204966207468652063616c6c6572206973206e65697468657220746865207375626e6574206f776e6572206e6f722074686520726f6f74206163636f756e742e00202320576569676874dc5765696768742069732068616e646c6564206279207468652060235b70616c6c65743a3a7765696768745d60206174747269627574652e5c7363686564756c655f6772616e6470615f6368616e67650c01406e6578745f617574686f726974696573800134417574686f726974794c697374000124696e5f626c6f636b73100144426c6f636b4e756d626572466f723c543e000118666f72636564d10101644f7074696f6e3c426c6f636b4e756d626572466f723c543e3e003b3c250141207075626c696320696e7465726661636520666f72206070616c6c65745f6772616e6470613a3a50616c6c65743a3a7363686564756c655f6772616e6470615f6368616e6765602e00945363686564756c652061206368616e676520696e2074686520617574686f7269746965732e005501546865206368616e67652077696c6c206265206170706c6965642061742074686520656e64206f6620657865637574696f6e206f662074686520626c6f636b2060696e5f626c6f636b736020616674657220746865550163757272656e7420626c6f636b2e20546869732076616c7565206d617920626520302c20696e207768696368206361736520746865206368616e6765206973206170706c6965642061742074686520656e64206f66487468652063757272656e7420626c6f636b2e0049014966207468652060666f726365646020706172616d6574657220697320646566696e65642c207468697320696e646963617465732074686174207468652063757272656e742073657420686173206265656e490173796e6368726f6e6f75736c792064657465726d696e656420746f206265206f66666c696e6520616e6420746861742061667465722060696e5f626c6f636b73602074686520676976656e206368616e67654d0173686f756c64206265206170706c6965642e2054686520676976656e20626c6f636b206e756d62657220696e6469636174657320746865206d656469616e206c6173742066696e616c697a656420626c6f636b51016e756d62657220616e642069742073686f756c642062652075736564206173207468652063616e6f6e20626c6f636b207768656e207374617274696e6720746865206e6577206772616e64706120766f7465722e0059014e6f206368616e67652073686f756c64206265207369676e616c6564207768696c6520616e79206368616e67652069732070656e64696e672e2052657475726e7320616e206572726f722069662061206368616e67654c697320616c72656164792070656e64696e672e046501446973706174636861626c652066756e6374696f6e7320616c6c6f777320757365727320746f20696e7465726163742077697468207468652070616c6c657420616e6420696e766f6b65207374617465206368616e6765732e81050c4070616c6c65745f736166655f6d6f64651870616c6c65741043616c6c04045400012014656e7465720000181901456e74657220736166652d6d6f6465207065726d697373696f6e6c6573736c7920666f72205b60436f6e6669673a3a456e7465724475726174696f6e605d20626c6f636b732e0009015265736572766573205b60436f6e6669673a3a456e7465724465706f736974416d6f756e74605d2066726f6d207468652063616c6c65722773206163636f756e742eb4456d69747320616e205b604576656e743a3a456e7465726564605d206576656e74206f6e20737563636573732e0d014572726f72732077697468205b604572726f723a3a456e7465726564605d2069662074686520736166652d6d6f646520697320616c726561647920656e74657265642e15014572726f72732077697468205b604572726f723a3a4e6f74436f6e66696775726564605d20696620746865206465706f73697420616d6f756e7420697320604e6f6e65602e2c666f7263655f656e7465720001181901456e74657220736166652d6d6f646520627920666f72636520666f722061207065722d6f726967696e20636f6e66696775726564206e756d626572206f6620626c6f636b732e00b4456d69747320616e205b604576656e743a3a456e7465726564605d206576656e74206f6e20737563636573732e0d014572726f72732077697468205b604572726f723a3a456e7465726564605d2069662074686520736166652d6d6f646520697320616c726561647920656e74657265642e00f843616e206f6e6c792062652063616c6c656420627920746865205b60436f6e6669673a3a466f726365456e7465724f726967696e605d206f726967696e2e18657874656e6400022c3101457874656e642074686520736166652d6d6f6465207065726d697373696f6e6c6573736c7920666f72205b60436f6e6669673a3a457874656e644475726174696f6e605d20626c6f636b732e00e85468697320616363756d756c61746573206f6e20746f70206f66207468652063757272656e742072656d61696e696e67206475726174696f6e2e0d015265736572766573205b60436f6e6669673a3a457874656e644465706f736974416d6f756e74605d2066726f6d207468652063616c6c65722773206163636f756e742eb8456d69747320616e205b604576656e743a3a457874656e646564605d206576656e74206f6e20737563636573732ee84572726f72732077697468205b604572726f723a3a457869746564605d2069662074686520736166652d6d6f646520697320656e74657265642e15014572726f72732077697468205b604572726f723a3a4e6f74436f6e66696775726564605d20696620746865206465706f73697420616d6f756e7420697320604e6f6e65602e00450154686973206d61792062652063616c6c656420627920616e79207369676e6564206f726967696e2077697468205b60436f6e6669673a3a457874656e644465706f736974416d6f756e74605d2066726565350163757272656e637920746f20726573657276652e20546869732063616c6c2063616e2062652064697361626c656420666f7220616c6c206f726967696e7320627920636f6e6669677572696e67a85b60436f6e6669673a3a457874656e644465706f736974416d6f756e74605d20746f20604e6f6e65602e30666f7263655f657874656e640003182d01457874656e642074686520736166652d6d6f646520627920666f72636520666f722061207065722d6f726967696e20636f6e66696775726564206e756d626572206f6620626c6f636b732e00b8456d69747320616e205b604576656e743a3a457874656e646564605d206576656e74206f6e20737563636573732eec4572726f72732077697468205b604572726f723a3a457869746564605d2069662074686520736166652d6d6f646520697320696e6163746976652e00fc43616e206f6e6c792062652063616c6c656420627920746865205b60436f6e6669673a3a466f726365457874656e644f726967696e605d206f726967696e2e28666f7263655f65786974000424604578697420736166652d6d6f646520627920666f7263652e001d01456d69747320616e205b604576656e743a3a457869746564605d2077697468205b6045786974526561736f6e3a3a466f726365605d206576656e74206f6e20737563636573732eec4572726f72732077697468205b604572726f723a3a457869746564605d2069662074686520736166652d6d6f646520697320696e6163746976652e0055014e6f74653a2060736166652d6d6f6465602077696c6c206265206175746f6d61746963616c6c79206465616374697661746564206279205b6050616c6c65743a3a6f6e5f696e697469616c697a65605d20686f6f6b250161667465722074686520626c6f636b206865696768742069732067726561746572207468616e20746865205b60456e7465726564556e74696c605d2073746f72616765206974656d2e5501456d69747320616e205b604576656e743a3a457869746564605d2077697468205b6045786974526561736f6e3a3a54696d656f7574605d206576656e74207768656e20646561637469766174656420696e2074686514686f6f6b2e4c666f7263655f736c6173685f6465706f73697408011c6163636f756e74000130543a3a4163636f756e744964000114626c6f636b100144426c6f636b4e756d626572466f723c543e0005243101536c6173682061206465706f73697420666f7220616e206163636f756e74207468617420656e7465726564206f7220657874656e64656420736166652d6d6f6465206174206120676976656e44686973746f726963616c20626c6f636b2e00cc546869732063616e206f6e6c792062652063616c6c6564207768696c6520736166652d6d6f646520697320656e74657265642e00cc456d6974732061205b604576656e743a3a4465706f736974536c6173686564605d206576656e74206f6e20737563636573732edc4572726f72732077697468205b604572726f723a3a456e7465726564605d20696620736166652d6d6f646520697320656e74657265642e00010143616e206f6e6c792062652063616c6c656420627920746865205b60436f6e6669673a3a466f7263654465706f7369744f726967696e605d206f726967696e2e3c72656c656173655f6465706f73697408011c6163636f756e74000130543a3a4163636f756e744964000114626c6f636b100144426c6f636b4e756d626572466f723c543e00063035015065726d697373696f6e6c6573736c792072656c656173652061206465706f73697420666f7220616e206163636f756e74207468617420656e746572656420736166652d6d6f646520617420615c676976656e20686973746f726963616c20626c6f636b2e0049015468652063616c6c2063616e20626520636f6d706c6574656c792064697361626c65642062792073657474696e67205b60436f6e6669673a3a52656c6561736544656c6179605d20746f20604e6f6e65602ef8546869732063616e6e6f742062652063616c6c6564207768696c6520736166652d6d6f646520697320656e746572656420616e64206e6f7420756e74696c21015b60436f6e6669673a3a52656c6561736544656c6179605d20626c6f636b732068617665207061737365642073696e636520736166652d6d6f64652077617320656e74657265642e00d0456d6974732061205b604576656e743a3a4465706f73697452656c6561736564605d206576656e74206f6e20737563636573732eec4572726f72732077697468205b604572726f723a3a456e7465726564605d2069662074686520736166652d6d6f646520697320656e74657265642e49014572726f72732077697468205b604572726f723a3a43616e6e6f7452656c65617365596574605d206966205b60436f6e6669673a3a52656c6561736544656c6179605d20626c6f636b2068617665206e6f7461017061737365642073696e636520736166652d6d6f64652077617320656e74657265642e204572726f72732077697468205b604572726f723a3a4e6f4465706f736974605d2069662074686520706179656520686173206e6fa472657365727665642063757272656e63792061742074686520626c6f636b207370656369666965642e54666f7263655f72656c656173655f6465706f73697408011c6163636f756e74000130543a3a4163636f756e744964000114626c6f636b100144426c6f636b4e756d626572466f723c543e00072c2d01466f72636520746f2072656c656173652061206465706f73697420666f7220616e206163636f756e74207468617420656e746572656420736166652d6d6f6465206174206120676976656e44686973746f726963616c20626c6f636b2e00d0546869732063616e2062652063616c6c6564207768696c6520736166652d6d6f6465206973207374696c6c20656e74657265642e00d0456d6974732061205b604576656e743a3a4465706f73697452656c6561736564605d206576656e74206f6e20737563636573732edc4572726f72732077697468205b604572726f723a3a456e7465726564605d20696620736166652d6d6f646520697320656e74657265642e35014572726f72732077697468205b604572726f723a3a4e6f4465706f736974605d2069662074686520706179656520686173206e6f2072657365727665642063757272656e6379206174207468654073706563696669656420626c6f636b2e00010143616e206f6e6c792062652063616c6c656420627920746865205b60436f6e6669673a3a466f7263654465706f7369744f726967696e605d206f726967696e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e85050c3c70616c6c65745f657468657265756d1870616c6c65741043616c6c040454000104207472616e7361637404012c7472616e73616374696f6e8905012c5472616e73616374696f6e000004845472616e7361637420616e20457468657265756d207472616e73616374696f6e2e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732e89050c20657468657265756d2c7472616e73616374696f6e345472616e73616374696f6e563200010c184c656761637904008d0501444c65676163795472616e73616374696f6e0000001c4549503239333004009d050148454950323933305472616e73616374696f6e0001001c454950313535390400a9050148454950313535395472616e73616374696f6e000200008d050c20657468657265756d2c7472616e73616374696f6e444c65676163795472616e73616374696f6e00001c01146e6f6e636541010110553235360001246761735f707269636541010110553235360001246761735f6c696d69744101011055323536000118616374696f6e910501445472616e73616374696f6e416374696f6e00011476616c75654101011055323536000114696e70757438011442797465730001247369676e6174757265950501505472616e73616374696f6e5369676e6174757265000091050c20657468657265756d2c7472616e73616374696f6e445472616e73616374696f6e416374696f6e0001081043616c6c04000d01011048313630000000184372656174650001000095050c20657468657265756d2c7472616e73616374696f6e505472616e73616374696f6e5369676e617475726500000c010476990501545472616e73616374696f6e5265636f76657279496400010472340110483235360001047334011048323536000099050c20657468657265756d2c7472616e73616374696f6e545472616e73616374696f6e5265636f7665727949640000040018010c75363400009d050c20657468657265756d2c7472616e73616374696f6e48454950323933305472616e73616374696f6e00002c0120636861696e5f696418010c7536340001146e6f6e636541010110553235360001246761735f707269636541010110553235360001246761735f6c696d69744101011055323536000118616374696f6e910501445472616e73616374696f6e416374696f6e00011476616c75654101011055323536000114696e707574380114427974657300012c6163636573735f6c697374a10501284163636573734c6973740001306f64645f795f706172697479240110626f6f6c000104723401104832353600010473340110483235360000a105000002a50500a5050c20657468657265756d2c7472616e73616374696f6e384163636573734c6973744974656d000008011c616464726573730d01011c4164647265737300013073746f726167655f6b657973b401245665633c483235363e0000a9050c20657468657265756d2c7472616e73616374696f6e48454950313535395472616e73616374696f6e0000300120636861696e5f696418010c7536340001146e6f6e636541010110553235360001606d61785f7072696f726974795f6665655f7065725f676173410101105532353600013c6d61785f6665655f7065725f67617341010110553235360001246761735f6c696d69744101011055323536000118616374696f6e910501445472616e73616374696f6e416374696f6e00011476616c75654101011055323536000114696e707574380114427974657300012c6163636573735f6c697374a10501284163636573734c6973740001306f64645f795f706172697479240110626f6f6c000104723401104832353600010473340110483235360000ad050c2870616c6c65745f65766d1870616c6c65741043616c6c04045400011820776974686472617708011c616464726573730d0101104831363000011476616c756518013042616c616e63654f663c543e000004e057697468647261772062616c616e63652066726f6d2045564d20696e746f2063757272656e63792f62616c616e6365732070616c6c65742e1063616c6c240118736f757263650d010110483136300001187461726765740d01011048313630000114696e70757438011c5665633c75383e00011476616c756541010110553235360001246761735f6c696d697418010c75363400013c6d61785f6665655f7065725f67617341010110553235360001606d61785f7072696f726974795f6665655f7065725f676173b10501304f7074696f6e3c553235363e0001146e6f6e6365b10501304f7074696f6e3c553235363e00012c6163636573735f6c697374b50501585665633c28483136302c205665633c483235363e293e0001045d01497373756520616e2045564d2063616c6c206f7065726174696f6e2e20546869732069732073696d696c617220746f2061206d6573736167652063616c6c207472616e73616374696f6e20696e20457468657265756d2e18637265617465200118736f757263650d01011048313630000110696e697438011c5665633c75383e00011476616c756541010110553235360001246761735f6c696d697418010c75363400013c6d61785f6665655f7065725f67617341010110553235360001606d61785f7072696f726974795f6665655f7065725f676173b10501304f7074696f6e3c553235363e0001146e6f6e6365b10501304f7074696f6e3c553235363e00012c6163636573735f6c697374b50501585665633c28483136302c205665633c483235363e293e0002085101497373756520616e2045564d20637265617465206f7065726174696f6e2e20546869732069732073696d696c617220746f206120636f6e7472616374206372656174696f6e207472616e73616374696f6e20696e24457468657265756d2e1c63726561746532240118736f757263650d01011048313630000110696e697438011c5665633c75383e00011073616c743401104832353600011476616c756541010110553235360001246761735f6c696d697418010c75363400013c6d61785f6665655f7065725f67617341010110553235360001606d61785f7072696f726974795f6665655f7065725f676173b10501304f7074696f6e3c553235363e0001146e6f6e6365b10501304f7074696f6e3c553235363e00012c6163636573735f6c697374b50501585665633c28483136302c205665633c483235363e293e0003047c497373756520616e2045564d2063726561746532206f7065726174696f6e2e347365745f77686974656c69737404010c6e6577bd0501245665633c483136303e0004004464697361626c655f77686974656c69737404012064697361626c6564240110626f6f6c000500040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732eb10504184f7074696f6e0404540141010108104e6f6e6500000010536f6d65040041010000010000b505000002b90500b905000004080d01b400bd050000020d0100c1050c4870616c6c65745f64796e616d69635f6665651870616c6c65741043616c6c040454000104646e6f74655f6d696e5f6761735f70726963655f7461726765740401187461726765744101011055323536000000040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec5050c3c70616c6c65745f626173655f6665651870616c6c65741043616c6c040454000108507365745f626173655f6665655f7065725f67617304010c6665654101011055323536000000387365745f656c6173746963697479040128656c61737469636974794901011c5065726d696c6c000100040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ec9050c3070616c6c65745f6472616e641870616c6c65741043616c6c0404540001082c77726974655f70756c736508013870756c7365735f7061796c6f6164cd0501ac50756c7365735061796c6f61643c543a3a5075626c69632c20426c6f636b4e756d626572466f723c543e3e0001247369676e6174757265e50501504f7074696f6e3c543a3a5369676e61747572653e000004e456657269667920616e6420777269746520612070756c73652066726f6d2074686520626561636f6e20696e746f207468652072756e74696d65447365745f626561636f6e5f636f6e666967080138636f6e6669675f7061796c6f6164ed0501e0426561636f6e436f6e66696775726174696f6e5061796c6f61643c543a3a5075626c69632c20426c6f636b4e756d626572466f723c543e3e0001247369676e6174757265e50501504f7074696f6e3c543a3a5369676e61747572653e000118d0616c6c6f77732074686520726f6f74207573657220746f207365742074686520626561636f6e20636f6e66696775726174696f6efc67656e6572616c6c79207468697320776f756c642062652063616c6c65642066726f6d20616e206f6666636861696e20776f726b657220636f6e746578742e11017468657265206973206e6f20766572696669636174696f6e206f6620636f6e66696775726174696f6e732c20736f206265206361726566756c207769746820746869732e00642a20606f726967696e603a2074686520726f6f742075736572902a2060636f6e666967603a2074686520626561636f6e20636f6e66696775726174696f6e040d01436f6e7461696e7320612076617269616e742070657220646973706174636861626c652065787472696e736963207468617420746869732070616c6c6574206861732ecd050c3070616c6c65745f6472616e641474797065733450756c7365735061796c6f616408185075626c696301d1052c426c6f636b4e756d6265720110000c0130626c6f636b5f6e756d62657210012c426c6f636b4e756d62657200011870756c736573d50501285665633c50756c73653e0001187075626c6963d10501185075626c69630000d105082873705f72756e74696d652c4d756c74695369676e657200010c1c45643235353139040004013c656432353531393a3a5075626c69630000001c53723235353139040004013c737232353531393a3a5075626c69630001001445636473610400e503013465636473613a3a5075626c696300020000d505000002d90500d9050c3070616c6c65745f6472616e641474797065731450756c736500000c0114726f756e6418012c526f756e644e756d62657200012872616e646f6d6e657373dd050170426f756e6465645665633c75382c20436f6e73745533323c33323e3e0001247369676e6174757265e1050174426f756e6465645665633c75382c20436f6e73745533323c3134343e3e0000dd050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000e1050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000e50504184f7074696f6e04045401e9050108104e6f6e6500000010536f6d650400e9050000010000e905082873705f72756e74696d65384d756c74695369676e617475726500010c1c456432353531390400ed010148656432353531393a3a5369676e61747572650000001c537232353531390400ed010148737232353531393a3a5369676e617475726500010014456364736104007904014065636473613a3a5369676e617475726500020000ed050c3070616c6c65745f6472616e6414747970657368426561636f6e436f6e66696775726174696f6e5061796c6f616408185075626c696301d1052c426c6f636b4e756d6265720110000c0130626c6f636b5f6e756d62657210012c426c6f636b4e756d626572000118636f6e666967f105014c426561636f6e436f6e66696775726174696f6e0001187075626c6963d10501185075626c69630000f1050c3070616c6c65745f6472616e641474797065734c426561636f6e436f6e66696775726174696f6e00001c01287075626c69635f6b6579f505013c4f70617175655075626c69634b6579000118706572696f6410010c75333200013067656e657369735f74696d6510010c75333200011068617368dd05012c426f756e6465644861736800012867726f75705f68617368dd05012c426f756e64656448617368000124736368656d655f6964dd05012c426f756e646564486173680001206d65746164617461f90501204d657461646174610000f5050c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e0000f9050c3070616c6c65745f6472616e64147479706573204d657461646174610000040124626561636f6e5f6964dd05012c426f756e646564486173680000fd0504184f7074696f6e04045401dd020108104e6f6e6500000010536f6d650400dd02000001000001060c4070616c6c65745f73756274656e736f721870616c6c6574144572726f7204045400014d01585375624e6574776f726b446f65734e6f74457869737400000468546865207375626e657420646f6573206e6f742065786973742e5c526f6f744e6574776f726b446f65734e6f7445786973740001048054686520726f6f74206e6574776f726b20646f6573206e6f742065786973742e34496e76616c69644970547970650002043901546865207573657220697320747279696e6720746f20736572766520616e2061786f6e207768696368206973206e6f74206f662074797065203420284950763429206f722036202849507636292e40496e76616c6964497041646472657373000304d8416e20696e76616c696420495020616464726573732069732070617373656420746f207468652073657276652066756e6374696f6e2e2c496e76616c6964506f7274000404c0416e20696e76616c696420706f72742069732070617373656420746f207468652073657276652066756e6374696f6e2e6c486f744b65794e6f7452656769737465726564496e5375624e65740005049854686520686f746b6579206973206e6f74207265676973746572656420696e207375626e657458486f744b65794163636f756e744e6f744578697374730006046854686520686f746b657920646f6573206e6f742065786973747370486f744b65794e6f7452656769737465726564496e4e6574776f726b000704ac54686520686f746b6579206973206e6f74207265676973746572656420696e20616e79207375626e65742e504e6f6e4173736f636961746564436f6c644b65790008085d015265717565737420746f207374616b652c20756e7374616b65206f7220737562736372696265206973206d616465206279206120636f6c646b65792074686174206973206e6f74206173736f63696174656420776974684c74686520686f746b6579206163636f756e742e384e6f74456e6f7567685374616b65000908b4444550524543415445443a205374616b6520616d6f756e7420746f207769746864726177206973207a65726f2ef85468652063616c6c657220646f6573206e6f74206861766520656e6f75676874207374616b6520746f20706572666f726d207468697320616374696f6e2e604e6f74456e6f7567685374616b65546f5769746864726177000a0859015468652063616c6c65722069732072657175657374696e672072656d6f76696e67206d6f7265207374616b65207468616e2074686572652065786973747320696e20746865207374616b696e67206163636f756e742e605365653a20225b72656d6f76655f7374616b6528295d222e684e6f74456e6f7567685374616b65546f53657457656967687473000b0849015468652063616c6c65722069732072657175657374696e6720746f20736574207765696768747320627574207468652063616c6c657220686173206c657373207468616e206d696e696d756d207374616b65d0726571756972656420746f20736574207765696768747320286c657373207468616e20576569676874734d696e5374616b65292e704e6f74456e6f7567685374616b65546f5365744368696c646b657973000c04050154686520706172656e7420686f746b657920646f65736e2774206861766520656e6f756768206f776e207374616b6520746f20736574206368696c646b6579732e5c4e6f74456e6f75676842616c616e6365546f5374616b65000d0851015468652063616c6c65722069732072657175657374696e6720616464696e67206d6f7265207374616b65207468616e2074686572652065786973747320696e2074686520636f6c646b6579206163636f756e742e505365653a20225b6164645f7374616b6528295d225842616c616e63655769746864726177616c4572726f72000e0861015468652063616c6c657220697320747279696e6720746f20616464207374616b652c2062757420666f7220736f6d6520726561736f6e207468652072657175657374656420616d6f756e7420636f756c64206e6f742062658c77697468647261776e2066726f6d2074686520636f6c646b6579206163636f756e742e645a65726f42616c616e6365416674657257697468647261776e000f084501556e7375636365737366756c6c792077697468647261772c2062616c616e636520636f756c64206265207a65726f202863616e206e6f74206d616b65206163636f756e74206578697374292061667465722c7769746864726177616c2e5c4e6575726f6e4e6f56616c696461746f725065726d697400100455015468652063616c6c657220697320617474656d7074696e6720746f20736574206e6f6e2d73656c66207765696768747320776974686f7574206265696e672061207065726d69747465642076616c696461746f722e545765696768745665634e6f74457175616c53697a6500110845015468652063616c6c657220697320617474656d7074696e6720746f207365742074686520776569676874206b65797320616e642076616c7565732062757420746865736520766563746f727320686176653c646966666572656e742073697a652e344475706c69636174655569647300120445015468652063616c6c657220697320617474656d7074696e6720746f2073657420776569676874732077697468206475706c6963617465205549447320696e2074686520776569676874206d61747269782e5c556964566563436f6e7461696e496e76616c69644f6e6500130855015468652063616c6c657220697320617474656d7074696e6720746f207365742077656967687420746f206174206c65617374206f6e6520554944207468617420646f6573206e6f7420657869737420696e20746865286d65746167726170682e505765696768745665634c656e67746849734c6f77001404610154686520646973706174636820697320617474656d7074696e6720746f207365742077656967687473206f6e20636861696e207769746820666577657220656c656d656e7473207468616e2061726520616c6c6f7765642e74546f6f4d616e79526567697374726174696f6e7354686973426c6f636b0015084d014e756d626572206f6620726567697374726174696f6e7320696e207468697320626c6f636b20657863656564732074686520616c6c6f776564206e756d6265722028692e652e2c206578636565647320746865b07375626e6574206879706572706172616d6574657220226d61785f726567735f7065725f626c6f636b22292e7c486f744b6579416c726561647952656769737465726564496e5375624e657400160455015468652063616c6c65722069732072657175657374696e67207265676973746572696e672061206e6575726f6e20776869636820616c72656164792065786973747320696e2074686520616374697665207365742e584e6577486f744b6579497353616d65576974684f6c6400170494546865206e657720686f746b6579206973207468652073616d65206173206f6c64206f6e6540496e76616c6964576f726b426c6f636b001804e454686520737570706c69656420506f57206861736820626c6f636b20697320696e2074686520667574757265206f72206e656761746976652e44496e76616c6964446966666963756c7479001904050154686520737570706c69656420506f57206861736820626c6f636b20646f6573206e6f74206d65657420746865206e6574776f726b20646966666963756c74792e2c496e76616c69645365616c001a04f054686520737570706c69656420506f572068617368207365616c20646f6573206e6f74206d617463682074686520737570706c69656420776f726b2e444d61785765696768744578636565646564001b08490154686520646973706174636820697320617474656d7074696e6720746f207365742077656967687473206f6e20636861696e2077697468207765696768742076616c756520657863656564696e6720746865e04d61785765696768744c696d697420286d61785f7765696768745f6c696d6974207375626e6574206879706572706172616d65746572292e54486f744b6579416c726561647944656c6567617465001c04510154686520686f746b657920697320617474656d7074696e6720746f206265636f6d6520612064656c6567617465207768656e2074686520686f746b657920697320616c726561647920612064656c65676174652e5453657474696e6757656967687473546f6f46617374001d04e441207472616e736163746f72206578636565646564207468652072617465206c696d697420666f722073657474696e6720776569676874732e64496e636f727265637457656967687456657273696f6e4b6579001e046101412076616c696461746f7220697320617474656d7074696e6720746f2073657420776569676874732066726f6d20612076616c696461746f72207769746820696e636f7272656374207765696768742076657273696f6e2e6053657276696e67526174654c696d69744578636565646564001f043901416e2061786f6e206f722070726f6d6574686575732073657276696e67206578636565646564207468652072617465206c696d697420666f7220612072656769737465726564206e6575726f6e2e70556964734c656e67746845786365656455696473496e5375624e657400200411015468652063616c6c657220697320617474656d7074696e6720746f2073657420776569676874732077697468206d6f72652055494473207468616e20616c6c6f7765642e684e6574776f726b5478526174654c696d69744578636565646564002104050141207472616e736163746f72206578636565646564207468652072617465206c696d697420666f7220616464206e6574776f726b207472616e73616374696f6e2e6c44656c65676174655478526174654c696d69744578636565646564002204f841207472616e736163746f72206578636565646564207468652072617465206c696d697420666f722064656c6567617465207472616e73616374696f6e2e70486f744b65795365745478526174654c696d69744578636565646564002304110141207472616e736163746f72206578636565646564207468652072617465206c696d697420666f722073657474696e67206f72207377617070696e6720686f746b65792e605374616b696e67526174654c696d69744578636565646564002404c441207472616e736163746f72206578636565646564207468652072617465206c696d697420666f72207374616b696e672e685375624e6574526567697374726174696f6e44697361626c656400250464526567697374726174696f6e2069732064697361626c65642e80546f6f4d616e79526567697374726174696f6e7354686973496e74657276616c0026044101546865206e756d626572206f6620726567697374726174696f6e20617474656d7074732065786365656465642074686520616c6c6f776564206e756d62657220696e2074686520696e74657276616c2e7c5472616e736163746f724163636f756e7453686f756c644265486f744b6579002704a054686520686f746b657920697320726571756972656420746f20626520746865206f726967696e2e3c4e6f7453656e6174654d656d62657200280409014120686f746b657920697320617474656d7074696e6720746f20646f20736f6d657468696e67206f6e6c792073656e617465206d656d626572732063616e20646f2e3846617563657444697361626c65640029044c4661756365742069732064697361626c65642e384e6f745375626e65744f776e6572002a044c4e6f742061207375626e6574206f776e65722e90526567697374726174696f6e4e6f745065726d69747465644f6e526f6f745375626e6574002b04b84f7065726174696f6e206973206e6f74207065726d6974746564206f6e2074686520726f6f74207375626e65742e485374616b65546f6f4c6f77466f72526f6f74002c0415014120686f746b6579207769746820746f6f206c6974746c65207374616b6520697320617474656d7074696e6720746f206a6f696e2074686520726f6f74207375626e65742e54416c6c4e6574776f726b73496e496d6d756e697479002d049c416c6c207375626e6574732061726520696e2074686520696d6d756e69747920706572696f642e7c4e6f74456e6f75676842616c616e6365546f50617953776170486f744b6579002e04a84e6f7420656e6f7567682062616c616e636520746f20706179207377617070696e6720686f746b65792e344e6f74526f6f745375626e6574002f04dc4e657475696420646f6573206e6f74206d6174636820666f722073657474696e6720726f6f74206e6574776f726b20776569676874732e6c43616e4e6f74536574526f6f744e6574776f726b57656967687473003004a443616e206e6f7420736574207765696768747320666f722074686520726f6f74206e6574776f726b2e4c4e6f4e6575726f6e4964417661696c61626c65003104684e6f206e6575726f6e20494420697320617661696c61626c652e4844656c656761746554616b65546f6f4c6f770032046444656c65676174652074616b6520697320746f6f206c6f772e4c44656c656761746554616b65546f6f486967680033046844656c65676174652074616b6520697320746f6f20686967682e504e6f57656967687473436f6d6d6974466f756e6400340861014e6f20636f6d6d697420666f756e6420666f72207468652070726f766964656420686f746b65792b6e657475696420636f6d62696e6174696f6e207768656e20617474656d7074696e6720746f2072657665616c2074686520776569676874732e7c496e76616c696452657665616c436f6d6d6974486173684e6f744d61746368003504d4436f6d6d6974746564206861736820646f6573206e6f7420657175616c20746865206861736865642072657665616c20646174612e4c436f6d6d697452657665616c456e61626c6564003604f0417474656d7074696e6720746f2063616c6c207365745f77656967687473207768656e20636f6d6d69742f72657665616c20697320656e61626c656450436f6d6d697452657665616c44697361626c6564003704c8417474656d7470696e6720746f20636f6d6d69742f72657665616c2077656967687473207768656e2064697361626c65642e48436f756c644e6f744a6f696e53656e617465003804704e6f742061626c6520746f206a6f696e207468652073656e6174652e4c4c6971756964416c70686144697361626c6564003904bc417474656d7074696e6720746f2073657420616c70686120686967682f6c6f77207768696c652064697361626c65643c416c70686148696768546f6f4c6f77003a049c416c706861206869676820697320746f6f206c6f773a20616c7068615f68696768203e20302e3848416c7068614c6f774f75744f6652616e6765003b04ec416c706861206c6f77206973206f7574206f662072616e67653a20616c7068615f6c6f77203e203020262620616c7068615f6c6f77203c20302e3860436f6c644b6579416c72656164794173736f636961746564003c049054686520636f6c646b65792068617320616c7265616479206265656e2073776170706564804e6f74456e6f75676842616c616e6365546f50617953776170436f6c644b6579003d04d454686520636f6c646b65792062616c616e6365206973206e6f7420656e6f75676820746f2070617920666f7220746865207377617058436f6c646b65794973496e4172626974726174696f6e003e047454686520636f6c646b657920697320696e206172626974726174696f6e30496e76616c69644368696c64003f04f4417474656d7074696e6720746f2073657420616e20696e76616c6964206368696c6420666f72206120686f746b6579206f6e2061206e6574776f726b2e384475706c69636174654368696c64004004984475706c6963617465206368696c64207768656e2073657474696e67206368696c6472656e2e4850726f706f7274696f6e4f766572666c6f77004104a850726f706f7274696f6e206f766572666c6f77207768656e2073657474696e67206368696c6472656e2e3c546f6f4d616e794368696c6472656e00420460546f6f206d616e79206368696c6472656e204d415820352e4c5478526174654c696d69744578636565646564004304a044656661756c74207472616e73616374696f6e2072617465206c696d69742065786365656465642e5053776170416c72656164795363686564756c65640044045c5377617020616c7265616479207363686564756c65642e404661696c6564546f5363686564756c65004504586661696c656420746f207377617020636f6c646b6579484e6577436f6c644b65794973486f746b6579004604544e657720636f6c646b657920697320686f746b65794c496e76616c69644368696c646b657954616b65004704644368696c646b65792074616b6520697320696e76616c69642e7c54784368696c646b657954616b65526174654c696d69744578636565646564004804884368696c646b65792074616b652072617465206c696d69742065786365656465642e3c496e76616c69644964656e7469747900490444496e76616c6964206964656e746974792e544d656368616e69736d446f65734e6f744578697374004a040501547279696e6720746f2072656769737465722061207375626e657420696e746f2061206d656368616e69736d207468617420646f6573206e6f742065786973742e4443616e6e6f74556e7374616b654c6f636b004b048c547279696e6720746f20756e7374616b6520796f7572206c6f636b20616d6f756e742e3c5375626e65744e6f74457869737473004c04c0547279696e6720746f20706572666f726d20616374696f6e206f6e206e6f6e2d6578697374656e74207375626e65742e60546f6f4d616e79556e72657665616c6564436f6d6d697473004d04704d6178696d756d20636f6d6d6974206c696d697420726561636865644c45787069726564576569676874436f6d6d6974004e04b4417474656d7074656420746f2072657665616c207765696768747320746861742061726520657870697265642e3852657665616c546f6f4561726c79004f0498417474656d7074656420746f2072657665616c207765696768747320746f6f206561726c792e4c496e7075744c656e67746873556e657175616c0050041d01417474656d7074656420746f2062617463682072657665616c20776569676874732077697468206d69736d61746368656420766563746f7220696e707574206c656e676874732e60436f6d6d697474696e6757656967687473546f6f46617374005104e441207472616e736163746f72206578636565646564207468652072617465206c696d697420666f722073657474696e6720776569676874732e30416d6f756e74546f6f4c6f77005204605374616b6520616d6f756e7420697320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e05060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e6465645665630804540134045300000400b401185665633c543e00000906084470616c6c65745f636f6c6c65637469766514566f74657308244163636f756e74496401002c426c6f636b4e756d626572011000140114696e64657810013450726f706f73616c496e6465780001247468726573686f6c6410012c4d656d626572436f756e74000110617965735d0201385665633c4163636f756e7449643e0001106e6179735d0201385665633c4163636f756e7449643e00010c656e6410012c426c6f636b4e756d62657200000d060c4470616c6c65745f636f6c6c6563746976651870616c6c6574144572726f72080454000449000128244e6f744d656d626572000004944163636f756e74206973206e6f742061206d656d626572206f6620636f6c6c656374697665444475706c696361746550726f706f73616c0001047c4475706c69636174652070726f706f73616c73206e6f7420616c6c6f7765644450726f706f73616c4e6f744578697374730002044c50726f706f73616c206d75737420657869737464496e6465784d69736d6174636850726f706f73616c4861736800030488496e646578206d69736d617463686564207468652070726f706f73616c2068617368344475706c6963617465566f7465000404584475706c696361746520766f74652069676e6f7265645c546f6f4561726c79546f436c6f736550726f706f73616c0005043d015468652063616c6c20746f20636c6f7365207468652070726f706f73616c20776173206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e6758546f6f4d616e7941637469766550726f706f73616c73000604fc54686572652063616e206f6e6c792062652061206d6178696d756d206f6620604d617850726f706f73616c7360206163746976652070726f706f73616c732ea050726f706f73616c5765696768744c6573735468616e446973706174636843616c6c576569676874000704d054686520676976656e207765696768742d626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772ea450726f706f73616c4c656e677468426f756e644c6573735468616e50726f706f73616c4c656e677468000804d054686520676976656e206c656e6774682d626f756e6420666f72207468652070726f706f73616c2077617320746f6f206c6f772ea44475726174696f6e4c6f7765725468616e436f6e666967757265644d6f74696f6e4475726174696f6e000904dc54686520676976656e206d6f74696f6e206475726174696f6e20666f72207468652070726f706f73616c2077617320746f6f206c6f772e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e11060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401000453000004005d0201185665633c543e000015060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401000453000004005d0201185665633c543e00001d060c4470616c6c65745f6d656d626572736869701870616c6c6574144572726f7208045400044900010c34416c72656164794d656d62657200000444416c72656164792061206d656d6265722e244e6f744d656d626572000104344e6f742061206d656d6265722e38546f6f4d616e794d656d6265727300020444546f6f206d616e79206d656d626572732e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e21060c3870616c6c65745f7574696c6974791870616c6c6574144572726f7204045400010430546f6f4d616e7943616c6c730000045c546f6f206d616e792063616c6c7320626174636865642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e25060c2c70616c6c65745f7375646f1870616c6c6574144572726f720404540001042c526571756972655375646f0000048053656e646572206d75737420626520746865205375646f206163636f756e742e04684572726f7220666f7220746865205375646f2070616c6c65742e2906000004080004002d06083c70616c6c65745f6d756c7469736967204d756c7469736967102c426c6f636b4e756d62657201101c42616c616e63650118244163636f756e7449640100304d6178417070726f76616c7300001001107768656ed8015854696d65706f696e743c426c6f636b4e756d6265723e00011c6465706f73697418011c42616c616e63650001246465706f7369746f720001244163636f756e744964000124617070726f76616c733106018c426f756e6465645665633c4163636f756e7449642c204d6178417070726f76616c733e000031060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401000453000004005d0201185665633c543e000035060c3c70616c6c65745f6d756c74697369671870616c6c6574144572726f72040454000138404d696e696d756d5468726573686f6c640000047c5468726573686f6c64206d7573742062652032206f7220677265617465722e3c416c7265616479417070726f766564000104ac43616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e444e6f417070726f76616c734e65656465640002049c43616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e44546f6f4665775369676e61746f72696573000304a854686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e48546f6f4d616e795369676e61746f72696573000404ac54686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e545369676e61746f726965734f75744f664f726465720005040d01546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e4c53656e646572496e5369676e61746f726965730006040d015468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e204e6f74466f756e64000704dc4d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e204e6f744f776e65720008042d014f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e2c4e6f54696d65706f696e740009041d014e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e3857726f6e6754696d65706f696e74000a042d014120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e4c556e657870656374656454696d65706f696e74000b04f4412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e3c4d6178576569676874546f6f4c6f77000c04d0546865206d6178696d756d2077656967687420696e666f726d6174696f6e2070726f76696465642077617320746f6f206c6f772e34416c726561647953746f726564000d04a0546865206461746120746f2062652073746f72656420697320616c72656164792073746f7265642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e3906083c70616c6c65745f707265696d616765404f6c645265717565737453746174757308244163636f756e74496401001c42616c616e6365011801082c556e72657175657374656408011c6465706f7369743d060150284163636f756e7449642c2042616c616e63652900010c6c656e10010c753332000000245265717565737465640c011c6465706f736974410601704f7074696f6e3c284163636f756e7449642c2042616c616e6365293e000114636f756e7410010c75333200010c6c656ed101012c4f7074696f6e3c7533323e000100003d0600000408001800410604184f7074696f6e040454013d060108104e6f6e6500000010536f6d6504003d0600000100004506083c70616c6c65745f707265696d616765345265717565737453746174757308244163636f756e7449640100185469636b657401490601082c556e7265717565737465640801187469636b65744d06014c284163636f756e7449642c205469636b65742900010c6c656e10010c753332000000245265717565737465640c01306d617962655f7469636b65745106016c4f7074696f6e3c284163636f756e7449642c205469636b6574293e000114636f756e7410010c7533320001246d617962655f6c656ed101012c4f7074696f6e3c7533323e00010000490614346672616d655f737570706f72741874726169747318746f6b656e732066756e6769626c6544486f6c64436f6e73696465726174696f6e1404410004460004520004440008467000000400180128463a3a42616c616e636500004d060000040800490600510604184f7074696f6e040454014d060108104e6f6e6500000010536f6d6504004d06000001000055060000040834100059060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e00005d060c3c70616c6c65745f707265696d6167651870616c6c6574144572726f7204045400012018546f6f426967000004a0507265696d61676520697320746f6f206c6172676520746f2073746f7265206f6e2d636861696e2e30416c72656164794e6f746564000104a4507265696d6167652068617320616c7265616479206265656e206e6f746564206f6e2d636861696e2e344e6f74417574686f72697a6564000204c85468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e2e204e6f744e6f746564000304fc54686520707265696d6167652063616e6e6f742062652072656d6f7665642073696e636520697420686173206e6f7420796574206265656e206e6f7465642e2452657175657374656400040409014120707265696d616765206d6179206e6f742062652072656d6f766564207768656e20746865726520617265206f75747374616e64696e672072657175657374732e304e6f745265717565737465640005042d0154686520707265696d61676520726571756573742063616e6e6f742062652072656d6f7665642073696e6365206e6f206f75747374616e64696e672072657175657374732065786973742e1c546f6f4d616e7900060455014d6f7265207468616e20604d41585f484153485f555047524144455f42554c4b5f434f554e54602068617368657320776572652072657175657374656420746f206265207570677261646564206174206f6e63652e18546f6f466577000704e4546f6f206665772068617368657320776572652072657175657374656420746f2062652075706772616465642028692e652e207a65726f292e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e61060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454016506045300000400790601185665633c543e0000650604184f7074696f6e0404540169060108104e6f6e6500000010536f6d650400690600000100006906084070616c6c65745f7363686564756c6572245363686564756c656414104e616d6501041043616c6c016d062c426c6f636b4e756d62657201103450616c6c6574734f726967696e012d03244163636f756e7449640100001401206d617962655f6964e801304f7074696f6e3c4e616d653e0001207072696f726974790801487363686564756c653a3a5072696f7269747900011063616c6c6d06011043616c6c0001386d617962655f706572696f646963510301944f7074696f6e3c7363686564756c653a3a506572696f643c426c6f636b4e756d6265723e3e0001186f726967696e2d03013450616c6c6574734f726967696e00006d0610346672616d655f737570706f72741874726169747324707265696d616765731c426f756e6465640804540115030448017106010c184c656761637904011068617368340124483a3a4f757470757400000018496e6c696e65040075060134426f756e646564496e6c696e65000100184c6f6f6b757008011068617368340124483a3a4f757470757400010c6c656e10010c7533320002000071060c2873705f72756e74696d65187472616974732c426c616b6554776f3235360000000075060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e64656456656308045401080453000004003801185665633c543e000079060000026506007d06084070616c6c65745f7363686564756c65722c5265747279436f6e6669670418506572696f640110000c0134746f74616c5f72657472696573080108753800012472656d61696e696e670801087538000118706572696f64100118506572696f64000081060c4070616c6c65745f7363686564756c65721870616c6c6574144572726f72040454000114404661696c6564546f5363686564756c65000004644661696c656420746f207363686564756c6520612063616c6c204e6f74466f756e640001047c43616e6e6f742066696e6420746865207363686564756c65642063616c6c2e5c546172676574426c6f636b4e756d626572496e50617374000204a4476976656e2074617267657420626c6f636b206e756d62657220697320696e2074686520706173742e4852657363686564756c654e6f4368616e6765000304f052657363686564756c65206661696c6564206265636175736520697420646f6573206e6f74206368616e6765207363686564756c65642074696d652e144e616d6564000404d0417474656d707420746f207573652061206e6f6e2d6e616d65642066756e6374696f6e206f6e2061206e616d6564207461736b2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e8506000004088906180089060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454018d06045300000400910601185665633c543e00008d06083070616c6c65745f70726f78793c50726f7879446566696e6974696f6e0c244163636f756e74496401002450726f78795479706501f02c426c6f636b4e756d6265720110000c012064656c65676174650001244163636f756e74496400012870726f78795f74797065f0012450726f78795479706500011464656c617910012c426c6f636b4e756d626572000091060000028d06009506000004089906180099060c4c626f756e6465645f636f6c6c656374696f6e732c626f756e6465645f76656328426f756e646564566563080454019d06045300000400a10601185665633c543e00009d06083070616c6c65745f70726f787930416e6e6f756e63656d656e740c244163636f756e7449640100104861736801342c426c6f636b4e756d6265720110000c01107265616c0001244163636f756e74496400012463616c6c5f686173683401104861736800011868656967687410012c426c6f636b4e756d6265720000a1060000029d0600a5060c3070616c6c65745f70726f78791870616c6c6574144572726f720404540001201c546f6f4d616e79000004210154686572652061726520746f6f206d616e792070726f786965732072656769737465726564206f7220746f6f206d616e7920616e6e6f756e63656d656e74732070656e64696e672e204e6f74466f756e640001047450726f787920726567697374726174696f6e206e6f7420666f756e642e204e6f7450726f7879000204cc53656e646572206973206e6f7420612070726f7879206f6620746865206163636f756e7420746f2062652070726f786965642e2c556e70726f787961626c650003042101412063616c6c20776869636820697320696e636f6d70617469626c652077697468207468652070726f7879207479706527732066696c7465722077617320617474656d707465642e244475706c69636174650004046c4163636f756e7420697320616c726561647920612070726f78792e304e6f5065726d697373696f6e000504150143616c6c206d6179206e6f74206265206d6164652062792070726f78792062656361757365206974206d617920657363616c617465206974732070726976696c656765732e2c556e616e6e6f756e636564000604d0416e6e6f756e63656d656e742c206966206d61646520617420616c6c2c20776173206d61646520746f6f20726563656e746c792e2c4e6f53656c6650726f78790007046443616e6e6f74206164642073656c662061732070726f78792e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ea9060c3c70616c6c65745f726567697374727914747970657330526567697374726174696f6e081c42616c616e636501184c4d61784164646974696f6e616c4669656c6473000008011c6465706f73697418011c42616c616e6365000110696e666f610301844964656e74697479496e666f3c4d61784164646974696f6e616c4669656c64733e0000ad060c3c70616c6c65745f72656769737472791870616c6c6574144572726f7204045400010c3843616e6e6f74526567697374657200000435014163636f756e7420617474656d7074656420746f20726567697374657220616e206964656e746974792062757420646f6573206e6f74206d6565742074686520726571756972656d656e74732e6c546f6f4d616e794669656c6473496e4964656e74697479496e666f000104ec4163636f756e742070617373656420746f6f206d616e79206164646974696f6e616c206669656c647320746f207468656972206964656e74697479344e6f7452656769737465726564000204a84163636f756e7420646f65736e2774206861766520612072656769737465726564206964656e74697479048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb1060c4870616c6c65745f636f6d6d69746d656e747314747970657330526567697374726174696f6e0c1c42616c616e63650118244d61784669656c6473002c426c6f636b4e756d6265720110000c011c6465706f73697418011c42616c616e6365000114626c6f636b10012c426c6f636b4e756d626572000110696e666f6d040164436f6d6d69746d656e74496e666f3c4d61784669656c64733e0000b5060c4870616c6c65745f636f6d6d69746d656e74731870616c6c6574144572726f7204045400010c74546f6f4d616e794669656c6473496e436f6d6d69746d656e74496e666f000004f44163636f756e742070617373656420746f6f206d616e79206164646974696f6e616c206669656c647320746f20746865697220636f6d6d69746d656e745c4163636f756e744e6f74416c6c6f776564436f6d6d6974000104d44163636f756e74206973206e6f7420616c6c6f7720746f206d616b6520636f6d6d69746d656e747320746f2074686520636861696e78436f6d6d69746d656e74536574526174654c696d69744578636565646564000204f84163636f756e7420697320747279696e6720746f20636f6d6d6974206461746120746f6f20666173742c2072617465206c696d6974206578636565646564048054686520604572726f726020656e756d206f6620746869732070616c6c65742eb9060c4870616c6c65745f61646d696e5f7574696c731870616c6c6574144572726f7204045400010c485375626e6574446f65734e6f744578697374000004d4546865207375626e657420646f6573206e6f742065786973742c20636865636b20746865206e657475696420706172616d65746572784d617856616c696461746f72734c61726765725468616e4d617855496473000104ad01546865206d6178696d756d206e756d626572206f66207375626e65742076616c696461746f7273206d757374206265206c657373207468616e20746865206d6178696d756d206e756d626572206f6620616c6c6f776564205549447320696e20746865207375626e65742e844d6178416c6c6f776564554964734c6573735468616e43757272656e7455496473000204ad01546865206d6178696d756d206e756d626572206f66207375626e65742076616c696461746f7273206d757374206265206d6f7265207468616e207468652063757272656e74206e756d626572206f66205549447320616c726561647920696e20746865207375626e65742e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ebd0600000408001000c10604184f7074696f6e04045401180108104e6f6e6500000010536f6d650400180000010000c5060c4070616c6c65745f736166655f6d6f64651870616c6c6574144572726f7204045400011c1c456e7465726564000004b054686520736166652d6d6f64652069732028616c7265616479206f72207374696c6c2920656e74657265642e18457869746564000104ac54686520736166652d6d6f64652069732028616c7265616479206f72207374696c6c29206578697465642e344e6f74436f6e666967757265640002040901546869732066756e6374696f6e616c697479206f66207468652070616c6c65742069732064697361626c65642062792074686520636f6e66696775726174696f6e2e244e6f4465706f736974000304745468657265206973206e6f2062616c616e63652072657365727665642e40416c72656164794465706f73697465640004045d01546865206163636f756e7420616c7265616479206861732061206465706f73697420726573657276656420616e642063616e207468657265666f7265206e6f7420656e746572206f7220657874656e6420616761696e2e4043616e6e6f7452656c656173655965740005049054686973206465706f7369742063616e6e6f742062652072656c6561736564207965742e3443757272656e63794572726f72000604a0416e206572726f722066726f6d2074686520756e6465726c79696e67206043757272656e6379602e048054686520604572726f726020656e756d206f6620746869732070616c6c65742ec906000002cd0600cd060000040c8905d106e50600d106081866705f727063445472616e73616374696f6e53746174757300001c01407472616e73616374696f6e5f68617368340110483235360001447472616e73616374696f6e5f696e64657810010c75333200011066726f6d0d01011c41646472657373000108746fd506013c4f7074696f6e3c416464726573733e000140636f6e74726163745f61646472657373d506013c4f7074696f6e3c416464726573733e0001106c6f6773d90601205665633c4c6f673e0001286c6f67735f626c6f6f6ddd060114426c6f6f6d0000d50604184f7074696f6e040454010d010108104e6f6e6500000010536f6d6504000d010000010000d906000002390100dd060820657468626c6f6f6d14426c6f6f6d00000400e10601405b75383b20424c4f4f4d5f53495a455d0000e106000003000100000800e5060c20657468657265756d1c726563656970742452656365697074563300010c184c65676163790400e906014445495036353852656365697074446174610000001c454950323933300400e90601484549503239333052656365697074446174610001001c454950313535390400e906014845495031353539526563656970744461746100020000e9060c20657468657265756d1c72656365697074444549503635385265636569707444617461000010012c7374617475735f636f64650801087538000120757365645f67617341010110553235360001286c6f67735f626c6f6f6ddd060114426c6f6f6d0001106c6f6773d90601205665633c4c6f673e0000ed060c20657468657265756d14626c6f636b14426c6f636b040454018905000c0118686561646572f10601184865616465720001307472616e73616374696f6e73f90601185665633c543e0001186f6d6d657273fd06012c5665633c4865616465723e0000f1060c20657468657265756d186865616465721848656164657200003c012c706172656e745f686173683401104832353600012c6f6d6d6572735f686173683401104832353600012c62656e65666963696172790d0101104831363000012873746174655f726f6f74340110483235360001447472616e73616374696f6e735f726f6f743401104832353600013472656365697074735f726f6f74340110483235360001286c6f67735f626c6f6f6ddd060114426c6f6f6d000128646966666963756c747941010110553235360001186e756d62657241010110553235360001246761735f6c696d697441010110553235360001206761735f75736564410101105532353600012474696d657374616d7018010c75363400012865787472615f6461746138011442797465730001206d69785f68617368340110483235360001146e6f6e6365f506010c4836340000f5060c38657468657265756d5f747970657310686173680c48363400000400a501011c5b75383b20385d0000f906000002890500fd06000002f106000107000002e506000507000002d1060009070c3c70616c6c65745f657468657265756d1870616c6c6574144572726f7204045400010840496e76616c69645369676e6174757265000004545369676e617475726520697320696e76616c69642e305072654c6f67457869737473000104d85072652d6c6f672069732070726573656e742c207468657265666f7265207472616e73616374206973206e6f7420616c6c6f7765642e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e0d07082870616c6c65745f65766d30436f64654d65746164617461000008011073697a6518010c753634000110686173683401104832353600001107000004080d01340015070c2870616c6c65745f65766d1870616c6c6574144572726f720404540001382842616c616e63654c6f77000004904e6f7420656e6f7567682062616c616e636520746f20706572666f726d20616374696f6e2c4665654f766572666c6f770001048043616c63756c6174696e6720746f74616c20666565206f766572666c6f7765643c5061796d656e744f766572666c6f770002049043616c63756c6174696e6720746f74616c207061796d656e74206f766572666c6f7765643857697468647261774661696c65640003044c576974686472617720666565206661696c6564384761735072696365546f6f4c6f770004045447617320707269636520697320746f6f206c6f772e30496e76616c69644e6f6e6365000504404e6f6e636520697320696e76616c6964384761734c696d6974546f6f4c6f7700060454476173206c696d697420697320746f6f206c6f772e3c4761734c696d6974546f6f4869676800070458476173206c696d697420697320746f6f20686967682e38496e76616c6964436861696e49640008046054686520636861696e20696420697320696e76616c69642e40496e76616c69645369676e617475726500090464746865207369676e617475726520697320696e76616c69642e285265656e7472616e6379000a043845564d207265656e7472616e6379685472616e73616374696f6e4d757374436f6d6546726f6d454f41000b04244549502d333630372c24556e646566696e6564000c0440556e646566696e6564206572726f722e284e6f74416c6c6f776564000d04bc4f726967696e206973206e6f7420616c6c6f77656420746f20706572666f726d20746865206f7065726174696f6e2e048054686520604572726f726020656e756d206f6620746869732070616c6c65742e19070c3070616c6c65745f6472616e641870616c6c6574144572726f72040454000118244e6f6e6556616c7565000004f85468652076616c7565207265747269657665642077617320604e6f6e6560206173206e6f2076616c7565207761732070726576696f75736c79207365742e3c53746f726167654f766572666c6f770001041d0154686572652077617320616e20617474656d707420746f20696e6372656d656e74207468652076616c756520696e2073746f72616765206f76657220607533323a3a4d4158602e584472616e64436f6e6e656374696f6e4661696c757265000204606661696c656420746f20636f6e6e65637420746f207468653c556e766572696669656450756c7365000304507468652070756c736520697320696e76616c696448496e76616c6964526f756e644e756d6265720004048874686520726f756e64206e756d62657220646964206e6f7420696e6372656d656e745850756c7365566572696669636174696f6e4572726f720005047c7468652070756c736520636f756c64206e6f74206265207665726966696564048054686520604572726f726020656e756d206f6620746869732070616c6c65742e1d070c4466705f73656c665f636f6e7461696e65644c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730155021043616c6c011503245369676e617475726501e9051445787472610121070004005d0701250173705f72756e74696d653a3a67656e657269633a3a556e636865636b656445787472696e7369633c416464726573732c2043616c6c2c205369676e61747572652c2045787472610a3e000021070000042c250729072d07310735073d074107450749075107550700250710306672616d655f73797374656d28657874656e73696f6e7354636865636b5f6e6f6e5f7a65726f5f73656e64657248436865636b4e6f6e5a65726f53656e64657204045400000000290710306672616d655f73797374656d28657874656e73696f6e7348636865636b5f737065635f76657273696f6e40436865636b5370656356657273696f6e040454000000002d0710306672616d655f73797374656d28657874656e73696f6e7340636865636b5f74785f76657273696f6e38436865636b547856657273696f6e04045400000000310710306672616d655f73797374656d28657874656e73696f6e7334636865636b5f67656e6573697330436865636b47656e6573697304045400000000350710306672616d655f73797374656d28657874656e73696f6e733c636865636b5f6d6f7274616c69747938436865636b4d6f7274616c697479040454000004003907010c45726100003907102873705f72756e74696d651c67656e657269630c6572610c4572610001010420496d6d6f7274616c0000001c4d6f7274616c31040008000001001c4d6f7274616c32040008000002001c4d6f7274616c33040008000003001c4d6f7274616c34040008000004001c4d6f7274616c35040008000005001c4d6f7274616c36040008000006001c4d6f7274616c37040008000007001c4d6f7274616c38040008000008001c4d6f7274616c3904000800000900204d6f7274616c313004000800000a00204d6f7274616c313104000800000b00204d6f7274616c313204000800000c00204d6f7274616c313304000800000d00204d6f7274616c313404000800000e00204d6f7274616c313504000800000f00204d6f7274616c313604000800001000204d6f7274616c313704000800001100204d6f7274616c313804000800001200204d6f7274616c313904000800001300204d6f7274616c323004000800001400204d6f7274616c323104000800001500204d6f7274616c323204000800001600204d6f7274616c323304000800001700204d6f7274616c323404000800001800204d6f7274616c323504000800001900204d6f7274616c323604000800001a00204d6f7274616c323704000800001b00204d6f7274616c323804000800001c00204d6f7274616c323904000800001d00204d6f7274616c333004000800001e00204d6f7274616c333104000800001f00204d6f7274616c333204000800002000204d6f7274616c333304000800002100204d6f7274616c333404000800002200204d6f7274616c333504000800002300204d6f7274616c333604000800002400204d6f7274616c333704000800002500204d6f7274616c333804000800002600204d6f7274616c333904000800002700204d6f7274616c343004000800002800204d6f7274616c343104000800002900204d6f7274616c343204000800002a00204d6f7274616c343304000800002b00204d6f7274616c343404000800002c00204d6f7274616c343504000800002d00204d6f7274616c343604000800002e00204d6f7274616c343704000800002f00204d6f7274616c343804000800003000204d6f7274616c343904000800003100204d6f7274616c353004000800003200204d6f7274616c353104000800003300204d6f7274616c353204000800003400204d6f7274616c353304000800003500204d6f7274616c353404000800003600204d6f7274616c353504000800003700204d6f7274616c353604000800003800204d6f7274616c353704000800003900204d6f7274616c353804000800003a00204d6f7274616c353904000800003b00204d6f7274616c363004000800003c00204d6f7274616c363104000800003d00204d6f7274616c363204000800003e00204d6f7274616c363304000800003f00204d6f7274616c363404000800004000204d6f7274616c363504000800004100204d6f7274616c363604000800004200204d6f7274616c363704000800004300204d6f7274616c363804000800004400204d6f7274616c363904000800004500204d6f7274616c373004000800004600204d6f7274616c373104000800004700204d6f7274616c373204000800004800204d6f7274616c373304000800004900204d6f7274616c373404000800004a00204d6f7274616c373504000800004b00204d6f7274616c373604000800004c00204d6f7274616c373704000800004d00204d6f7274616c373804000800004e00204d6f7274616c373904000800004f00204d6f7274616c383004000800005000204d6f7274616c383104000800005100204d6f7274616c383204000800005200204d6f7274616c383304000800005300204d6f7274616c383404000800005400204d6f7274616c383504000800005500204d6f7274616c383604000800005600204d6f7274616c383704000800005700204d6f7274616c383804000800005800204d6f7274616c383904000800005900204d6f7274616c393004000800005a00204d6f7274616c393104000800005b00204d6f7274616c393204000800005c00204d6f7274616c393304000800005d00204d6f7274616c393404000800005e00204d6f7274616c393504000800005f00204d6f7274616c393604000800006000204d6f7274616c393704000800006100204d6f7274616c393804000800006200204d6f7274616c393904000800006300244d6f7274616c31303004000800006400244d6f7274616c31303104000800006500244d6f7274616c31303204000800006600244d6f7274616c31303304000800006700244d6f7274616c31303404000800006800244d6f7274616c31303504000800006900244d6f7274616c31303604000800006a00244d6f7274616c31303704000800006b00244d6f7274616c31303804000800006c00244d6f7274616c31303904000800006d00244d6f7274616c31313004000800006e00244d6f7274616c31313104000800006f00244d6f7274616c31313204000800007000244d6f7274616c31313304000800007100244d6f7274616c31313404000800007200244d6f7274616c31313504000800007300244d6f7274616c31313604000800007400244d6f7274616c31313704000800007500244d6f7274616c31313804000800007600244d6f7274616c31313904000800007700244d6f7274616c31323004000800007800244d6f7274616c31323104000800007900244d6f7274616c31323204000800007a00244d6f7274616c31323304000800007b00244d6f7274616c31323404000800007c00244d6f7274616c31323504000800007d00244d6f7274616c31323604000800007e00244d6f7274616c31323704000800007f00244d6f7274616c31323804000800008000244d6f7274616c31323904000800008100244d6f7274616c31333004000800008200244d6f7274616c31333104000800008300244d6f7274616c31333204000800008400244d6f7274616c31333304000800008500244d6f7274616c31333404000800008600244d6f7274616c31333504000800008700244d6f7274616c31333604000800008800244d6f7274616c31333704000800008900244d6f7274616c31333804000800008a00244d6f7274616c31333904000800008b00244d6f7274616c31343004000800008c00244d6f7274616c31343104000800008d00244d6f7274616c31343204000800008e00244d6f7274616c31343304000800008f00244d6f7274616c31343404000800009000244d6f7274616c31343504000800009100244d6f7274616c31343604000800009200244d6f7274616c31343704000800009300244d6f7274616c31343804000800009400244d6f7274616c31343904000800009500244d6f7274616c31353004000800009600244d6f7274616c31353104000800009700244d6f7274616c31353204000800009800244d6f7274616c31353304000800009900244d6f7274616c31353404000800009a00244d6f7274616c31353504000800009b00244d6f7274616c31353604000800009c00244d6f7274616c31353704000800009d00244d6f7274616c31353804000800009e00244d6f7274616c31353904000800009f00244d6f7274616c3136300400080000a000244d6f7274616c3136310400080000a100244d6f7274616c3136320400080000a200244d6f7274616c3136330400080000a300244d6f7274616c3136340400080000a400244d6f7274616c3136350400080000a500244d6f7274616c3136360400080000a600244d6f7274616c3136370400080000a700244d6f7274616c3136380400080000a800244d6f7274616c3136390400080000a900244d6f7274616c3137300400080000aa00244d6f7274616c3137310400080000ab00244d6f7274616c3137320400080000ac00244d6f7274616c3137330400080000ad00244d6f7274616c3137340400080000ae00244d6f7274616c3137350400080000af00244d6f7274616c3137360400080000b000244d6f7274616c3137370400080000b100244d6f7274616c3137380400080000b200244d6f7274616c3137390400080000b300244d6f7274616c3138300400080000b400244d6f7274616c3138310400080000b500244d6f7274616c3138320400080000b600244d6f7274616c3138330400080000b700244d6f7274616c3138340400080000b800244d6f7274616c3138350400080000b900244d6f7274616c3138360400080000ba00244d6f7274616c3138370400080000bb00244d6f7274616c3138380400080000bc00244d6f7274616c3138390400080000bd00244d6f7274616c3139300400080000be00244d6f7274616c3139310400080000bf00244d6f7274616c3139320400080000c000244d6f7274616c3139330400080000c100244d6f7274616c3139340400080000c200244d6f7274616c3139350400080000c300244d6f7274616c3139360400080000c400244d6f7274616c3139370400080000c500244d6f7274616c3139380400080000c600244d6f7274616c3139390400080000c700244d6f7274616c3230300400080000c800244d6f7274616c3230310400080000c900244d6f7274616c3230320400080000ca00244d6f7274616c3230330400080000cb00244d6f7274616c3230340400080000cc00244d6f7274616c3230350400080000cd00244d6f7274616c3230360400080000ce00244d6f7274616c3230370400080000cf00244d6f7274616c3230380400080000d000244d6f7274616c3230390400080000d100244d6f7274616c3231300400080000d200244d6f7274616c3231310400080000d300244d6f7274616c3231320400080000d400244d6f7274616c3231330400080000d500244d6f7274616c3231340400080000d600244d6f7274616c3231350400080000d700244d6f7274616c3231360400080000d800244d6f7274616c3231370400080000d900244d6f7274616c3231380400080000da00244d6f7274616c3231390400080000db00244d6f7274616c3232300400080000dc00244d6f7274616c3232310400080000dd00244d6f7274616c3232320400080000de00244d6f7274616c3232330400080000df00244d6f7274616c3232340400080000e000244d6f7274616c3232350400080000e100244d6f7274616c3232360400080000e200244d6f7274616c3232370400080000e300244d6f7274616c3232380400080000e400244d6f7274616c3232390400080000e500244d6f7274616c3233300400080000e600244d6f7274616c3233310400080000e700244d6f7274616c3233320400080000e800244d6f7274616c3233330400080000e900244d6f7274616c3233340400080000ea00244d6f7274616c3233350400080000eb00244d6f7274616c3233360400080000ec00244d6f7274616c3233370400080000ed00244d6f7274616c3233380400080000ee00244d6f7274616c3233390400080000ef00244d6f7274616c3234300400080000f000244d6f7274616c3234310400080000f100244d6f7274616c3234320400080000f200244d6f7274616c3234330400080000f300244d6f7274616c3234340400080000f400244d6f7274616c3234350400080000f500244d6f7274616c3234360400080000f600244d6f7274616c3234370400080000f700244d6f7274616c3234380400080000f800244d6f7274616c3234390400080000f900244d6f7274616c3235300400080000fa00244d6f7274616c3235310400080000fb00244d6f7274616c3235320400080000fc00244d6f7274616c3235330400080000fd00244d6f7274616c3235340400080000fe00244d6f7274616c3235350400080000ff00003d070c586e6f64655f73756274656e736f725f72756e74696d652c636865636b5f6e6f6e636528436865636b4e6f6e63650404540000040061010120543a3a4e6f6e63650000410710306672616d655f73797374656d28657874656e73696f6e7330636865636b5f7765696768742c436865636b576569676874040454000000004507086870616c6c65745f7472616e73616374696f6e5f7061796d656e74604368617267655472616e73616374696f6e5061796d656e740404540000040030013042616c616e63654f663c543e00004907084070616c6c65745f73756274656e736f726053756274656e736f725369676e6564457874656e73696f6e040454014d070000004d0708586e6f64655f73756274656e736f725f72756e74696d651c52756e74696d65000000005107084870616c6c65745f636f6d6d69746d656e747368436f6d6d69746d656e74735369676e6564457874656e73696f6e040454014d07000000550708746672616d655f6d657461646174615f686173685f657874656e73696f6e44436865636b4d657461646174614861736804045400000401106d6f6465590701104d6f64650000590708746672616d655f6d657461646174615f686173685f657874656e73696f6e104d6f64650001082044697361626c65640000001c456e61626c6564000100005d07102873705f72756e74696d651c67656e657269634c756e636865636b65645f65787472696e73696348556e636865636b656445787472696e736963101c416464726573730155021043616c6c011503245369676e617475726501e905144578747261012107000400380000006c1853797374656d011853797374656d481c4163636f756e7401010402000ce0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004e8205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e3845787472696e736963436f756e74000010040004b820546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e40496e686572656e74734170706c696564010024040004a4205768657468657220616c6c20696e686572656e74732068617665206265656e206170706c6965642e2c426c6f636b576569676874010028180000000000000488205468652063757272656e742077656967687420666f722074686520626c6f636b2e40416c6c45787472696e736963734c656e000010040004410120546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e24426c6f636b486173680101040510348000000000000000000000000000000000000000000000000000000000000000000498204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e3445787472696e736963446174610101040510380400043d012045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e184e756d6265720100101000000000040901205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e28506172656e744861736801003480000000000000000000000000000000000000000000000000000000000000000004702048617368206f66207468652070726576696f757320626c6f636b2e1844696765737401003c040004f020446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e184576656e747301004c04001ca0204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e001d01204e4f54453a20546865206974656d20697320756e626f756e6420616e642073686f756c64207468657265666f7265206e657665722062652072656164206f6e20636861696e2ed020497420636f756c64206f746865727769736520696e666c6174652074686520506f562073697a65206f66206120626c6f636b2e002d01204576656e747320686176652061206c6172676520696e2d6d656d6f72792073697a652e20426f7820746865206576656e747320746f206e6f7420676f206f75742d6f662d6d656d6f7279fc206a75737420696e206361736520736f6d656f6e65207374696c6c207265616473207468656d2066726f6d2077697468696e207468652072756e74696d652e284576656e74436f756e74010010100000000004b820546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e2c4576656e74546f70696373010104023459010400282501204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e646578657394206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e00510120416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e2054686973450120616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e64e420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e005901205468652076616c756520686173207468652074797065206028426c6f636b4e756d626572466f723c543e2c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573744d012074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b0101206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e484c61737452756e74696d655570677261646500005d0104000455012053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e545570677261646564546f553332526566436f756e740100240400044d012054727565206966207765206861766520757067726164656420736f207468617420607479706520526566436f756e74602069732060753332602e2046616c7365202864656661756c7429206966206e6f742e605570677261646564546f547269706c65526566436f756e740100240400085d012054727565206966207765206861766520757067726164656420736f2074686174204163636f756e74496e666f20636f6e7461696e73207468726565207479706573206f662060526566436f756e74602e2046616c736548202864656661756c7429206966206e6f742e38457865637574696f6e506861736500005501040004882054686520657865637574696f6e207068617365206f662074686520626c6f636b2e44417574686f72697a65645570677261646500006501040004b82060536f6d6560206966206120636f6465207570677261646520686173206265656e20617574686f72697a65642e01690101581830426c6f636b576569676874737901f901624d186c000b00409452a30313ffffffffffffffff4247871900010b30beb1555d021366666666666666a6010b0030ef7dba0213ffffffffffffffbf0100004247871900010b30ce562a46031366666666666666e6010b00409452a30313ffffffffffffffff01070010a5d4e8130000000000000040424787190000000004d020426c6f636b20262065787472696e7369637320776569676874733a20626173652076616c75657320616e64206c696d6974732e2c426c6f636b4c656e677468890130000078000000a0000000a00004a820546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e38426c6f636b48617368436f756e74101060090000045501204d6178696d756d206e756d626572206f6620626c6f636b206e756d62657220746f20626c6f636b2068617368206d617070696e677320746f206b65657020286f6c64657374207072756e6564206669727374292e20446257656967687491014040787d010000000000e1f505000000000409012054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e1c56657273696f6e95015104386e6f64652d73756274656e736f72386e6f64652d73756274656e736f7201000000e0000000010000004cdf6acb689907609b0500000037e397fc7c91f5e40200000040fe3ad401f8959a06000000fbc577b9d747efd601000000d2bc9897eed08f1503000000f78b278be53f454c02000000dd718d5cc53262d401000000ab3c0572291feb8b01000000ed99c5acb25eedf503000000bc9d89904f5b923f0100000037c8bb1350a9a2a804000000f3ff14d5ab52705903000000582211f65bb14b8905000000e65b00e46cedd0aa0200000042e62be4a39e5b6001000000806df4ccaa9ed485010000008375104b299b74c5010000005d1fbfbe852f280701000000c6886e2f8e598b0a0100000001000000010484204765742074686520636861696e277320696e2d636f64652076657273696f6e2e28535335385072656669789c082a0014a8205468652064657369676e61746564205353353820707265666978206f66207468697320636861696e2e0039012054686973207265706c6163657320746865202273733538466f726d6174222070726f7065727479206465636c6172656420696e2074686520636861696e20737065632e20526561736f6e20697331012074686174207468652072756e74696d652073686f756c64206b6e6f772061626f7574207468652070726566697820696e206f7264657220746f206d616b6520757365206f662069742061737020616e206964656e746966696572206f662074686520636861696e2e01a901006052616e646f6d6e657373436f6c6c656374697665466c6970016052616e646f6d6e657373436f6c6c656374697665466c6970043852616e646f6d4d6174657269616c0100ad0104000c610120536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e2054686973610120697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f664420746865206f6c6465737420686173682e00000000012454696d657374616d70012454696d657374616d70080c4e6f7701001820000000000000000004a0205468652063757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e24446964557064617465010024040010d82057686574686572207468652074696d657374616d7020686173206265656e207570646174656420696e207468697320626c6f636b2e00550120546869732076616c7565206973207570646174656420746f206074727565602075706f6e207375636365737366756c207375626d697373696f6e206f6620612074696d657374616d702062792061206e6f64652e4501204974206973207468656e20636865636b65642061742074686520656e64206f66206561636820626c6f636b20657865637574696f6e20696e2074686520606f6e5f66696e616c697a656020686f6f6b2e01b1010004344d696e696d756d506572696f6418207d00000000000000188c20546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e004d012042652061776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e4901206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f61012064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20466f72206578616d706c652c20696e2074686520417572612070616c6c65742069742077696c6c20626520646f75626c6520746869737020706572696f64206f6e2064656661756c742073657474696e67732e00021041757261011041757261082c417574686f7269746965730100b5010400046c205468652063757272656e7420617574686f72697479207365742e2c43757272656e74536c6f740100c1012000000000000000000c80205468652063757272656e7420736c6f74206f66207468697320626c6f636b2e009420546869732077696c6c2062652073657420696e20606f6e5f696e697469616c697a65602e00000430536c6f744475726174696f6e1820fa00000000000000100d012054686520736c6f74206475726174696f6e20417572612073686f756c642072756e20776974682c2065787072657373656420696e206d696c6c697365636f6e64732e3d0120546865206566666563746976652076616c7565206f66207468697320747970652073686f756c64206e6f74206368616e6765207768696c652074686520636861696e2069732072756e6e696e672e00350120466f72206261636b776172647320636f6d7061746962696c6974792065697468657220757365205b604d696e696d756d506572696f6454696d657354776f605d206f72206120636f6e73742e00031c4772616e647061011c4772616e6470611c1453746174650100c50104000490205374617465206f66207468652063757272656e7420617574686f72697479207365742e3450656e64696e674368616e67650000c901040004c42050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e284e657874466f72636564000010040004bc206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e1c5374616c6c65640000e40400049020607472756560206966207765206172652063757272656e746c79207374616c6c65642e3043757272656e745365744964010018200000000000000000085d0120546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c697469657329c420696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e30536574496453657373696f6e00010405181004002859012041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f722077686963682069747368206d656d62657273207765726520726573706f6e7369626c652e0045012054686973206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e2070726f6f66732e20416e2065717569766f636174696f6e2070726f6f66206d7573744d0120636f6e7461696e732061206b65792d6f776e6572736869702070726f6f6620666f72206120676976656e2073657373696f6e2c207468657265666f7265207765206e65656420612077617920746f20746965450120746f6765746865722073657373696f6e7320616e64204752414e44504120736574206964732c20692e652e207765206e65656420746f2076616c6964617465207468617420612076616c696461746f7241012077617320746865206f776e6572206f66206120676976656e206b6579206f6e206120676976656e2073657373696f6e2c20616e642077686174207468652061637469766520736574204944207761735420647572696e6720746861742073657373696f6e2e00b82054574f582d4e4f54453a2060536574496460206973206e6f7420756e646572207573657220636f6e74726f6c2e2c417574686f7269746965730100cd0104000484205468652063757272656e74206c697374206f6620617574686f7269746965732e01d501017c0c384d6178417574686f726974696573101020000000045c204d617820417574686f72697469657320696e20757365344d61784e6f6d696e61746f727310101400000004d420546865206d6178696d756d206e756d626572206f66206e6f6d696e61746f727320666f7220656163682076616c696461746f722e584d6178536574496453657373696f6e456e74726965731820000000000000000018390120546865206d6178696d756d206e756d626572206f6620656e747269657320746f206b65657020696e207468652073657420696420746f2073657373696f6e20696e646578206d617070696e672e0031012053696e6365207468652060536574496453657373696f6e60206d6170206973206f6e6c79207573656420666f722076616c69646174696e672065717569766f636174696f6e73207468697329012076616c75652073686f756c642072656c61746520746f2074686520626f6e64696e67206475726174696f6e206f66207768617465766572207374616b696e672073797374656d2069733501206265696e6720757365642028696620616e79292e2049662065717569766f636174696f6e2068616e646c696e67206973206e6f7420656e61626c6564207468656e20746869732076616c7565342063616e206265207a65726f2e010502042042616c616e636573012042616c616e6365731c34546f74616c49737375616e636501001820000000000000000004982054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e40496e61637469766549737375616e63650100182000000000000000000409012054686520746f74616c20756e697473206f66206f75747374616e64696e672064656163746976617465642062616c616e636520696e207468652073797374656d2e1c4163636f756e74010104020014a000000000000000000000000000000000000000000000000000000000000000000000000000000080600901205468652042616c616e6365732070616c6c6574206578616d706c65206f662073746f72696e67207468652062616c616e6365206f6620616e206163636f756e742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b19022020202074797065204163636f756e7453746f7265203d2053746f726167654d61705368696d3c53656c663a3a4163636f756e743c52756e74696d653e2c206672616d655f73797374656d3a3a50726f76696465723c52756e74696d653e2c204163636f756e7449642c2053656c663a3a4163636f756e74446174613c42616c616e63653e3e0c20207d102060606000150120596f752063616e20616c736f2073746f7265207468652062616c616e6365206f6620616e206163636f756e7420696e20746865206053797374656d602070616c6c65742e00282023204578616d706c650034206060606e6f636f6d70696c65b02020696d706c2070616c6c65745f62616c616e6365733a3a436f6e66696720666f722052756e74696d65207b7420202074797065204163636f756e7453746f7265203d2053797374656d0c20207d102060606000510120427574207468697320636f6d657320776974682074726164656f6666732c2073746f72696e67206163636f756e742062616c616e63657320696e207468652073797374656d2070616c6c65742073746f7265736d0120606672616d655f73797374656d60206461746120616c6f6e677369646520746865206163636f756e74206461746120636f6e747261727920746f2073746f72696e67206163636f756e742062616c616e63657320696e207468652901206042616c616e636573602070616c6c65742c20776869636820757365732061206053746f726167654d61706020746f2073746f72652062616c616e6365732064617461206f6e6c792e4101204e4f54453a2054686973206973206f6e6c79207573656420696e207468652063617365207468617420746869732070616c6c6574206973207573656420746f2073746f72652062616c616e6365732e144c6f636b7301010402000902040010b820416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e2501204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602052657365727665730101040200190204000ca4204e616d6564207265736572766573206f6e20736f6d65206163636f756e742062616c616e6365732e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f6014486f6c6473010104020025020400046c20486f6c6473206f6e206163636f756e742062616c616e6365732e1c467265657a6573010104020041020400048820467265657a65206c6f636b73206f6e206163636f756e742062616c616e6365732e015102018c10484578697374656e7469616c4465706f7369741820f40100000000000020410120546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e204d5553542042452047524541544552205448414e205a45524f2100590120496620796f75202a7265616c6c792a206e65656420697420746f206265207a65726f2c20796f752063616e20656e61626c652074686520666561747572652060696e7365637572655f7a65726f5f65646020666f72610120746869732070616c6c65742e20486f77657665722c20796f7520646f20736f20617420796f7572206f776e207269736b3a20746869732077696c6c206f70656e2075702061206d616a6f7220446f5320766563746f722e590120496e206361736520796f752068617665206d756c7469706c6520736f7572636573206f662070726f7669646572207265666572656e6365732c20796f75206d617920616c736f2067657420756e65787065637465648c206265686176696f757220696620796f7520736574207468697320746f207a65726f2e00f020426f74746f6d206c696e653a20446f20796f757273656c662061206661766f757220616e64206d616b65206974206174206c65617374206f6e6521204d61784c6f636b7310103200000010f420546865206d6178696d756d206e756d626572206f66206c6f636b7320746861742073686f756c64206578697374206f6e20616e206163636f756e742edc204e6f74207374726963746c7920656e666f726365642c20627574207573656420666f722077656967687420657374696d6174696f6e2e00ad0120557365206f66206c6f636b73206973206465707265636174656420696e206661766f7572206f6620667265657a65732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f602c4d617852657365727665731010320000000c0d0120546865206d6178696d756d206e756d626572206f66206e616d656420726573657276657320746861742063616e206578697374206f6e20616e206163636f756e742e00b10120557365206f66207265736572766573206973206465707265636174656420696e206661766f7572206f6620686f6c64732e20536565206068747470733a2f2f6769746875622e636f6d2f706172697479746563682f7375627374726174652f70756c6c2f31323935312f60284d6178467265657a657310103200000004610120546865206d6178696d756d206e756d626572206f6620696e646976696475616c20667265657a65206c6f636b7320746861742063616e206578697374206f6e20616e206163636f756e7420617420616e792074696d652e01650205485472616e73616374696f6e5061796d656e7401485472616e73616374696f6e5061796d656e7408444e6578744665654d756c7469706c6965720100690240000064a7b3b6e00d0000000000000000003853746f7261676556657273696f6e01006d0204000000019404604f7065726174696f6e616c4665654d756c7469706c696572080405545901204120666565206d756c7469706c69657220666f7220604f7065726174696f6e616c602065787472696e7369637320746f20636f6d7075746520227669727475616c207469702220746f20626f6f73742074686569722c20607072696f726974796000510120546869732076616c7565206973206d756c7469706c69656420627920746865206066696e616c5f6665656020746f206f627461696e206120227669727475616c20746970222074686174206973206c61746572f420616464656420746f20612074697020636f6d706f6e656e7420696e20726567756c617220607072696f72697479602063616c63756c6174696f6e732e4d01204974206d65616e732074686174206120604e6f726d616c60207472616e73616374696f6e2063616e2066726f6e742d72756e20612073696d696c61726c792d73697a656420604f7065726174696f6e616c6041012065787472696e736963202877697468206e6f20746970292c20627920696e636c7564696e672061207469702076616c75652067726561746572207468616e20746865207669727475616c207469702e003c20606060727573742c69676e6f726540202f2f20466f7220604e6f726d616c608c206c6574207072696f72697479203d207072696f726974795f63616c6328746970293b0054202f2f20466f7220604f7065726174696f6e616c601101206c6574207669727475616c5f746970203d2028696e636c7573696f6e5f666565202b2074697029202a204f7065726174696f6e616c4665654d756c7469706c6965723bc4206c6574207072696f72697479203d207072696f726974795f63616c6328746970202b207669727475616c5f746970293b1020606060005101204e6f746520746861742073696e636520776520757365206066696e616c5f6665656020746865206d756c7469706c696572206170706c69657320616c736f20746f2074686520726567756c61722060746970605d012073656e74207769746820746865207472616e73616374696f6e2e20536f2c206e6f74206f6e6c7920646f657320746865207472616e73616374696f6e206765742061207072696f726974792062756d702062617365646101206f6e207468652060696e636c7573696f6e5f666565602c2062757420776520616c736f20616d706c6966792074686520696d70616374206f662074697073206170706c69656420746f20604f7065726174696f6e616c6038207472616e73616374696f6e732e00063c53756274656e736f724d6f64756c65013c53756274656e736f724d6f64756c6545026c436f6c646b6579537761705363686564756c654475726174696f6e01001010a08c0000007c446973736f6c76654e6574776f726b5363686564756c654475726174696f6e01001010a08c0000007453656e61746552657175697265645374616b6550657263656e74616765010018200100000000000000002454616f57656967687401001820d9cef753e3a59b043474203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d70203d3d3d3d205374616b696e67205661726961626c6573203d3d3d3d74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d8901205468652053756274656e736f72205b60546f74616c49737375616e6365605d20726570726573656e74732074686520746f74616c2069737375616e6365206f6620746f6b656e73206f6e207468652042697474656e736f72206e6574776f726b2e008020497420697320636f6d707269736564206f662074687265652070617274733a6501202d2054686520746f74616c20616d6f756e74206f662069737375656420746f6b656e732c20747261636b656420696e2074686520546f74616c49737375616e6365206f66207468652042616c616e6365732070616c6c65743501202d2054686520746f74616c20616d6f756e74206f6620746f6b656e73207374616b656420696e207468652073797374656d2c20747261636b656420696e205b60546f74616c5374616b65605d0102202d2054686520746f74616c20616d6f756e74206f6620746f6b656e73206c6f636b656420757020666f72207375626e6574207265672c20747261636b656420696e205b60546f74616c5375626e65744c6f636b6564605d2061747461696e656420627920697465726174696e67206f766572207375626e6574206c6f636b2e007501204576656e7475616c6c792c2042697474656e736f722073686f756c64206d69677261746520746f207573696e6720486f6c647320616674657277686963682074696d652077652077696c6c206e6f742072657175697265207468697354207365706172617465206163636f756e74696e672e6c202d2d2d204954454d202d2d3e20476c6f62616c207765696768743c4d617844656c656761746554616b6501009c08142e048c202d2d2d204954454d20282064656661756c745f64656c65676174655f74616b6520293c4d696e44656c656761746554616b6501009c080000047c202d2d2d204954454d2028206d696e5f64656c65676174655f74616b6520293c4d61784368696c646b657954616b6501009c08142e048c202d2d2d204954454d20282064656661756c745f6368696c646b65795f74616b6520293c4d696e4368696c646b657954616b6501009c080000047c202d2d2d204954454d2028206d696e5f6368696c646b65795f74616b652029144f776e6572010104020000800000000000000000000000000000000000000000000000000000000000000000041501204d4150202820686f742029202d2d3e20636f6c64207c2052657475726e732074686520636f6e74726f6c6c696e6720636f6c646b657920666f72206120686f746b65792e2444656c65676174657301010402009c08142e04b501204d4150202820686f742029202d2d3e2074616b65207c2052657475726e732074686520686f746b65792064656c65676174696f6e2074616b652e20416e64207369676e616c7320746861742074686973206b6579206973206f70656e20666f722064656c65676174696f6e2e304368696c646b657954616b65010108020671029c080000045d0120444d4150202820686f742c206e65747569642029202d2d3e2074616b65207c2052657475726e732074686520686f746b6579206368696c646b65792074616b6520666f722061207370656369666963207375626e65744050656e64696e674368696c644b65797301010806027502790224000000000000000000041d0120444d41502028206e65747569642c20706172656e742029202d2d3e20285665633c2870726f706f7274696f6e2c6368696c64293e2c20636f6f6c5f646f776e5f626c6f636b29244368696c644b65797301010802067102ac040004d020444d4150202820706172656e742c206e65747569642029202d2d3e205665633c2870726f706f7274696f6e2c6368696c64293e28506172656e744b65797301010802067102ac040004d020444d41502028206368696c642c206e65747569642029202d2d3e205665633c2870726f706f7274696f6e2c706172656e74293e5c416c7068614469766964656e64735065725375626e65740101080602750218200000000000000000005454616f4469766964656e64735065725375626e657401010806027502182000000000000000000034426c6f636b456d697373696f6e0100182000ca9a3b00000000104c203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4c203d3d3d3d20436f696e62617365203d3d3d3d4c203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d8c202d2d2d204954454d202820676c6f62616c5f626c6f636b5f656d697373696f6e2029684c617374486f746b6579456d697373696f6e4f6e4e65747569640101080206710218200000000000000000042501202d2d2d20444d6170202820686f742c206e65747569642029202d2d3e20656d697373696f6e207c206c61737420686f746b657920656d697373696f6e206f6e206e6574776f726b2e844c617374486f746b6579436f6c646b6579456d697373696f6e4f6e4e657475696401010c0202067d021820000000000000000004d101202d2d2d204e4d4150202820686f742c20636f6c642c206e65747569642029202d2d3e206c6173745f656d697373696f6e5f6f6e5f686f745f636f6c645f6e6574207c2052657475726e7320746865206c6173745f656d697373696f6e5f7570646174655f6f6e5f686f745f636f6c645f6e657434546f74616c49737375616e6365010018200000000000000000306c203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d6c203d3d3d3d205374616b696e6720436f756e74657273203d3d3d3d6c203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d8901205468652053756274656e736f72205b60546f74616c49737375616e6365605d20726570726573656e74732074686520746f74616c2069737375616e6365206f6620746f6b656e73206f6e207468652042697474656e736f72206e6574776f726b2e008020497420697320636f6d707269736564206f662074687265652070617274733a6501202d2054686520746f74616c20616d6f756e74206f662069737375656420746f6b656e732c20747261636b656420696e2074686520546f74616c49737375616e6365206f66207468652042616c616e6365732070616c6c65743501202d2054686520746f74616c20616d6f756e74206f6620746f6b656e73207374616b656420696e207468652073797374656d2c20747261636b656420696e205b60546f74616c5374616b65605d0102202d2054686520746f74616c20616d6f756e74206f6620746f6b656e73206c6f636b656420757020666f72207375626e6574207265672c20747261636b656420696e205b60546f74616c5375626e65744c6f636b6564605d2061747461696e656420627920697465726174696e67206f766572207375626e6574206c6f636b2e007501204576656e7475616c6c792c2042697474656e736f722073686f756c64206d69677261746520746f207573696e6720486f6c647320616674657277686963682074696d652077652077696c6c206e6f742072657175697265207468697354207365706172617465206163636f756e74696e672e28546f74616c5374616b65010018200000000000000000003044796e616d6963426c6f636b01001820000000000000000000305375626e6574566f6c756d65010104069c1820000000000000000000245375626e657454414f010104069c1820000000000000000000545375626e6574416c706861496e456d697373696f6e010104069c1820000000000000000000585375626e6574416c7068614f7574456d697373696f6e010104069c18200000000000000000004c5375626e657454616f496e456d697373696f6e010104069c18200000000000000000005c5375626e6574416c706861456d697373696f6e53656c6c010104069c18200000000000000000004c546f74616c5374616b65417444796e616d6963010104069c1820000000000000000000345375626e6574416c706861496e010104069c1820000000000000000000385375626e6574416c7068614f7574010104069c1820000000000000000000385374616b696e67486f746b65797301010402005d02040000304f776e6564486f746b65797301010402005d02040000145374616b6501010802068102182000000000000000000489012028444550524543415445442920444d4150202820686f742c20636f6c642029202d2d3e207374616b65207c2052657475726e7320746865207374616b6520756e646572206120636f6c646b657920707265666978656420627920686f746b65792e50436f6c646b6579537761705363686564756c65640101040200a4000040546f74616c486f746b6579416c70686101010802067102182000000000000000000044546f74616c486f746b6579536861726573010108020671028502400000000000000000000000000000000004ad0120444d4150202820686f742c206e65747569642029202d2d3e20746f74616c5f616c7068615f736861726573207c2052657475726e7320746865206e756d626572206f6620616c7068612073686172657320666f72206120686f746b6579206f6e2061207375626e65742e14416c70686101010c0202067d0285024000000000000000000000000000000000002c546f6b656e53796d626f6c010104069c381410f09d9c8f00285375626e65744e616d65010104069c381410f09d9c8f002055736564576f726b0101040638182000000000000000001074203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d74203d3d3d3d20476c6f62616c20506172616d6574657273203d3d3d3d3d74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d88202d2d2d2053746f726167654974656d20476c6f62616c205573656420576f726b2e604d6178526567697374726174696f6e73506572426c6f636b010104069c9c08010004bc202d2d2d204954454d2820676c6f62616c5f6d61785f726567697374726174696f6e735f7065725f626c6f636b20292c5375626e65744c696d697401009c080c00049c202d2d2d204954454d28206d6178696d756d5f6e756d6265725f6f665f6e6574776f726b73202934546f74616c4e6574776f726b7301009c08000004b8202d2d2d204954454d2820746f74616c5f6e756d6265725f6f665f6578697374696e675f6e6574776f726b732029544e6574776f726b496d6d756e697479506572696f6401001820e0c40000000000000480204954454d28206e6574776f726b5f696d6d756e6974795f706572696f642029544e6574776f726b4c617374526567697374657265640100182000000000000000000498204954454d28206e6574776f726b5f6c6173745f726567697374657265645f626c6f636b2029544e6574776f726b4d696e416c6c6f7765645569647301009c0880000484204954454d28206e6574776f726b5f6d696e5f616c6c6f7765645f756964732029484e6574776f726b4d696e4c6f636b436f7374010018200010a5d4e80000000478204954454d28206d696e5f6e6574776f726b5f6c6f636b5f636f737420294c4e6574776f726b4c6173744c6f636b436f7374010018200010a5d4e8000000047c204954454d28206c6173745f6e6574776f726b5f6c6f636b5f636f73742029704e6574776f726b4c6f636b526564756374696f6e496e74657276616c01001820c08901000000000004a0204954454d28206e6574776f726b5f6c6f636b5f726564756374696f6e5f696e74657276616c2029385375626e65744f776e657243757401009c08142e0464204954454d28207375626e65745f6f776e65725f6375742029404e6574776f726b526174654c696d6974010018200000000000000000046c204954454d28206e6574776f726b5f726174655f6c696d69742029644e6f6d696e61746f724d696e52657175697265645374616b6501001820000000000000000000305375626e65744c6f636b6564010104069c182000000000000000000c74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d60203d3d3d3d205375626e6574204c6f636b73203d3d3d3d3d74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d344c6172676573744c6f636b6564010104069c18200000000000000000002041766754656d706f01009c080a000c48203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d48203d3d3d3d2054656d706f73203d3d3d3d3d48203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d204d617854656d706f01009c081e00001454656d706f010104069c9c080a00003c5375626e65744d656368616e69736d010104069c9c0800000c74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d74203d3d3d3d205375626e657420506172616d6574657273203d3d3d3d3d74203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d2c5375626e6574776f726b4e010104069c9c080000041501202d2d2d204d41502028206e65747569642029202d2d3e207375626e6574776f726b5f6e20284e756d626572206f66205549447320696e20746865206e6574776f726b292e3c4e6574776f726b4d6f64616c697479010104069c9c08000004fc202d2d2d204d41502028206e65747569642029202d2d3e206d6f64616c697479202020544558543a20302c20494d4147453a20312c2054454e534f523a2032344e6574776f726b734164646564010104069c24040004a0202d2d2d204d41502028206e65747569642029202d2d3e206e6574776f726b5f69735f61646465643c49734e6574776f726b4d656d626572010108020671022404000494202d2d2d20444d4150202820686f746b65792c206e65747569642029202d2d3e20626f6f6c684e6574776f726b526567697374726174696f6e416c6c6f776564010104069c24040004d0202d2d2d204d41502028206e65747569642029202d2d3e206e6574776f726b5f726567697374726174696f6e5f616c6c6f776564744e6574776f726b506f77526567697374726174696f6e416c6c6f776564010104069c24040004ac202d2d2d204d41502028206e65747569642029202d2d3e206e6574776f726b5f706f775f616c6c6f7765644c4e6574776f726b526567697374657265644174010104069c182000000000000000000494202d2d2d204d41502028206e65747569642029202d2d3e20626c6f636b5f6372656174656438456d697373696f6e56616c756573010104069c18200000000000000000049c202d2d2d204d41502028206e65747569642029202d2d3e20656d697373696f6e5f76616c7565733c50656e64696e67456d697373696f6e010104069c1820000000000000000004a0202d2d2d204d41502028206e65747569642029202d2d3e2070656e64696e675f656d697373696f6e3c50656e64696e67526f6f7444697673010104069c1820000000000000000004b4202d2d2d204d41502028206e65747569642029202d2d3e2070656e64696e675f726f6f745f656d697373696f6e4c50656e64696e67416c70686153776170706564010104069c1820000000000000000004b4202d2d2d204d41502028206e65747569642029202d2d3e2070656e64696e675f616c7068615f737761707065643c50656e64696e674f776e6572437574010104069c1820000000000000000004a4202d2d2d204d41502028206e65747569642029202d2d3e2070656e64696e675f6f776e65725f6375744c426c6f636b7353696e63654c61737453746570010104069c1820000000000000000004b8202d2d2d204d41502028206e65747569642029202d2d3e20626c6f636b735f73696e63655f6c6173745f73746570584c6173744d656368616e73696d53746570426c6f636b010104069c1820000000000000000004c4202d2d2d204d41502028206e65747569642029202d2d3e206c6173745f6d656368616e69736d5f737465705f626c6f636b2c5375626e65744f776e6572010104069c008000000000000000000000000000000000000000000000000000000000000000000490202d2d2d204d41502028206e65747569642029202d2d3e207375626e65745f6f776e6572445375626e65744f776e6572486f746b6579010104069c0080000000000000000000000000000000000000000000000000000000000000000004ac202d2d2d204d41502028206e65747569642029202d2d3e207375626e65745f6f776e65725f686f746b65794053657276696e67526174654c696d6974010104069c1820320000000000000004a8202d2d2d204d41502028206e65747569642029202d2d3e2073657276696e675f726174655f6c696d69740c52686f010104069c9c080a00046c202d2d2d204d41502028206e65747569642029202d2d3e2052686f144b61707061010104069c9c08ff7f0474202d2d2d204d41502028206e65747569642029202d2d3e204b61707061644e6575726f6e73546f5072756e6541744e65787445706f6368010104069c9c080000042901202d2d2d204d41502028206e65747569642029202d2d3e207569642c2077652075736520746f207265636f7264207569647320746f207072756e65206174206e6578742065706f63682e64526567697374726174696f6e7354686973496e74657276616c010104069c9c08000004cc202d2d2d204d41502028206e65747569642029202d2d3e20726567697374726174696f6e735f746869735f696e74657276616c70504f57526567697374726174696f6e7354686973496e74657276616c010104069c9c08000004dc202d2d2d204d41502028206e65747569642029202d2d3e20706f775f726567697374726174696f6e735f746869735f696e74657276616c744275726e526567697374726174696f6e7354686973496e74657276616c010104069c9c08000004e0202d2d2d204d41502028206e65747569642029202d2d3e206275726e5f726567697374726174696f6e735f746869735f696e74657276616c384d6178416c6c6f77656455696473010104069c9c08001004a0202d2d2d204d41502028206e65747569642029202d2d3e206d61785f616c6c6f7765645f7569647338496d6d756e697479506572696f64010104069c9c080010049c202d2d2d204d41502028206e65747569642029202d2d3e20696d6d756e6974795f706572696f643841637469766974794375746f6666010104069c9c088813049c202d2d2d204d41502028206e65747569642029202d2d3e2061637469766974795f6375746f66663c4d6178576569676874734c696d6974010104069c9c08e80304a0202d2d2d204d41502028206e65747569642029202d2d3e206d61785f7765696768745f6c696d6974445765696768747356657273696f6e4b6579010104069c1820000000000000000004ac202d2d2d204d41502028206e65747569642029202d2d3e20776569676874735f76657273696f6e5f6b6579444d696e416c6c6f77656457656967687473010104069c9c08000404ac202d2d2d204d41502028206e65747569642029202d2d3e206d696e5f616c6c6f7765645f77656967687473504d6178416c6c6f77656456616c696461746f7273010104069c9c08800004b8202d2d2d204d41502028206e65747569642029202d2d3e206d61785f616c6c6f7765645f76616c696461746f72734841646a7573746d656e74496e74657276616c010104069c9c08640004ac202d2d2d204d41502028206e65747569642029202d2d3e2061646a7573746d656e745f696e74657276616c48426f6e64734d6f76696e6741766572616765010104069c1820a0bb0d000000000004b0202d2d2d204d41502028206e65747569642029202d2d3e20626f6e64735f6d6f76696e675f6176657261676530426f6e647350656e616c7479010104069c9c0800000494202d2d2d204d41502028206e65747569642029202d2d3e20626f6e64735f70656e616c74794c57656967687473536574526174654c696d6974010104069c1820640000000000000004b8202d2d2d204d41502028206e65747569642029202d2d3e20776569676874735f7365745f726174655f6c696d69744456616c696461746f725072756e654c656e010104069c1820010000000000000004ac202d2d2d204d41502028206e65747569642029202d2d3e2076616c696461746f725f7072756e655f6c656e3c5363616c696e674c6177506f776572010104069c9c08320004a4202d2d2d204d41502028206e65747569642029202d2d3e207363616c696e675f6c61775f706f77657278546172676574526567697374726174696f6e73506572496e74657276616c010104069c9c08020004e8202d2d2d204d41502028206e65747569642029202d2d3e207461726765745f726567697374726174696f6e735f746869735f696e74657276616c3c41646a7573746d656e74416c706861010104069c1820000000000000000004a0202d2d2d204d41502028206e65747569642029202d2d3e2061646a7573746d656e745f616c70686168436f6d6d697452657665616c57656967687473456e61626c6564010104069c24040004f0202d2d2d204d41502028206e65747569642029202d2d3e20636f6d6d69742072657665616c20763220776569676874732061726520656e61626c6564104275726e010104069c182000ca9a3b000000000470202d2d2d204d41502028206e65747569642029202d2d3e204275726e28446966666963756c7479010104069c182080969800000000000488202d2d2d204d41502028206e65747569642029202d2d3e20446966666963756c74791c4d696e4275726e010104069c182000ca9a3b00000000047c202d2d2d204d41502028206e65747569642029202d2d3e204d696e4275726e1c4d61784275726e010104069c182000e8764817000000047c202d2d2d204d41502028206e65747569642029202d2d3e204d61784275726e344d696e446966666963756c7479010104069c182080969800000000000494202d2d2d204d41502028206e65747569642029202d2d3e204d696e446966666963756c7479344d6178446966666963756c7479010104069c1820ffffffffffffff3f0494202d2d2d204d41502028206e65747569642029202d2d3e204d6178446966666963756c74794c4c61737441646a7573746d656e74426c6f636b010104069c1820000000000000000004c8202d2d2d204d41502028206e65747569642029202d2d3e2020426c6f636b206174206c6173742061646a7573746d656e742e58526567697374726174696f6e7354686973426c6f636b010104069c9c08000004d0202d2d2d204d41502028206e65747569642029202d2d3e20526567697374726174696f6e73206f66207468697320426c6f636b2e6852414f52656379636c6564466f72526567697374726174696f6e010104069c1820000000000000000004f0202d2d2d204d41502028206e65747569642029202d2d3e20676c6f62616c5f52414f5f72656379636c65645f666f725f726567697374726174696f6e2c5478526174654c696d697401001820e803000000000000046c202d2d2d204954454d20282074785f726174655f6c696d697420295c547844656c656761746554616b65526174654c696d697401001820c04b03000000000004a4202d2d2d204954454d20282074785f64656c65676174655f74616b655f726174655f6c696d697420295c54784368696c646b657954616b65526174654c696d697401001820050000000000000004a4202d2d2d204954454d20282074785f6368696c646b65795f74616b655f726174655f6c696d69742029344c6971756964416c7068614f6e010104029c24040004f8202d2d2d204d41502028206e65747569642029202d2d3e2057686574686572206f72206e6f74204c697175696420416c70686120697320656e61626c65642c416c70686156616c756573010104069cb1021033b366e604b020204d41502028206e65747569642029202d2d3e2028616c7068615f6c6f772c20616c7068615f68696768293c4e6574776f726b4d61785374616b65010104069c1820ffffffffffffffff04c8204d41502028206e65747569642029202d2d3e206d6178207374616b6520616c6c6f776564206f6e2061207375626e65742e2c5374616b65576569676874010104069cb50204000ca0203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3da0203d3d3d3d205375626e6574776f726b20436f6e73656e7375732053746f7261676520203d3d3d3da0203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d1055696473000108060275029c04000490202d2d2d20444d41502028206e65747569642c20686f746b65792029202d2d3e20756964104b6579730101080606b102008000000000000000000000000000000000000000000000000000000000000000000490202d2d2d20444d41502028206e65747569642c207569642029202d2d3e20686f746b6579384c6f61646564456d697373696f6e000104069cb902040004a0202d2d2d204d41502028206e65747569642029202d2d3e2028686f746b65792c2073652c2076652918416374697665010104069cc10204000478202d2d2d204d41502028206e65747569642029202d2d3e206163746976651052616e6b010104069cb50204000470202d2d2d204d41502028206e65747569642029202d2d3e2072616e6b145472757374010104069cb50204000474202d2d2d204d41502028206e65747569642029202d2d3e20747275737424436f6e73656e737573010104069cb50204000484202d2d2d204d41502028206e65747569642029202d2d3e20636f6e73656e73757324496e63656e74697665010104069cb50204000484202d2d2d204d41502028206e65747569642029202d2d3e20696e63656e74697665244469766964656e6473010104069cb50204000484202d2d2d204d41502028206e65747569642029202d2d3e206469766964656e647320456d697373696f6e010104069c510104000480202d2d2d204d41502028206e65747569642029202d2d3e20656d697373696f6e284c617374557064617465010104069c51010400048c202d2d2d204d41502028206e65747569642029202d2d3e206c6173745f7570646174653856616c696461746f725472757374010104069cb5020400049c202d2d2d204d41502028206e65747569642029202d2d3e2076616c696461746f725f7472757374345072756e696e6753636f726573010104069cb50204000498202d2d2d204d41502028206e65747569642029202d2d3e207072756e696e675f73636f7265733c56616c696461746f725065726d6974010104069cc102040004a0202d2d2d204d41502028206e65747569642029202d2d3e2076616c696461746f725f7065726d69741c576569676874730101080606b102c50204000494202d2d2d20444d41502028206e65747569642c207569642029202d2d3e207765696768747314426f6e64730101080606b102c5020400048c202d2d2d20444d41502028206e65747569642c207569642029202d2d3e20626f6e64734c426c6f636b4174526567697374726174696f6e0101080606b1021820000000000000000004cc202d2d2d20444d41502028206e65747569642c207569642029202d2d3e20626c6f636b5f61745f726567697374726174696f6e1441786f6e7300010806027502c902040004a4202d2d2d204d41502028206e65747569642c20686f746b65792029202d2d3e2061786f6e5f696e666f484e6575726f6e43657274696669636174657300010806027502cd02040004ac202d2d2d204d41502028206e65747569642c20686f746b65792029202d2d3e2063657274696669636174652850726f6d65746865757300010806027502d502040004bc202d2d2d204d41502028206e65747569642c20686f746b65792029202d2d3e2070726f6d6574686575735f696e666f284964656e7469746965730001040200d902040000405375626e65744964656e746974696573000104029cdd020400005c5472616e73616374696f6e4b65794c617374426c6f636b01010c020606e102182000000000000000000c88203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d88203d3d3d3d2041786f6e202f2050726f6d6f20456e64706f696e7473203d3d3d3d3d88203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d2c4c6173745478426c6f636b010104060018200000000000000000047c202d2d2d204d41502028206b65792029202d2d3e206c6173745f626c6f636b5c4c6173745478426c6f636b4368696c644b657954616b6501010406001820000000000000000004c0202d2d2d204d41502028206b65792029202d2d3e206c6173745f74785f626c6f636b5f6368696c646b65795f74616b655c4c6173745478426c6f636b44656c656761746554616b6501010406001820000000000000000004c0202d2d2d204d41502028206b65792029202d2d3e206c6173745f74785f626c6f636b5f64656c65676174655f74616b65385374616b655468726573686f6c640100182000000000000000000468204954454d2820776569676874735f6d696e5f7374616b65202934576569676874436f6d6d69747300010805057502e5020400047902202d2d2d204d415020286e65747569642c2077686f29202d2d3e2056656344657175653c28686173682c20636f6d6d69745f626c6f636b2c2066697273745f72657665616c5f626c6f636b2c206c6173745f72657665616c5f626c6f636b293e207c2053746f7265732061207175657565206f6620636f6d6d69747320666f7220616e206163636f756e74206f6e206120676976656e206e65747569642e4443525633576569676874436f6d6d6974730101080505ed02f1020400048102202d2d2d204d415020286e65747569642c20636f6d6d69745f65706f636829202d2d3e2056656344657175653c2877686f2c2073657269616c697a65645f636f6d707265737365645f636f6d6d69742c2072657665616c5f726f756e64293e207c2053746f7265732061207175657565206f6620763320636f6d6d69747320666f7220616e206163636f756e74206f6e206120676976656e206e65747569642e4852657665616c506572696f6445706f636873010104059c18200100000000000000042101202d2d2d204d617020286e657475696429202d2d3e204e756d626572206f662065706f63687320616c6c6f77656420666f7220636f6d6d69742072657665616c20706572696f64733c4861734d6967726174696f6e52756e01010406382404000c4c203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4c203d3d3d3d2047656e65736973203d3d3d3d3d4c203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d01fd020198d43c496e697469616c49737375616e6365182000000000000000001088203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d88203d3d3d3d20496e697469616c2056616c756520436f6e7374616e7473203d3d3d3d88203d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d6c20496e697469616c2063757272656e63792069737375616e63652e60496e697469616c4d696e416c6c6f776564576569676874739c080004049420496e697469616c206d696e20616c6c6f77656420776569676874732073657474696e672e50496e697469616c456d697373696f6e56616c75659c080000046020496e697469616c20456d697373696f6e20526174696f2e58496e697469616c4d6178576569676874734c696d69749c08e803046820496e697469616c206d617820776569676874206c696d69742e30496e697469616c54656d706f9c080a0004602054656d706f20666f722065616368206e6574776f726b2e44496e697469616c446966666963756c747918208096980000000000045020496e697469616c20446966666963756c74792e50496e697469616c4d6178446966666963756c74791820ffffffffffffff3f046020496e697469616c204d617820446966666963756c74792e50496e697469616c4d696e446966666963756c747918208096980000000000046020496e697469616c204d696e20446966666963756c74792e84496e697469616c52414f52656379636c6564466f72526567697374726174696f6e18200000000000000000045820496e697469616c2052414f2052656379636c65642e2c496e697469616c4275726e182000ca9a3b00000000043820496e697469616c204275726e2e38496e697469616c4d61784275726e182000e8764817000000044820496e697469616c204d6178204275726e2e38496e697469616c4d696e4275726e182000ca9a3b00000000044820496e697469616c204d696e204275726e2e64496e697469616c41646a7573746d656e74496e74657276616c9c086400047420496e697469616c2061646a7573746d656e7420696e74657276616c2e64496e697469616c426f6e64734d6f76696e67417665726167651820a0bb0d0000000000047820496e697469616c20626f6e6473206d6f76696e6720617665726167652e4c496e697469616c426f6e647350656e616c74799c080000045c20496e697469616c20626f6e64732070656e616c74792e94496e697469616c546172676574526567697374726174696f6e73506572496e74657276616c9c08020004ac20496e697469616c2074617267657420726567697374726174696f6e732070657220696e74657276616c2e28496e697469616c52686f9c080a0004382052686f20636f6e7374616e742e30496e697469616c4b617070619c08ff7f0440204b6170706120636f6e7374616e742e54496e697469616c4d6178416c6c6f776564556964739c0800100448204d61782055494420636f6e7374616e742e60496e697469616c56616c696461746f725072756e654c656e1820010000000000000004a820496e697469616c2076616c696461746f7220636f6e74657874207072756e696e67206c656e6774682e58496e697469616c5363616c696e674c6177506f7765729c083200046c20496e697469616c207363616c696e67206c617720706f7765722e54496e697469616c496d6d756e697479506572696f649c080010046820496d6d756e69747920506572696f6420436f6e7374616e742e54496e697469616c41637469766974794375746f66669c088813044c20416374697669747920636f6e7374616e742e7c496e697469616c4d6178526567697374726174696f6e73506572426c6f636b9c080100049420496e697469616c206d617820726567697374726174696f6e732070657220626c6f636b2e4c496e697469616c5072756e696e6753636f72659c08ffff049c20496e697469616c207072756e696e672073636f726520666f722065616368206e6575726f6e2e6c496e697469616c4d6178416c6c6f77656456616c696461746f72739c08800004c020496e697469616c206d6178696d756d20616c6c6f7765642076616c696461746f727320706572206e6574776f726b2e68496e697469616c44656661756c7444656c656761746554616b659c08142e048420496e697469616c2064656661756c742064656c65676174696f6e2074616b652e58496e697469616c4d696e44656c656761746554616b659c080000048420496e697469616c206d696e696d756d2064656c65676174696f6e2074616b652e68496e697469616c44656661756c744368696c644b657954616b659c080000047c20496e697469616c2064656661756c74206368696c646b65792074616b652e58496e697469616c4d696e4368696c644b657954616b659c080000047c20496e697469616c206d696e696d756d206368696c646b65792074616b652e58496e697469616c4d61784368696c644b657954616b659c08142e047c20496e697469616c206d6178696d756d206368696c646b65792074616b652e60496e697469616c5765696768747356657273696f6e4b657918200000000000000000047420496e697469616c20776569676874732076657273696f6e206b65792e5c496e697469616c53657276696e67526174654c696d697418203200000000000000047020496e697469616c2073657276696e672072617465206c696d69742e48496e697469616c5478526174654c696d69741820e803000000000000048020496e697469616c207472616e73616374696f6e2072617465206c696d69742e78496e697469616c547844656c656761746554616b65526174654c696d69741820c04b03000000000004b820496e697469616c2064656c65676174652074616b65207472616e73616374696f6e2072617465206c696d69742e78496e697469616c54784368696c644b657954616b65526174654c696d69741820050000000000000004b820496e697469616c206368696c646b65792074616b65207472616e73616374696f6e2072617465206c696d69742e90496e697469616c53656e61746552657175697265645374616b6550657263656e746167651820010000000000000004ec20496e697469616c2070657263656e74616765206f6620746f74616c207374616b6520726571756972656420746f206a6f696e2073656e6174652e58496e697469616c41646a7573746d656e74416c7068611820000000000000000004a820496e697469616c2061646a7573746d656e7420616c706861206f6e206275726e20616e6420706f772e70496e697469616c4e6574776f726b496d6d756e697479506572696f641820e0c4000000000000048020496e697469616c206e6574776f726b20696d6d756e69747920706572696f6470496e697469616c4e6574776f726b4d696e416c6c6f776564556964739c088000049420496e697469616c206d696e696d756d20616c6c6f776564206e6574776f726b205549447364496e697469616c4e6574776f726b4d696e4c6f636b436f737418200010a5d4e8000000048820496e697469616c206e6574776f726b206d696e696d756d206275726e20636f737454496e697469616c5375626e65744f776e65724375749c08142e047020496e697469616c206e6574776f726b207375626e6574206375742e8c496e697469616c4e6574776f726b4c6f636b526564756374696f6e496e74657276616c1820c089010000000000048420496e697469616c206c6f636b20726564756374696f6e20696e74657276616c2e48496e697469616c5375626e65744c696d69749c080c00047020496e697469616c206d617820616c6c6f776564207375626e6574735c496e697469616c4e6574776f726b526174654c696d69741820201c000000000000049020496e697469616c206e6574776f726b206372656174696f6e2072617465206c696d69742c4b657953776170436f7374182000e1f50500000000046c20436f7374206f66207377617070696e67206120686f746b65792e24416c706861486967689c0866e60401012054686520757070657220626f756e6420666f722074686520616c70686120706172616d657465722e205573656420666f72204c697175696420416c7068612e20416c7068614c6f779c0833b304010120546865206c6f77657220626f756e6420666f722074686520616c70686120706172616d657465722e205573656420666f72204c697175696420416c7068612e344c6971756964416c7068614f6e24040004bc204120666c616720746f20696e646963617465206966204c697175696420416c70686120697320656e61626c65642e58496e697469616c4e6574776f726b4d61785374616b651820ffffffffffffffff046c20496e697469616c206e6574776f726b206d6178207374616b652e88496e697469616c436f6c646b6579537761705363686564756c654475726174696f6e1010a08c0000048020436f6c646b65792073776170207363686564756c65206475617274696f6e2e98496e697469616c446973736f6c76654e6574776f726b5363686564756c654475726174696f6e1010a08c0000048c20446973736f6c7665206e6574776f726b207363686564756c65206475726174696f6e40496e697469616c54616f5765696768741820d9cef753e3a59b04045020496e697469616c2054414f207765696768742e010106072c547269756d766972617465012c547269756d766972617465182450726f706f73616c7301000506040004902054686520686173686573206f6620746865206163746976652070726f706f73616c732e2850726f706f73616c4f6600010406341503040004cc2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e18566f74696e6700010406340906040004b420566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e3450726f706f73616c436f756e74010010100000000004482050726f706f73616c7320736f206661722e1c4d656d6265727301005d020400043901205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e145072696d65000000040004650120546865207072696d65206d656d62657220746861742068656c70732064657465726d696e65207468652064656661756c7420766f7465206265686176696f7220696e2063617365206f6620616273656e746174696f6e732e01190301c000010d060848547269756d7669726174654d656d626572730148547269756d7669726174654d656d62657273081c4d656d6265727301001106040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e011d0301c400011506093453656e6174654d656d62657273013453656e6174654d656d62657273081c4d656d6265727301001906040004c8205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e145072696d65000000040004a4205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e01210301c800011d060a1c5574696c6974790001250301cc044c626174636865645f63616c6c735f6c696d69741010aa2a000004a820546865206c696d6974206f6e20746865206e756d626572206f6620626174636865642063616c6c732e0121060b105375646f01105375646f040c4b6579000000040004842054686520604163636f756e74496460206f6620746865207375646f206b65792e013d0301d0000125060c204d756c746973696701204d756c746973696704244d756c746973696773000108050229062d06040004942054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e01410301d40c2c4465706f7369744261736518200029de070000000018590120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e672061206d756c746973696720657865637574696f6e206f7220746f842073746f726520612064697370617463682063616c6c20666f72206c617465722e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069733101206034202b2073697a656f662828426c6f636b4e756d6265722c2042616c616e63652c204163636f756e74496429296020627974657320616e642077686f7365206b65792073697a652069738020603332202b2073697a656f66284163636f756e74496429602062797465732e344465706f736974466163746f7218200048e801000000000c55012054686520616d6f756e74206f662063757272656e6379206e65656465642070657220756e6974207468726573686f6c64207768656e206372656174696e672061206d756c746973696720657865637574696f6e2e00250120546869732069732068656c6420666f7220616464696e67203332206279746573206d6f726520696e746f2061207072652d6578697374696e672073746f726167652076616c75652e384d61785369676e61746f7269657310106400000004ec20546865206d6178696d756d20616d6f756e74206f66207369676e61746f7269657320616c6c6f77656420696e20746865206d756c74697369672e0135060d20507265696d6167650120507265696d6167650c24537461747573466f72000104063439060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e4052657175657374537461747573466f72000104063445060400049020546865207265717565737420737461747573206f66206120676976656e20686173682e2c507265696d616765466f72000104065506590604000001490301dc00015d060e245363686564756c657201245363686564756c6572103c496e636f6d706c65746553696e6365000010040000184167656e6461010104051061060400044d01204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e1c5265747269657300010402e47d06040004210120526574727920636f6e66696775726174696f6e7320666f72206974656d7320746f2062652065786563757465642c20696e6465786564206279207461736b20616464726573732e184c6f6f6b75700001040504e4040010f8204c6f6f6b75702066726f6d2061206e616d6520746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e00590120466f72207633202d3e207634207468652070726576696f75736c7920756e626f756e646564206964656e7469746965732061726520426c616b65322d3235362068617368656420746f20666f726d2074686520763430206964656e7469746965732e014d0301e008344d6178696d756d5765696768742c400b0000dd0ee90213cccccccccccccccc04290120546865206d6178696d756d207765696768742074686174206d6179206265207363686564756c65642070657220626c6f636b20666f7220616e7920646973706174636861626c65732e504d61785363686564756c6564506572426c6f636b101032000000141d0120546865206d6178696d756d206e756d626572206f66207363686564756c65642063616c6c7320696e2074686520717565756520666f7220612073696e676c6520626c6f636b2e0018204e4f54453a5101202b20446570656e64656e742070616c6c657473272062656e63686d61726b73206d696768742072657175697265206120686967686572206c696d697420666f72207468652073657474696e672e205365742061c420686967686572206c696d697420756e646572206072756e74696d652d62656e63686d61726b736020666561747572652e0181060f1450726f7879011450726f7879081c50726f7869657301010405008506240000000000000000000845012054686520736574206f66206163636f756e742070726f786965732e204d61707320746865206163636f756e74207768696368206861732064656c65676174656420746f20746865206163636f756e7473210120776869636820617265206265696e672064656c65676174656420746f2c20746f67657468657220776974682074686520616d6f756e742068656c64206f6e206465706f7369742e34416e6e6f756e63656d656e7473010104050095062400000000000000000004ac2054686520616e6e6f756e63656d656e7473206d616465206279207468652070726f787920286b6579292e01550301ec184050726f78794465706f736974426173651820008793030000000010110120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720612070726f78792e00010120546869732069732068656c6420666f7220616e206164646974696f6e616c2073746f72616765206974656d2077686f73652076616c75652073697a652069732501206073697a656f662842616c616e6365296020627974657320616e642077686f7365206b65792073697a65206973206073697a656f66284163636f756e74496429602062797465732e4850726f78794465706f736974466163746f721820408af7010000000014bc2054686520616d6f756e74206f662063757272656e6379206e6565646564207065722070726f78792061646465642e00350120546869732069732068656c6420666f7220616464696e6720333220627974657320706c757320616e20696e7374616e6365206f66206050726f78795479706560206d6f726520696e746f20616101207072652d6578697374696e672073746f726167652076616c75652e20546875732c207768656e20636f6e6669677572696e67206050726f78794465706f736974466163746f7260206f6e652073686f756c642074616b65f420696e746f206163636f756e7420603332202b2070726f78795f747970652e656e636f646528292e6c656e282960206279746573206f6620646174612e284d617850726f7869657310101400000004f020546865206d6178696d756d20616d6f756e74206f662070726f7869657320616c6c6f77656420666f7220612073696e676c65206163636f756e742e284d617850656e64696e6710104b00000004450120546865206d6178696d756d20616d6f756e74206f662074696d652d64656c6179656420616e6e6f756e63656d656e747320746861742061726520616c6c6f77656420746f2062652070656e64696e672e5c416e6e6f756e63656d656e744465706f736974426173651820005125020000000010310120546865206261736520616d6f756e74206f662063757272656e6379206e656564656420746f207265736572766520666f72206372656174696e6720616e20616e6e6f756e63656d656e742e00490120546869732069732068656c64207768656e2061206e65772073746f72616765206974656d20686f6c64696e672061206042616c616e636560206973206372656174656420287479706963616c6c7920313620206279746573292e64416e6e6f756e63656d656e744465706f736974466163746f72182000990d040000000010d42054686520616d6f756e74206f662063757272656e6379206e65656465642070657220616e6e6f756e63656d656e74206d6164652e00590120546869732069732068656c6420666f7220616464696e6720616e20604163636f756e744964602c2060486173686020616e642060426c6f636b4e756d6265726020287479706963616c6c79203638206279746573298c20696e746f2061207072652d6578697374696e672073746f726167652076616c75652e01a506102052656769737472790120526567697374727904284964656e746974794f660001040500a90604000464204964656e746974792064617461206279206163636f756e74015d0301f40c4c4d61784164646974696f6e616c4669656c6473101001000000085420436f6e66696775726174696f6e206669656c6473a8204d6178696d756d20757365722d636f6e66696775726564206164646974696f6e616c206669656c647338496e697469616c4465706f736974182000e1f5050000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f736974182000e1f50500000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e01ad06112c436f6d6d69746d656e7473012c436f6d6d69746d656e74730c24526174654c696d69740100101064000000047c205468652072617465206c696d697420666f7220636f6d6d69746d656e747330436f6d6d69746d656e744f6600010806057502b10604000464204964656e746974792064617461206279206163636f756e74384c617374436f6d6d69746d656e74000108060575021004000001690401f810244d61784669656c647310100100000004290120546865206d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c647320746861742063616e20626520616464656420746f206120636f6d6d69746d656e7438496e697469616c4465706f7369741820000000000000000004d42054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e74697479304669656c644465706f73697418200000000000000000042d012054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e4044656661756c74526174654c696d6974101064000000047c205468652072617465206c696d697420666f7220636f6d6d69746d656e747301b506122841646d696e5574696c7300017d0501fc0001b9061320536166654d6f64650120536166654d6f64650830456e7465726564556e74696c000010040014290120436f6e7461696e7320746865206c61737420626c6f636b206e756d62657220746861742074686520736166652d6d6f64652077696c6c2072656d61696e20656e746572656420696e2e00a4202053657420746f20604e6f6e6560207768656e20736166652d6d6f6465206973206578697465642e00510120536166652d6d6f6465206973206175746f6d61746963616c6c7920657869746564207768656e207468652063757272656e7420626c6f636b206e756d626572206578636565647320746869732076616c75652e204465706f736974730001080505bd0618040010350120486f6c64732074686520726573657276652074686174207761732074616b656e2066726f6d20616e206163636f756e74206174206120737065636966696320626c6f636b206e756d6265722e00750120546869732068656c707320676f7665726e616e636520746f206861766520616e206f76657276696577206f66206f75747374616e64696e67206465706f7369747320746861742073686f756c642062652072657475726e6564206f722420736c61736865642e0181050101011434456e7465724475726174696f6e10100000000004210120466f7220686f77206d616e7920626c6f636b732074686520736166652d6d6f64652077696c6c20626520656e7465726564206279205b6050616c6c65743a3a656e746572605d2e38457874656e644475726174696f6e1010000000000c4d0120466f7220686f77206d616e7920626c6f636b732074686520736166652d6d6f64652063616e20626520657874656e6465642062792065616368205b6050616c6c65743a3a657874656e64605d2063616c6c2e004d01205468697320646f6573206e6f7420696d706f736520612068617264206c696d69742061732074686520736166652d6d6f64652063616e20626520657874656e646564206d756c7469706c652074696d65732e48456e7465724465706f736974416d6f756e74c10604000c05012054686520616d6f756e7420746861742077696c6c2062652072657365727665642075706f6e2063616c6c696e67205b6050616c6c65743a3a656e746572605d2e00410120604e6f6e656020646973616c6c6f7773207065726d697373696f6e6c6573736c7920656e61626c696e672074686520736166652d6d6f646520616e6420697320612073616e652064656661756c742e4c457874656e644465706f736974416d6f756e74c10604000c09012054686520616d6f756e7420746861742077696c6c2062652072657365727665642075706f6e2063616c6c696e67205b6050616c6c65743a3a657874656e64605d2e00450120604e6f6e656020646973616c6c6f7773207065726d697373696f6e6c6573736c7920657874656e64696e672074686520736166652d6d6f646520616e6420697320612073616e652064656661756c742e3052656c6561736544656c6179d101040020490120546865206d696e696d616c206475726174696f6e2061206465706f7369742077696c6c2072656d61696e20726573657276656420616674657220736166652d6d6f646520697320656e7465726564206f72490120657874656e6465642c20756e6c657373205b6050616c6c65743a3a666f7263655f72656c656173655f6465706f736974605d206973207375636365737366756c6c792063616c6c656420736f6f6e65722e005901204576657279206465706f736974206973207469656420746f20612073706563696669632061637469766174696f6e206f7220657874656e73696f6e2c20746875732065616368206465706f7369742063616e206265e82072656c656173656420696e646570656e64656e746c79206166746572207468652064656c617920666f7220697420686173207061737365642e00450120604e6f6e656020646973616c6c6f7773207065726d697373696f6e6c6573736c792072656c656173696e672074686520736166652d6d6f6465206465706f7369747320616e6420697320612073616e65242064656661756c742e01c5061420457468657265756d0120457468657265756d141c50656e64696e670100c906040004d02043757272656e74206275696c64696e6720626c6f636b2773207472616e73616374696f6e7320616e642072656365697074732e3043757272656e74426c6f636b0000ed0604000470205468652063757272656e7420457468657265756d20626c6f636b2e3c43757272656e745265636569707473000001070400047c205468652063757272656e7420457468657265756d2072656365697074732e6843757272656e745472616e73616374696f6e53746174757365730000050704000488205468652063757272656e74207472616e73616374696f6e2073746174757365732e24426c6f636b48617368010104054101348000000000000000000000000000000000000000000000000000000000000000000001850501090100010907150c45564d010c45564d18304163636f756e74436f646573010104020d0138040000504163636f756e74436f6465734d65746164617461000104020d010d070400003c4163636f756e7453746f7261676573010108020211073480000000000000000000000000000000000000000000000000000000000000000000205375696369646564000104020d01a40400004c57686974656c697374656443726561746f72730100bd050400005444697361626c6557686974656c697374436865636b01002404000001ad0501350100011507162845564d436861696e4964012845564d436861696e4964041c436861696e49640100182000000000000000000448205468652045564d20636861696e2049442e00000000172844796e616d6963466565012844796e616d6963466565082c4d696e47617350726963650100410180000000000000000000000000000000000000000000000000000000000000000000445461726765744d696e47617350726963650000410104000001c105000000181c42617365466565011c42617365466565083442617365466565506572476173010041018000c817a8040000000000000000000000000000000000000000000000000000000028456c6173746963697479010049011048e801000001c505013d01000019144472616e6401144472616e641030426561636f6e436f6e6669670100f1053903810183cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a030000002721e6648052db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e97180f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e60626c732d756e636861696e65642d67312d7266633933383020717569636b6e6574047c20746865206472616e6420626561636f6e20636f6e66696775726174696f6e1850756c7365730001040218d90504000468206d617020726f756e64206e756d62657220746f2070756c73653c4c61737453746f726564526f756e6401001820000000000000000000384e657874556e7369676e656441740100101000000000140d0120446566696e65732074686520626c6f636b207768656e206e65787420756e7369676e6564207472616e73616374696f6e2077696c6c2062652061636365707465642e001d0120546f2070726576656e74207370616d206f6620756e7369676e65642028616e6420756e706169642129207472616e73616374696f6e73206f6e20746865206e6574776f726b2ca4207765206f6e6c7920616c6c6f77206f6e65207472616e73616374696f6e2070657220626c6f636b2e250120546869732073746f7261676520656e74727920646566696e6573207768656e206e6577207472616e73616374696f6e20697320676f696e6720746f2062652061636365707465642e01c905014d010840556e7369676e65645072696f726974791820000010000000000010f0204120636f6e66696775726174696f6e20666f722062617365207072696f72697479206f6620756e7369676e6564207472616e73616374696f6e732e0015012054686973206973206578706f73656420736f20746861742069742063616e2062652074756e656420666f7220706172746963756c61722072756e74696d652c207768656eb4206d756c7469706c652070616c6c6574732073656e6420756e7369676e6564207472616e73616374696f6e732e4048747470466574636854696d656f75741820e80300000000000008490120546865206d6178696d756d206e756d626572206f66206d696c6c697365636f6e6473207765206172652077696c6c696e6720746f207761697420666f72207468652048545450207265717565737420746f2820636f6d706c6574652e0119071a1d07042c48436865636b4e6f6e5a65726f53656e6465722507a440436865636b5370656356657273696f6e29071038436865636b547856657273696f6e2d071030436865636b47656e6573697331073438436865636b4d6f7274616c69747935073428436865636b4e6f6e63653d07a42c436865636b5765696768744107a4604368617267655472616e73616374696f6e5061796d656e744507a46053756274656e736f725369676e6564457874656e73696f6e4907a468436f6d6d69746d656e74735369676e6564457874656e73696f6e5107a444436865636b4d65746164617461486173685507e84d07" diff --git a/tests/helpers/registry b/tests/helpers/registry index cfce236fdb3011fe476aae599c10517b32b63129..dd70e716c26df10fc12f1fb6e0ef600a2bc86ba8 100644 GIT binary patch delta 23609 zcmeHvdstQ1weOm9t^GhDf`V*bx)4x6KtNDLP*6~b;1f(V64<~3c7(lgKNQj!;%(B_ z)7ZqW*cn@GV;l2mViRgSyS7aen|K=An#S`rJ+-GM@%GwN&y8tpj!jHrdVh1ywRwo9 zJ@=mPeD{y$Bku8=&oSp3W6m+>7;8QK{peQ@#7rbJ7se>PM$kR!^w7j*DWut4ml7oL zraeDns*6O2=9MT)DbJ?ttEA7+$@X7uGxdzFytu_jGx@dUm%jxWyRA(*vP4uMyPiYI5|TPwy}S zL66rR^!Tn{#Mh|@yFCHj-Rlc^gL*bvYOG$JQ;>a&;nBLfg8_5v^mt-3|2fr5>}GXZ z3vrkS)7BHGc{#0&M41KC8p#Cnv-o$S`Ri%xNVGY7`X&-%er|em)J@v`+YLQn1X=8> zG|i0CGsq+}U#}*yrcci&apnQglg&5v^<;`UH+>Bz>fZECB*A<$eFK?l&YRId63u&O z%#Nv8;`4R{))-!QPjG-U6zkHy(8kmBJ}dFy^aS&n895}$JTs$}B%9?KZjxf|&sa@T z&9^h!Nt(GPa{-xV{zGOJnQs0pvw`SlQq~HRZnkBuBs0wKWYv-k^FOl6NT!)Tvw~!q zcg!rCFjKo9>|+AE*qX=D-cM#`ky+-&nYXCf+RNtPhsmt*G)*-7XQh%HbMLJAB-cDO ztCq|*r)1}oJhM8xg5;ZbXWvE&%->|MA#=>xIV(w_xjkn&DKcNkxs?=~u3Qh9YyOYi zdQxKkB6kTXH7CzrNamTVX0Igk&9Ba`A!X*9vzKTKvt1$jbx!& zl%Hl^%v(w-K>aJJG-C?pl0{~9L8H1@`!&1tQ%vUJf^@TF&J(1{JUeGDo=;riwsevi z*zWFYY4-(!QpU8BU^gBW5_O(fedG&;1|dt#cZ%BZwAL2?;(ApYM^{;Drq2zL8k5bv zo79?9OZv$&^MR7=@0O-TO|B9G-spFG1D%H7FU35=bmhAe6sae}deao0L)M$;Q>G94 zyassb>3~pkL3Vq6V9~Ebjs>gkUhpeKy&!Lm+YcBt{DE>e$(9O%!HK$gqg7xeF`_M2 zVQ5Uq(=od2bZ<)}QR+rcp%}$_%u%1w!IeID@LKLS#5NF7YD81{oT9v?s~D4|pQDD< z>GO|_$znTSGN|{tJ^lh^^a$V09v)foUmeA`L73IG=|>hV`p3?}{Yr=`issy}CRVYqovc+Z**iXIpp!)R2HJL0qBSWbx+lAY zgEyF;gJWtQ99Q$;jk-LW|JZ--5 zL`LFKO7smzdj)puMG8sXZg}{%choHWzJ8?a$wDV3s(HuId>W%3`PNW}GiPjh*EV-g z$Ow#0j16F;I(nq=`^g%)a%AO?exfaoQ%MQ$CDIeR%9B-FdOU&Pb+WU0BLOS-$l8~_ ztU(ctU`x>LGynMGB-8fFv`^)I(<{|+Sni8XCz%hwKk3NPGha|g!CTJ0mnb%aRI}^y zw4`wxg0j3KpJ0J!LzE;Q`PSu2Q8Yo_dlz=rXaDk3kVo$#KPN;(^DeTGeLa!r;X5dq zm|zy3PM)B9It*{n6CAk8b|#X_n7oiz*e@-7=6MxueMc!Z2VY7ZUCN>1n-VWW}0rS8U#D>9_+Q?Q? zprmH#)&8zP`OkCpRv&vJfy}WztK&a*a0+(#reDOF%~xEu2YHhD%p2+EoHvu~HX`87 zZ?2r$y2=+^XLRA28Q92L%NNM3C*E9TKKEgwJx9XWw{B)PsWi#iT3#(v`roR+TDg6+ zwN;?Bf``Wbby!*JJ-wb_ZGXFAbnsSR;r-?7jop6VcCYT~)cG#Rt-o$hkR5!DCQhjt zHCLF|zHYai*~Y)mtT*`oGP4QUTEdpbR^CMJ??QBBJ!Y1OkE%gd{!7T0y;l<$uS{jiZ#SHn%ezuNQo_6CEz!H52OgPgN_ zFp$xYWgKIp+7acfX|NuG#bJR`1{+COxGjOn{J0iR>PO9wxwbHoD11F0{4bH34UHiZ zF{!cQ>3>ByMw!!%qwMKC-Pgwthgf6>^s&N{*T22n(_>)iG5T-<8ZlAj`U|U6tfZk{ ztn~qdxnCptpqK%7J8v;hNA>n@y*CsH;?SxGJY8N$ZX2w5toacsvuxScf^>3?I7M>A zGC1ZaAlv1wNa4rv)tdQaez+)j1uaP)Tdm4K=ITGY21WUT|3Lm2yFXG4aSX_H8DdSsg0eVCE<;IM+aEsa*`oJa>bAnk<-d2m`_E7 z=g4Y>mfMUTAKwEFz1QRQ^oDw6^X#UR#JQ3Sk{sVQE>b^ia1ZDPwnYec>w2zGjUy+> zR^8x*_;D~0YHv3Jfr4ytrWKDk_Pg zdMb6`KdDlY_JZAR%*%EN2A}7MCKUYgdRoEFitXLLz$jH}Gq|!_$JTf;_#|n&TEey)BV7rqk`|2`tYkAZT4`*SHyja*o+6BWp&74+bvp-sp!# zSrF03wt_gx>8Ip=GILNajA5Mp8&6do7K8 zMypoIQJMPGG@@&D!*KR=l1>^}!*sGkYf{ORvQVy0(zNE`LXYcc*rP?b$W13%WCvT5 zPIhWLZL;BJRy>1D*Y4x+wHe_2yE8~KIm}MYAb0V4>7<1{nL*OE6SfF{xtSzYJ86sb z`B)~ILX*_+4>C!QhI17AQZ88#Zp$IL1Skyjy$Li;WmP&&4zDRE|E$sUF(^xAf7EFr zTez4cksS8S3X&1-UrcUOd1G9x1_6RuGfqgi*JG zMiRr5R+0)bA%{Py1XaoBPb!Id>xqjLvCr3&B2vnZ)suB(0gG-RJ7|$=zBRk_mWKZ(JHWG@y5`}%Od=&8ZzAzdQX59jvlCFFw;NBWE^Ky_f7S4GeZ6E8S<7zP zN}8la`^f`jA#sP*2gy`I+^qM@#KnsDkZfYG+xC#6 z!CsZb*0_Uig~az5UGAO{9KGFW8$q#tk1sd^X9&_s#Q-(H|-iO}IbpcskJ;{l+X zBtn-5fhI|WP7eXaN`zjY1d5Xg-5v&-EK!-J4BZ4cMZyJ|a+H1DBq@W(kT_K&7Ng(i zff6M`zsG@G5~1G{KuHpz-;+Se5~1HyKq(TT-_t;;5~1JMfzl*Gw`YK+2{adTaF+8l zT|!L4Irb0xN%G)%B+ihD==TCphD7N1B2cD8==Ty(mPF|HGSEzk(C-zXSrVb&t3cTT zm7rguDN2q+=+*|5D-q@(Y7lU?gqVaFpgf7dOdL?YL|`TXs6ZkxlLRzJA~2H%R45Uc zNe3#D2+U*w6$?}fW^#b$N(5%|wLwKGkr3PQ5A<#T9vsS}2RZ57yn~=FkA~3TNXt6|KrkUBkLN*R^ zwZWgFIEB)vM34hK6<3!?BBas!fnwK~%dScX84oNUkDklpwi&s1pRql|!8< z$bFo|tv(v#YN5tpwm@^GP;U|>*9dizAh|lIv4Z5fpvDPuh?A2Ad6bh=1bK{;34-KW zpiUJeR{=FqkX-&%mms<)L=~icnWG>ojwjjA&t2u&<;$*HM zxj?J41sTW5JVA0%R`Ug!#K{6dav@gd2$D;%%5Tk`LVQ(zt?q>EqJOnm(D}T?TtRZF zRpCHJ2`;i~sUW$$s`CWNg;kv|NG_==yeufo#Z+A&NG_vlxgfcKstW}P=~UDTL2}7d zEBQj<6mqFzO$XV`lNSrp4U&3P#b6&jOlDD!##-mo6t;LDnLwQE=6%=>ds*K;(y+RW z-$e_bP!GSl)JV+;Xld*5wQmW;!UaCJ7z@W2)`vQL`KTaHB<;RlRN$7U&a3F6KC6C! zETg@mzj&7PRgy=xvSnW->2#~c_oJyHP3}hnwvqiPWEFqut7O{Wx1zsqMJ0dVivBZO zQQg;J%nU%|m&pAITi_0$r4nHa+zC`85w^hlfNCYes~N{ChOAW*$TVCE1|gG6BFNuX5{ftkZVt0e+6LqKZ; zDg!e|f!0a{W{v@^lL*W_542t)Fms$Q#f=hzn-j=vk_gP41lk}Gm^lS>i$q}NG|;UQ zftlBVHcA9$&H!x^XaSfx3v`=AVCEdqW{JSec@0}pvxMO00y1xx2+UjrYLN)cTmov9 z2+Ujta!Uket^l=31ZJ)RwMztM2rP#V#U<=#aAN~BEC_a@Y#4v1g~3n^vb!t@hT;Ib zEeMVh06i82OG$utSP(p=0dBD%m`Vriu^_n00_?RQ*vbL)ayYoXh#U6#z&@E>1ip#@ z`z#2yN&&Z85Ns^~^ji>YRRRVq2)3#LgBAo^wSXZDf~`8hZ59Mu4THejEeyWa0`^N- z47Qp82P_D-HUi#hL9o>f_!$d=EjQp@76e-c;0_CdEf3(`76eoCF%Sjx* zu;cIJWSt-naPnqBa_v)B3X-dyS`XnsVXk;;gCM!qsjCDz#L3lyJj%&6f;`5_wSs(} zlj{U|oRc_BqA{*wYNH^zeyL4@OVlnwat%?t1b|CkX$3w9zk+#PNG`;x6q*nx?-8j3AZZADi;exT zjHZM$50Q+d_*(<830t@kDFXRgcpx8(`!OdV(y78J#f@UiKq$JUaaG&q$dXHct~z^zzMt_HLsi)MK=C!Hv+-=Wc25cH_Dv znpAlafzaX(1-o(29rPH1dq_#Og$C+zFRPGDkJmD4**Pzn8s~xsr`_l{O-P5lWMSz( zGG$O%Sdm4l^}bMB526|PEsVd@-EQdI-_zQMt1JxH>b<;tjlkvQH{h$aKzV4r#j=k0 z1;H%Z6gKoIW($-i!o4jhFo@yk+dYVvXft%&+x7@ov9!7kZ-)+dvC(g|heR}}i2O8k zVXEt`!{ck!-JM{Y_tHe#LvSC#P8Wp=;MBooxrkcPd*PcwCxv;OBYEZD?j8)l=_6U; zoS^V^nOGspjA>e_BXv9y75)l2v#p4Hvx53~I~@kDwhRR5iC|Tax5LwpqXYMFz}GR{ z+#q*X;gk^xldU6x0dG5ED7?N<0RGJm9wP|H6WoyS!hwBXXJ-$faKVVC66<2(3U|j^A*13=CJ$4EACo zNnYdSmucN>;FJmjFkgUmFd zTWKAc2-o!adTR*TodXE7?>QFTqqG};#wn?Ohq}(ay}w$)6OGY&S>ulxUo#i97w|JoR>2;<&13k zM<0>d+F6^7BxJUaNvw9xMuI%9Fsi7eWDzbm&f12f|LD09I_JDibIIp~KtOWAMx3#$ z5Fml=Dt5iE*MKRGu5c-LfnE5R^d=49F5Tj0Jy#trd0aFvaz+-&(G@z{ecnz_*CqDW zRWdzh^q4M5e$zi88RRmn{e)Def$h8{h+cy~bA>z5t&r?4zc19+f|aZLEc?bMBsq6n z5v(6UcLzKLS8POYuxLfOJTfkFMfS81zWs&Q)>p2M8T45?ZqR2jBn%pH{^^e=-4rjP z3`C%01G&{~`PtO)Pya%`OsAJ20#$}3UM=W1%#tgBsG-B?>wuCt4jrZ4({ zFNxfFgH>?Y$=U7RhG;)gH4;~Vb+`|kq|e_gmv*W5EJmd%>ICOTc3h*$tX8Fdb)vIQ zAoFuSo5X&n(j6q4xi#8MV%Q5By_ej?YHakYWDnZ;sa=|Wq!76rfB0~2Wy>x`vka0z}R zmS&M$b^^I%HY0JghUBqjakK>$I9WFU%Pawp=Sps-Y=>672TVO4WZE04EDe)k!I$3snx$?peEm%_7`A>8`@XVLyMLrzE2L8&@P+(3 zHw!GMeL=-~5!f1GC!o}8FOF1;D3H`09uk91Ctvi*jW@|+K`S0k1Gf4muOFc^*#5(} zC(+GhdSSJA^~ZX2>ogf^GaN3!&P>C^+1T+MT4cU<=VTgXXERdhGc?A|;KWW2UreDc zmBfhxY_?AE-0j?beHfa;E6KDpnMTv?+`+7EA1P}1pY`T)vv78*b zxuQY#QfF7zj_Iahd^fx(x@i(MN@5i(WI1#xX%5?R>BAImU_LXIhTXc;wvXItBW={y zg$YadYStHa(xZa3x=sPp3hLZ^@^tlY8w%#JDS@3|4xZfuj{%$FP{!vKRAd zQG7o3R(bXatQLV=xS3(L0-A46P_-4fb}uWSIV8l|3ZPS4*&_us6NvL4HGsaUVOMtW z&O7K%JL~HuN#O_Q(A&wx`@~>(*~ud#2)|rR=TiEloq4~EB|5g0)?r>ZmC~8y zaCm1aT})ur9G^$;#`ILp$MhWKD8YPib5wZ8d<=~o3;&>uhRKBI1ru-yA7^)!(=2+z z4%;;){G)REA(?uT_j<~%;1BNgly$}~UnHpa zb-}jD?(ua6_?gkyd)7|kmv90m4EtIooi+UoZ*&1s&f1;25$qPFB1O1M_gp1Sh(3ox zDwiUsa-PvecqSKE-XfZgpH++K4E$_egyr=D`{E+HY57PeB$jtQh8yLgJ(_of_`XnY zyf|_2?%KC-^JkY$i6*XY*z$(|63bgmU0GK~W}mp=uECpCSM4NEn3tj)Y^zJmvzUGd zK{~D~`jrWn?Id~yfB*3^`(72DJ>v==AzHr5e=pe;;=nIv&c=UF+m$E>yZ>!$scF^p z8#KnjepF4%qT`Us&CU`f!4alQD5EsV5&l{YJw~Rd@w~irN0uYUk?$ySEO1mhsvWhC z2FF^5l8y$JVVk>u87-t)0@TnPD=}?3okjC4(6XG)phXtgznspTQ0gGjwSG5T#^IkY zr$ez=Y3{z2*3wF=&>Oc>omM-{p+{3$>PA|GEoIe4TIi?)LrR^42Q;w*8)>xK;BYec zeCXs08|ier$X?6xH&LBwo9MKOO%4*<;Ol^q*~C+;5GLZ?M01xlJ2Gn{FF+8t1Mlxx z&!X8uTr0$ELz;%)kqCGkq>Mj^;YxTG%?|ScY`5=iqThfHn77e}R9FbZwkj;#cwXF1 zFpIdEWFOy#&C_7@o9U|TPbtVfj2`~Lz*aB&@n#qZTUksq&1nufMz2y^9pl#7t*8dk z9pJTNl^rO)&Ip8h@CsNXc|@xvJ5j~CdW)t!f<6>H06*Lfvd&KSi&ofbN1LI^_p#qL zL)3S%zcfSC?~^$TZ>Qg5ueQ<*Hnj!g*v&dypoM$b{Vg=NXpckFmo)kfqru(h)K-#1 zMB6~hFzUT%UHn7$ITZXs(hecx0Q=^HF?8uHu{s-LjS@Jx~ZKDMXkB^zi6XPfH z1e(D_@*jHAq2LdUmz{DbrGSQdtIo429ke+2{Fr7gjBnv`Bprzz0JJ>~CIK8kRbkUSaW7oN>EUgm; z9$`^;K6Crz~rNAq#^^G-TlCZ$&$$Es!>*zxu@G%3nCnynb;D7Ipp z*RmDkWDQ+({WUBNj%6thEsmTuFOJ{PFJg(r7!$^nBje|sFQF)xG^U(we7UK7jYYvU z@T*0~ITM^oP9@#Rwsd2)%i@X7I3%%mdgx4cyc_#i5zF<^Q(3T+>Dp*ke63eP+X$5!E@zEhgwmA?(c%oyFpN>4EEYRZP}y9MeqG z_-2}TGgvIglyi?S=a%IVtLLNDWJUNHAN?nS<#O9ry17;{_}D#81%EPHXTQ?RlbW5% z)-f%I#l#PUUma_V@sfmOqt^g1;=H% z@Ydw@s;n5U(t3yS?ct)a*Qwx7vBMq6;Q>U4jggdt<0a*w zl$3))QZh67g%mEF`?@pvb(EmA%;6Wh_*z96lqYFP?2YBZbwi236CFO63%--*{H?>j zk)Tes3EP*YY^B+sE^Ct_GiQkfs}9mBgAqv>CnNtYq8Avvo_PNEiC#$KTO=Fs(|oqE zkFH>y0b0vm3(#~8C(V9V*+)|~9gYn4P9L4B!AI0DC|hhB-cw@E5b9kD(CI8K49maZ zAF+i`>Vu^>GeE1@f*>tr9|Un@_f&vpu}MK(Z9Nb~CkB@Nj5RW74ARc8F02#n*r&i= z48hd?Vu+Tp-XNXfNR_W=um@6Tf-~|0lt3G^Ep>pa?~s%9@x{tA0+x2WJ>EL&GH7)t zU%2Ak{XTEtuv5OjT@An&Y-G6jeaklEIFq|YDn;^wF&fVWDF z?~$4@izD7TN0~ga?uGhry=%m%*A&65qX>T$N-R(}$j|KXY~$nV7z|v$4}9CD9o8*a zzCnRZ++YU`y!&;7{P>_B@A6&0@mTm&x5%uxk(FN#u93a)5=|Jq0pEF2sl*FIHz<uX8cY1 z8F`a_n3q3Em7y`^kB(ngkIHrRC|_5nWp(?ux5#xnPg)4;gAj|cE9(leuzre=Px-re z3gbhH;Q#mHSydTP?-n@OgFgSjF(H)h|4 zD^Z;->ZN(?Ss!)f#S4uXyH4_zi(ma19b?m(?xktf@g07wfMav`8s-U%vNR&zL*;}J zaHnz-zqrK(JEzz^+vray_aWI5*zMctG=5Qh_jbCGUklIar;E*ZYzY+C!Jt?1>)^qD zn#-?)pX#TxX{p^jXpd)a_tO;GY&TDXP8*=9WG5>hpanRLdj@byJ~{k=b{u2mPIwSbu+lqe5ykCN_nl}q!NDH769+-uB0Ya6?V3p53TJ(e{vbuIr9I}H z`6=v^gS0s@v(fFt=dSSC52CpAGq1kC{&$DIrj@XvZ_;VuhrUVMX=;z2pP#SSHP$wO zSfnrS@wK^obos3iHt7(ZI;h=0QY4$lE4Xpn(b8c#NAT4Sy!x9{(ctlp_LmT4KcBg~ zMps3A!uV?L{-to$^KT(>Hw&*8UofV}Rl{AjTLnjTd2QY6bvd?Lm_0@(65RHD>v7tW zRJBIN1c-K48Uq1BoOT+b1MIDD(+-rXeM(#nJ@^zYU%k1S+vhdbW`wVH`Q;*J)p6WEtE^LX3bh&5r)yh2@@$4q>ecrr3pXV`q! zbGqwsu2>~K{>^%^~!zs#8@?3FzJGC4j=#hy4qqgO_l zXz_XZ#w9*w#XnI6rXrCVJXS>*62oPsMR9EvcE3rJX<-ka)0DIxy%PWF*krbF|JG9e zQ59VHid0!7{EKhWDmqwb9R|hCF;^AqIpU=q`G`08dhj&>d=|#Oe^h3s%*1EquFYwb zIYMCSypf5zw$!awsX;DRt3$yXm8-YZYXMH0#DEO2Z)j@06 z4c8Vb8P!;w_uAaDQMusy+HCgIr)c4_E+F|zX$7$-Iu%Dy_6cAOe5i2V^2|;6` z5CW8VyCSe{_=7xfJVqR%1@RVdQr552v69!wF9g<$`v3$+KxWF~W8Xcn{{bai&fF^8 zC5TzG(!*1qru*=!6ia^&J3_Qro+r0j!YhusdOh|vmi{cw8Z4=I`@7)N<0(eRwUe(` zZ|iC_di#8QC7qx|uMn+pH5mR+Ch4M-)P>6Hl+qjA{lg7SQ$CK?WNWx`2>u^-|99zw=@r(Z zybc!ySVi%S$Ecn5oU9mqggT4ITqe|86~z;>-tYdD$_18G$QQvQy{_grK}*Mpwf5*p zuTk=X2;qj|)FaeJl4|606;-7Gi*A*B82Jp2Zr=+d)C1$R$MDzdht2bF$8+>q%~iN$ z)HfhU=I0^aUs5#B6CtFC7!AiCqu=K5U%&7p`mp^d)s*N*_)3??`d*+D*?lk2&5jV= zuPNGt?BGlAB!Bz@P1f+GGK-J$7iqbAjB4!Cck$|z`66zPkE0Q-Uk>fn7ip|$RqK-p zS6`%)WI|9T%sx)zWx~BO;r8RyH6~&2wFy5z4w1e`mZm?3J#)XLpTWejML(v=vig3R z`r(i11h(_Xkwzbuso(oC%}~Lq#oq1oTHK}J%M5&Sw(mE&O6peSh=>D_p z)tBL`ITyb4GMxXYa-JRhC;9{RBE1xD`3dz9ay5MN722s5*4KFvXY1}6{YZr&v{|=u z^s&*r1wW^+JHog95)mWLFIYu{{pR`=y|bjsN*OleMvORZ&2Wp@e=LIyA8N3(y}zQ_ z)MjTd{EC+Gm%6X~iY`TLLwM1@U<^)tjNnCuz;bhW0w~VS<+x z0%LZ{8CaM}GBp|BCwN66Y4!<9YE#hDgKwWHBugbf*Xr5OGBSmoIRk?g*6vNep$nar zDtQgrcDD96G)v8~=d*#|z?D-SKJ**9fg(iate!sU-KXJxuUVw}S(V4@aD8ur*^a7og zz%OU5va354n1i+u9b#y58gu-C#zUB5Ik%p0#vjnUv#LfK#H{=REpi>TPgb(4J7DSZ zxq|fUu#t}y_~So&f!YaNWB>5)^aZjreDnWC)Dm1ZpM9Ht$9^2ckB(wrc$+Q^`!CWc z3SSO2w8nlb1s_K!6e-IM zuMzMB@*O3zM1#){+XWI>r}Ge{ux1b)s9D*dm}zcQ40c| z>y)Gh$D=i(S|rAhM<}j!{GpEB{66B}HnM&1(|KyMqnG{j`}Bym)uG+bUi|>G{*4bH z#3A;x59t3S1ME9j=ucI*V+Z@pht!0?PWp&0RChZ(tl=Yi$ApcJSlo5FcRLQS;~&v~ zB?rR?KBj*p>LJII;RimUx2Oo>_&1_l?m!JJZn!>T^byLeG;09>P&n?kbTLn zPGzSPRXsJ$sZ8z00=<9K*Cp3>E%gIWU)Jmv$AW7X# z)Lk|=Q&ZGj!~qths57v>tW8lf5m>h^MJ-6Hbt>6i@D#`}Kc`C`J@!ZA{IS1*9ZykH z5e@Z53g&ks`%8-I8qBWX#RHaq0av10q)s!K9LWm^M-umutr$rZX)W7|hwH$}RX>s~ z>mXl&2kh37^pV&}^PGt?xMxbfSXup*L=a=Y?XAHY30^HM4!pjdQ z4Kr}SVtRBd!YN}8umt!;1j z273Yx9h#Oz(ZR{(UrFoy{7CZ~X-mx?rKgf^zLnlXHgmz)HnN*9j$J|ylVwzr)2z;D zrU-Kv{*N>-Wh~}V`b*-4A5)UK*i}Q(rs-;>81t&Do<^8cGizz2xh1oRV$J6=Yk8dh zf@nKUiKd=aO{2`3tR@<5?#^1t=`DETg8gKp~Zwlp^ zuKYU6H`nABQGxk*{xq6kp3T3D3eBQ|CMq)TFPKNg=4%CWX`(r5!g4Ax*G=$Hsd;X~ zd@3`u3TM(J(VQo=Lx;ndXA>Ak8v=Tz-GdZ2ffP89p>myHbaL_mC9v=leq#iovYLBKl+=BaS^8P-pr$EwXdvc)3hMd zG~Jn$r1dJG?bEgb*kZKpitp339SXdVr0ujq_G$e9Y@fDUKK3vTKTVI;P{v*vlB4aH z52QX|?s`7OT=d+R=#WDH^;{+$Hj|$(V~3g8J%yEsZFAWuI)X?)4X7kzUwD{~0i~Kh ze4(}axK;ALecB0GnZe)IHbitxuoJ14#>x@oYiAR-Fwtj=r zfEBx^oKh)443yJ-dNQYDR_LP@ zeo@twrXR2k%6zDrMzgC-w3f4!&@0unSeGxrTT4};Sv6EZ@(qA}Cz4%bW^H{+Xx4ms zQ)kzQk{e9emQo3k*wseap%qK%E-p*C<3Y*_{dxs;vB9X$yQzthO&q_6G6qwKf80YR zQ3!dbvBAL52X2~1k;L(yt}xBU@t%^!!gflc2+`S2rM4JODD`AJjTQs#R84W>N;_?3 z5!`fbP7)7v&`gREKk1-th^aTI7VqQ{g9--)h<`Vz=O%%)QK9?S(95#EmflM{WsQ=> zLmu+n42-{*G8v_d{Q=4sZCzx$8S`)##XBiIgqW8ikzzp~<+4m}zP%(V)Za%x)bYBT z9-x)T_veSGWiX$}*+D-V9`?#`nkBpsQQxP+LY)s&mIHxbdJINUBnBR%6;vvscG1|u zl0%KV=>5^34%~8(-X{clz6tdz(5m+&iD$ow=Bo<5`%OwDsuBwhQ<50{EalO3G3{9@ zol(arcD6g<)+oNqSnKY(#iKVFt8cMbpT`@xMdOWbx2LO4JpU{uPo1t)&BFBojQ`W_ z3RYIT%1T->lEizu-D{0oS<(WVJORv7H$$}PT#bsZTCOia7uKqDN|HlS^9)U^g>mT4 zI$p=MI;nNZT@45!Eq1YcQ>m^sO50JSOxG5Ha78BRT8qr6NV%@nW9m@2Lf2Lx!mh|< zU26q#C^ALY+@kAWD7nu-Sfmy&1(fKT2Q12Bkk<_sZ7~Sk02X60NDP9Fuoy)4f{nBo zgl+|kwHTys2aB^9#O?qaWwA;TwU#U`N*j!B&|EQ&@rF1~w| zQu>D07K7YVU^y0p+|yvW7K7X~VB;(Xxo5$~TMTl~f#oSy4!P&S@+}6j z7r+WEhBmm^2Rgx`XoO2(g%*P{m%)lG24${*69>gD6}a;!7CCLDR@=FVg;{B zI8njt5|$`Xs>V&MRdqXw~Y08@2?uBMNKM%|h|7TIo1 zAB{5kq<_vC|C}?*|2b#;|I8V^$FS;HgswT$nn*BLwSdjC80M-KV6!cTxvCYc&SL1# zZm>CuO~G7cfX%fSW+o3Z0d8tA$(g;Li+yTTM&-2m+l zQ>aB)dGtuyx2aUFz-{1OE4mbVMS!jkQ>YaKx*<%VRvf4=Orcf+s6R}hRx)THOrcgf zXfRBnRwn4iFojyVec+qI9D3!0ZnkI{)G7k)4O6I93i^dGg<2J$_k}6cssh~-rci4- z=+-cWTD73}hbh#m1MLGHgB?g2^lAX#7LJBqjUwkb%~PF|*QzPB1r5k&D!4+zSqipF zI9oxtgmnrU63$W3BjH>HyCuXf2~+b12^$m)N_eM&y%Nq-aI1v#VH`-jUE)RscSyKE z!JQH=RIp#dCIxp(xJbc05-wJ7uY}n4p|JfDHY<2Q!WIP&Nw`$O!xAo2@Q557_;Q5@ zBwV53F$q^HcwEA}6g(l}-3p$RuvNiR65gZWX$jjDl--A~Qt+&VZUxUtxLU#U61H0l zx(gC_sNjnd8VX*LaE*eOC0whZ>><2U!K)H_6uc(ky$W8JaGioTBZ-8#g}issg32nZX0x8w<-6vPL;z0!otfdx4;ALcS+y- zXZpRxqnBxN-)BY@x;Axs+B;nx1{@{bo*u)0fMhv6!S2;i-@C@Oy35+12MRCmDZi&F;z(x;C+@?^*_ z?tG7$``#^Ztr}jfRjwkJ^x^jyn{JjFcHk?Ivn&>`tXNCScGY!z0{&J)8Fd@s!JRs_ z{xgpUWRc4{jh@@vsM?D_bvWShyZpiScEj&q6YT2hwM4ie!sqk){0UOVY>$7vJJ8;# zf~HOtag4G=_8%!OwE92E6U}r(94LmnuKlkxomPYn{FO>auvVM7p(9DWud^(2i;*_g zi^nbp8zY{!u@r9DNR--H{0J?ruA!-{O1eRU2)pQD@iC+VODig>u=IGs&XUQnvLZ(d zc|?PgO%^BYEHbs*MorB=caPuQF8yLlJZsVFL7#!i(#mn&&dR9U!m}JKl{Sbr2P?q? zx>Qlnih#IUBeT)cG#lx*5i}`y~)_v zon*mV=MM2=LnQlzc8c{;Yz!U`N3nG37vGFx*FGH>dNZ0u(WgU2{0P<*yT?X3(q~s+ zI=N&99B6o-WxVp>Jei&Q9CWSQZuy}GbTRrv!r*fmc!|$FtH5>!?#}TQ{fK3~ag(iri zcs2pf_7!;O$88ia)1FTfPscL{0vC;8v*@^burSM$Xs;-W~%ZTkH~V zw}Dj~%7vrlq*$K7x|0{dKN=Q&%Mc*_lqL1U1eRmfr^M0j?OEelds-|^WEn9-YjN62 zyDO1p(;4w{BAcFm%tnPX(RDkFj(WGhQ=`1K=;!O(aIDsOOpF-AQu1$0;*tl%9q{*_ zwUMhaj5Y0yRlT#8kmts*G1Z^Ws+}8F>0|7+N*_a&Q0enFbNBPf(ebKRsw1w3P-YT) zj`cl>(O{m@yTBWmZAfQxz^Lu%kS${P5Vmkrj};H6S`iI7HN;5J;|*Y}>j>v^xqCX) z(BW5kUEu_Bp!9A+VRD?5#2R9Yo7E|4vv<@oPoNV6<)#MzO2g;XBJ~Hvdnqha{5gw~ zbuG%dLflAWDPnsn^YLhBgT-Rg*rPaX*q_E)X@vND8he07if!ras}w6z$Fg3WX19p@ zGEmHS#1}K^h~rXR`Hh z%Ks&kRq*dj_38QJU*hP6}KtcS*mx64?y z@aA9$$q--4VL@^Uxc|MBDK_M?c0EfL^0#p;U(h%l3S{daTkNHa6e+q8uIK1+Dn)@< zmBSq3wQ+28@^aN?i}8x)doZTgZEiOV*qN3qJ|4#=rLSt~QB(8n3C8KKtMXZ}M`VwO zVUHK}G^%K|*suVw; zz~E_{U=twCH%-p>@3x}f^{z}akw~k^L zZQ_MV?Az>;EresmGESFOoLE)OMzbq693!TgDF>s)CsR<}t3%?h4Uc2jZKAh|b+a2b z@rNqb6-n?m>rPA|HgV5X_AML*+N)U}9=oQ%5Mn}sYIcu~^S=Le2V0CzG_D3yMY3?$ zusLN3R@Njf**IqteCs8diZWGP0H>>A7~AFE-R-rkPO-iTPq}Et|(P z?eSvw9F|~SNOp*`wQR<;TuV%*UCSRP2l+oe0m!6~Q>1c~$7-dr7Nyqxf{M^%Gue|2 zMj*qcPq&BNm-bukON0%XU}|qKzt$?hRytHT*qI3>wo6qTS@!|uNE!NLrQSmm+i^Gz`p(7rf!;0)zm|hQK`QaRv4=?Qd zb6{f)qF^ribmOhsL@a_PY`R@*5nr3jI%vf!^=vamwW^A{?MXOXleJ7R!nO1asih%K zH?YS>dt?cQUF%kPHXsicK{8J;oTqn4o}d`GlieTDEAs^H+SX9zJl4S2cDq=37=!6o z8(9My_T5G{j_t7H1T-ZyZUHoAJMH4F0bD#-vyio;C0<*|#!`Ri@r*lxS1dX-W` z?nPLVMD9^);M8ufurI-Yv_Dk1ge9`X15)H6yM`aGb+~PZ?I-M5Tr6*4opeN;Y(Y}> zh_}afdDr>}1TAGr(Z}o*k9Xt6PVR`vUCPGS49Ie-NIPbCx{N?47WCfk!6a}7*{Mby zqRyPZaA9NHl7^La*tH%<9xe^ashtpyF2xHuDPCF1GV%EJQY>UoioY+#YV@Q?SjJXn z+>%L_Dt7B~$$alxc;QcpFE3-Mce-s_G$nN!?heCu8Vy{pkVYkeTgz7e*;_47N#5>m z!{*!I7wuS%r-;KV*nW1&F6vjZ%IM38lgq_&?TS70=t?FSyJ`>RwzA`taZSb* zUbo+{lf&kSaKt$h9LbJ!N3J8^p_(Wl+c5ND9&N+a{;f7P9^CG;S3e7a8NA=sKSpr@En~tJpv+k8?zeSRXb8nHw-vCRj;3H!v4Zb~w$rlvMG} z4Oo<>i(hYGC5}u7mVTKIdEF!?Z87E%Pq$nQVzw;zv2weL&KEsCHY2LYL9vbA4n!Bp z0GId`{=Dwl|yq5zMu-ntrwJM3?}i{I;c{wUK=XdpMO6F$=LN z`(P7#qemoeW(9cEZe~eI-6&C$|FI1Y4L?}eA*$4ZV#8*(c(mc5l7^m6!-rj~x(=cB zieGNVtKTYkFKlMJn9$2|BX-FA`K0Z%q}|ucCYSUNtI%%8&>HQQLWfsrx6Jw`?GZ13 zffZNp9oBgJZ*RQ)C;^QpAMAib!w-sA9&%`hMEZR&?8BnrK4^4A`0r!6`2)j>JA8X_ zhppm{iIewX!+2aivPEzUYIs8I-@?lBPYf&JWli0RG5?g|{gy7RZElVdK@T^*M0!tLo2<)Dm&*H8;R`m*DS<0{5fhq$(ljf=k_1D%&;5IJFt zHYXNp2OeQ*V%~PlfDz(X`(R4H+RmOE6(QqeoEm<}f@>CW;@$h<4oHyUxO6P<9qUe; zvqVdmA(>7sQ5ik1(oi@?lGj?Of2`fcK4iMQY~}mM0!$ zA4Cpbm%PBl+Yhh_xEm;+xuR?b%P7rt4jrB{owp575HBm8FI6dWVptwjW#9j+79nUc zQeM0=zsSbtR}2$ab-TbSOJJ20lqWJC#)P$bH!kRX@(4RZH2sN3*xgZda}|D0eBWfL zv!_e-YMmN>*2Rr|TAd84aB2<11UB9-u+b9Os04-{>StTI=-q(^TKqJ;3DM%GJ6Pca zt658^WR|ykJ-k-aEMs3Gg|s>~{N%e_j0ZVXvQQOAuM#U}N=5Hu{Hk zWpCLx*lf8K__i%kL_EXt%|F=^7?%HGUMZLUvz}oEa_R4V1}`keZXUpD`=w`CDyy)Y zXMrz1!_sJl_~aQ@j4`Tx)esTRED`gk$qVNz(ykZy2 z53%uby|DcdTN_2c4qbkUeJ_<=Cvmr(r-?tl&LYImUT4js>H91NJIW1b*w|3>8P?9k z^S@$AW2QB_HxJ#-k+#nnU#y7{Z?ME9O~%gZ^mKLL(zD#_4aROmY@b%HR^f1hs>{%% zCAqZMzACRq;DGOQE^Nz0us-XrTTzT-T6uR0WDBo37 zG{d@C?%Lv-xY&S;Q+lCYf#CWs!<7dUni{@%Ug%N;tKIf>ZI(Mb^vWC3t=KDmc$T%L z#D`UOGDyEwFTI6?ah|pG-96v!4_NgdY~b0_>5X<^L)t;_hLY~}t~}}eaajs>A!i#X z+U1rHUwO=-wJg^1s=GEBE)@#rc>paE_8*P+OSgBQdZoqlhilL*UDfhEx#VRc{OMa< z4b63pmiS@vEU$L{@+PCF18(<@;RSuV7H@yL5`DLP?^|5>nB%6K->TQm*y0C1TR=-s zz#DAulunUP%Q|v1j7)`+w?%DihesYGi{B{>igFO>Z2cs%3)VSL~NxH%xVT zO3Nytvl8KQcfeyc(PwmfH$n@)6y}nqaI>wfw_PkU-(-n=JKG_qzKPXLuXyTBtZsY7 zdvCI-V#IlT7VzEkEIsu5e`inf>H6d91?S!J1hv6a)aElb1U){Z!#c5Ye6{ri@6WzQcBf_WTEfV{hB`yM~VPKOFVW*(w* zp(n1hH9S;wgZ-Oh`R0ZmPr&2u`kaa5*0iC&>Y=D6W5)*oL#nwHzIhq6JK5YSfeX8aWH}xu&Y*RB0j$OsYcgqky=_yz|)1V zKs3Tf2umXQopRyuR3xu5j+^mf^9a6%T0(D);5y+GlXpk*wS*ASMw|ZQ>9{aL? zaq&s)yj}d>#cS9FyU5SvD--ZRNd#$h(Vl>v>C#4cK9)AdizhRAne@QCp2?HgWxLq^ zEH>WGEM72jk4-AP!$uXzg#}h?7JmVPBeVHx2<*=0x%gVf%;ulaKR-V8aj-Yt9kpCvC*O6n8Yi1CuO0lhkj}Z%txjpoJ5&tRit&Z)XjT8AYPCG(B zFN3AV?{qi=o2wjo)=EmA^_BOB>dWzdA!z4h?x8)Q4<}1w-X8jR3U|RqLdjL!&G=!* zk4YkV-QC`oB*%gQAsOQsSu#4U2vR0a|fS8!c z)5UA`d_)>Htu;42V{L0ZU0BZQ(VGKslARSF)$>+{o$QhZeoC)(+;E7rJNb0<-IaIp ze&TLhm3VI+FMyjcVLryII8iyD{!5O L!Q0;Kc543{FuVp- diff --git a/tests/integration_tests/test_subtensor_integration.py b/tests/integration_tests/test_subtensor_integration.py index 14b561cdd1..6da0a831fd 100644 --- a/tests/integration_tests/test_subtensor_integration.py +++ b/tests/integration_tests/test_subtensor_integration.py @@ -30,12 +30,11 @@ async def prepare_test(mocker, seed): metadata_v15 = MetadataV15.decode_from_metadata_option(f.read()) registry = PortableRegistry.from_metadata_v15(metadata_v15) subtensor = Subtensor("unknown", _mock=True) + subtensor.substrate.metadata_v15 = metadata_v15 mocker.patch( "async_substrate_interface.sync_substrate.connect", mocker.Mock(return_value=FakeConnectContextManager(seed=seed)), ) - subtensor.substrate.metadata_v15 = metadata_v15 - # mocker.patch.object(subtensor.substrate, "metadata_v15", metadata_v15) mocker.patch.object(subtensor.substrate, "registry", registry) return subtensor @@ -48,7 +47,7 @@ async def test_get_all_subnets_info(mocker): assert result[0].owner_ss58 == "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM" assert result[1].kappa == 32767 assert result[1].max_weight_limit == 65535 - assert result[1].blocks_since_epoch == 230 + assert result[1].blocks_since_epoch == 94 @pytest.mark.asyncio @@ -107,7 +106,7 @@ async def test_is_hotkey_registered(mocker): async def test_blocks_since_last_update(mocker): subtensor = await prepare_test(mocker, "blocks_since_last_update") result = subtensor.blocks_since_last_update(1, 0) - assert result == 3221134 + assert result == 3264146 @pytest.mark.asyncio diff --git a/tests/unit_tests/test_async_subtensor.py b/tests/unit_tests/test_async_subtensor.py index b50c1444b5..a7917a78e4 100644 --- a/tests/unit_tests/test_async_subtensor.py +++ b/tests/unit_tests/test_async_subtensor.py @@ -404,16 +404,16 @@ async def test_get_delegates(subtensor, mocker, fake_result, response): autospec=subtensor.query_runtime_api, return_value=fake_result ) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_delegate_info_list_from_any = mocker.Mock() - async_subtensor.DelegateInfo.list_from_any = mocked_delegate_info_list_from_any + mocked_delegate_info_list_from_dicts = mocker.Mock() + async_subtensor.DelegateInfo.list_from_dicts = mocked_delegate_info_list_from_dicts # Call result = await subtensor.get_delegates(block_hash=None, reuse_block=False) # Asserts if fake_result: - assert result == mocked_delegate_info_list_from_any.return_value - mocked_delegate_info_list_from_any.assert_called_once_with(fake_result) + assert result == mocked_delegate_info_list_from_dicts.return_value + mocked_delegate_info_list_from_dicts.assert_called_once_with(fake_result) else: assert result == response @@ -441,8 +441,8 @@ async def test_get_stake_info_for_coldkey(subtensor, mocker, fake_result, respon ) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_stake_info_list_from_any = mocker.Mock() - async_subtensor.StakeInfo.list_from_any = mocked_stake_info_list_from_any + mocked_stake_info_list_from_dicts = mocker.Mock() + async_subtensor.StakeInfo.list_from_dicts = mocked_stake_info_list_from_dicts # Call result = await subtensor.get_stake_info_for_coldkey( @@ -451,8 +451,8 @@ async def test_get_stake_info_for_coldkey(subtensor, mocker, fake_result, respon # Asserts if fake_result: - assert result == mocked_stake_info_list_from_any.return_value - mocked_stake_info_list_from_any.assert_called_once_with(fake_result) + assert result == mocked_stake_info_list_from_dicts.return_value + mocked_stake_info_list_from_dicts.assert_called_once_with(fake_result) else: assert result == response @@ -1004,8 +1004,8 @@ async def test_neurons(subtensor, mocker): mocked_query_runtime_api = mocker.patch.object( subtensor, "query_runtime_api", return_value="NOT NONE" ) - mocked_neuron_info_list_from_vec_u8 = mocker.patch.object( - async_subtensor.NeuronInfo, "list_from_any" + mocked_neuron_info_list_from_dicts = mocker.patch.object( + async_subtensor.NeuronInfo, "list_from_dicts" ) # Call result = await subtensor.neurons( @@ -1023,7 +1023,7 @@ async def test_neurons(subtensor, mocker): block_hash=fake_block_hash, reuse_block=fake_reuse_block_hash, ) - assert result == mocked_neuron_info_list_from_vec_u8.return_value + assert result == mocked_neuron_info_list_from_dicts.return_value @pytest.mark.parametrize( @@ -1042,8 +1042,8 @@ async def test_neurons_lite(subtensor, mocker, fake_result, response): mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_result) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_neuron_info_lite_list_from_any = mocker.Mock() - async_subtensor.NeuronInfoLite.list_from_any = mocked_neuron_info_lite_list_from_any + mocked_neuron_info_lite_list_from_dicts = mocker.Mock() + async_subtensor.NeuronInfoLite.list_from_dicts = mocked_neuron_info_lite_list_from_dicts # Call result = await subtensor.neurons_lite( @@ -1063,10 +1063,10 @@ async def test_neurons_lite(subtensor, mocker, fake_result, response): reuse_block=fake_reuse_block_hash, ) if fake_result: - mocked_neuron_info_lite_list_from_any.assert_called_once_with(fake_result) - assert result == mocked_neuron_info_lite_list_from_any.return_value + mocked_neuron_info_lite_list_from_dicts.assert_called_once_with(fake_result) + assert result == mocked_neuron_info_lite_list_from_dicts.return_value else: - mocked_neuron_info_lite_list_from_any.assert_not_called() + mocked_neuron_info_lite_list_from_dicts.assert_not_called() assert result == [] @@ -1090,7 +1090,7 @@ async def test_get_neuron_for_pubkey_and_subnet_success(subtensor, mocker): return_value=mocker.Mock(value=fake_result), ) mocked_neuron_info = mocker.patch.object( - async_subtensor.NeuronInfo, "from_any", return_value="fake_neuron_info" + async_subtensor.NeuronInfo, "from_dict", return_value="fake_neuron_info" ) # Call @@ -1207,8 +1207,8 @@ async def test_neuron_for_uid_happy_path(subtensor, mocker): mocked_null_neuron = mocker.Mock() async_subtensor.NeuronInfo.get_null_neuron = mocked_null_neuron - mocked_neuron_info_from_any = mocker.Mock() - async_subtensor.NeuronInfo.from_any = mocked_neuron_info_from_any + mocked_neuron_info_from_dict = mocker.Mock() + async_subtensor.NeuronInfo.from_dict = mocked_neuron_info_from_dict # Call result = await subtensor.neuron_for_uid( @@ -1217,10 +1217,10 @@ async def test_neuron_for_uid_happy_path(subtensor, mocker): # Asserts mocked_null_neuron.assert_not_called() - mocked_neuron_info_from_any.assert_called_once_with( + mocked_neuron_info_from_dict.assert_called_once_with( subtensor.substrate.runtime_call.return_value.value ) - assert result == mocked_neuron_info_from_any.return_value + assert result == mocked_neuron_info_from_dict.return_value @pytest.mark.asyncio @@ -1263,8 +1263,8 @@ async def test_neuron_for_uid(subtensor, mocker): ) subtensor.substrate.runtime_call = mocked_substrate_runtime_call - mocked_neuron_info_from_any = mocker.Mock() - async_subtensor.NeuronInfo.from_any = mocked_neuron_info_from_any + mocked_neuron_info_from_dict = mocker.Mock() + async_subtensor.NeuronInfo.from_dict = mocked_neuron_info_from_dict # Call result = await subtensor.neuron_for_uid( @@ -1273,7 +1273,7 @@ async def test_neuron_for_uid(subtensor, mocker): # Asserts mocked_null_neuron.assert_called_once() - mocked_neuron_info_from_any.assert_not_called() + mocked_neuron_info_from_dict.assert_not_called() assert result == mocked_null_neuron.return_value @@ -1283,9 +1283,9 @@ async def test_get_delegated_no_block_hash_no_reuse(subtensor, mocker): # Preps fake_coldkey_ss58 = "fake_ss58_address" - mocked_delegated_list_from_any = mocker.Mock() - async_subtensor.DelegateInfo.delegated_list_from_any = ( - mocked_delegated_list_from_any + mocked_delegated_list_from_dicts = mocker.Mock() + async_subtensor.DelegateInfo.delegated_list_from_dicts = ( + mocked_delegated_list_from_dicts ) # Call @@ -1298,10 +1298,10 @@ async def test_get_delegated_no_block_hash_no_reuse(subtensor, mocker): [fake_coldkey_ss58], None, ) - mocked_delegated_list_from_any.assert_called_once_with( + mocked_delegated_list_from_dicts.assert_called_once_with( subtensor.substrate.runtime_call.return_value.value ) - assert result == mocked_delegated_list_from_any.return_value + assert result == mocked_delegated_list_from_dicts.return_value @pytest.mark.asyncio @@ -1311,9 +1311,9 @@ async def test_get_delegated_with_block_hash(subtensor, mocker): fake_coldkey_ss58 = "fake_ss58_address" fake_block_hash = "fake_block_hash" - mocked_delegated_list_from_any = mocker.Mock() - async_subtensor.DelegateInfo.delegated_list_from_any = ( - mocked_delegated_list_from_any + mocked_delegated_list_from_dicts = mocker.Mock() + async_subtensor.DelegateInfo.delegated_list_from_dicts = ( + mocked_delegated_list_from_dicts ) # Call @@ -1328,10 +1328,10 @@ async def test_get_delegated_with_block_hash(subtensor, mocker): [fake_coldkey_ss58], fake_block_hash, ) - mocked_delegated_list_from_any.assert_called_once_with( + mocked_delegated_list_from_dicts.assert_called_once_with( subtensor.substrate.runtime_call.return_value.value ) - assert result == mocked_delegated_list_from_any.return_value + assert result == mocked_delegated_list_from_dicts.return_value @pytest.mark.asyncio @@ -1341,9 +1341,9 @@ async def test_get_delegated_with_reuse_block(subtensor, mocker): fake_coldkey_ss58 = "fake_ss58_address" reuse_block = True - mocked_delegated_list_from_any = mocker.Mock() - async_subtensor.DelegateInfo.delegated_list_from_any = ( - mocked_delegated_list_from_any + mocked_delegated_list_from_dicts = mocker.Mock() + async_subtensor.DelegateInfo.delegated_list_from_dicts = ( + mocked_delegated_list_from_dicts ) # Call @@ -1358,10 +1358,10 @@ async def test_get_delegated_with_reuse_block(subtensor, mocker): [fake_coldkey_ss58], None, ) - mocked_delegated_list_from_any.assert_called_once_with( + mocked_delegated_list_from_dicts.assert_called_once_with( subtensor.substrate.runtime_call.return_value.value ) - assert result == mocked_delegated_list_from_any.return_value + assert result == mocked_delegated_list_from_dicts.return_value @pytest.mark.asyncio @@ -1975,9 +1975,9 @@ async def test_get_subnet_hyperparameters_success(subtensor, mocker): mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_result) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_from_any = mocker.Mock() + mocked_from_dict = mocker.Mock() mocker.patch.object( - async_subtensor.SubnetHyperparameters, "from_any", mocked_from_any + async_subtensor.SubnetHyperparameters, "from_dict", mocked_from_dict ) # Call @@ -1994,7 +1994,7 @@ async def test_get_subnet_hyperparameters_success(subtensor, mocker): block_hash=fake_block_hash, reuse_block=False, ) - assert result == mocked_from_any.return_value + assert result == mocked_from_dict.return_value @pytest.mark.asyncio @@ -2031,9 +2031,9 @@ async def test_get_subnet_hyperparameters_without_0x_prefix(subtensor, mocker): mocked_query_runtime_api = mocker.AsyncMock(return_value=fake_result) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_from_any = mocker.Mock() + mocked_from_dict = mocker.Mock() mocker.patch.object( - async_subtensor.SubnetHyperparameters, "from_any", mocked_from_any + async_subtensor.SubnetHyperparameters, "from_dict", mocked_from_dict ) # Call @@ -2048,8 +2048,8 @@ async def test_get_subnet_hyperparameters_without_0x_prefix(subtensor, mocker): block_hash=None, reuse_block=False, ) - mocked_from_any.assert_called_once_with(fake_result) - assert result == mocked_from_any.return_value + mocked_from_dict.assert_called_once_with(fake_result) + assert result == mocked_from_dict.return_value @pytest.mark.asyncio diff --git a/tests/unit_tests/test_subtensor.py b/tests/unit_tests/test_subtensor.py index c4d0ee5abd..a34c7d5fdb 100644 --- a/tests/unit_tests/test_subtensor.py +++ b/tests/unit_tests/test_subtensor.py @@ -853,40 +853,16 @@ def test_get_subnet_hyperparameters_success(mocker, subtensor): # Prep netuid = 1 block = 123 - hex_bytes_result = "0x010203" - bytes_result = bytes.fromhex(hex_bytes_result[2:]) - mocker.patch.object(subtensor, "query_runtime_api", return_value=hex_bytes_result) - mocker.patch.object( - subtensor_module.SubnetHyperparameters, - "from_vec_u8", - return_value=["from_vec_u8"], - ) - # Call - result = subtensor.get_subnet_hyperparameters(netuid, block) - - # Asserts - subtensor.query_runtime_api.assert_called_once_with( - runtime_api="SubnetInfoRuntimeApi", - method="get_subnet_hyperparams", - params=[netuid], - block=block, + mocker.patch.object( + subtensor, + "query_runtime_api", ) - subtensor_module.SubnetHyperparameters.from_vec_u8.assert_called_once_with( - bytes_result + mocker.patch.object( + subtensor_module.SubnetHyperparameters, + "from_dict", ) - -def test_get_subnet_hyperparameters_hex_without_prefix(subtensor, mocker): - """Test get_subnet_hyperparameters correctly processes hex string without '0x' prefix.""" - # Prep - netuid = 1 - block = 123 - hex_bytes_result = "010203" - bytes_result = bytes.fromhex(hex_bytes_result) - mocker.patch.object(subtensor, "query_runtime_api", return_value=hex_bytes_result) - mocker.patch.object(subtensor_module.SubnetHyperparameters, "from_vec_u8") - # Call result = subtensor.get_subnet_hyperparameters(netuid, block) @@ -897,8 +873,8 @@ def test_get_subnet_hyperparameters_hex_without_prefix(subtensor, mocker): params=[netuid], block=block, ) - subtensor_module.SubnetHyperparameters.from_vec_u8.assert_called_once_with( - bytes_result + subtensor_module.SubnetHyperparameters.from_dict.assert_called_once_with( + subtensor.query_runtime_api.return_value, ) @@ -908,7 +884,7 @@ def test_get_subnet_hyperparameters_no_data(mocker, subtensor): netuid = 1 block = 123 mocker.patch.object(subtensor, "query_runtime_api", return_value=None) - mocker.patch.object(subtensor_module.SubnetHyperparameters, "from_vec_u8") + mocker.patch.object(subtensor_module.SubnetHyperparameters, "from_dict") # Call result = subtensor.get_subnet_hyperparameters(netuid, block) @@ -921,7 +897,7 @@ def test_get_subnet_hyperparameters_no_data(mocker, subtensor): params=[netuid], block=block, ) - subtensor_module.SubnetHyperparameters.from_vec_u8.assert_not_called() + subtensor_module.SubnetHyperparameters.from_dict.assert_not_called() def test_query_subtensor(subtensor, mocker): @@ -948,32 +924,28 @@ def test_query_runtime_api(subtensor, mocker): fake_runtime_api = "NeuronInfoRuntimeApi" fake_method = "get_neuron_lite" - mocked_state_call = mocker.MagicMock() - subtensor.state_call = mocked_state_call - - mocked_runtime_configuration = mocker.patch.object( - subtensor_module, "RuntimeConfiguration" + mock_determine_block_hash = mocker.patch.object( + subtensor, + "determine_block_hash", ) - mocked_scalecodec = mocker.patch.object(subtensor_module.scalecodec, "ScaleBytes") + # mock_runtime_call = mocker.patch.object( + # subtensor.substrate, + # "runtime_call", + # ) # Call result = subtensor.query_runtime_api(fake_runtime_api, fake_method, None) # Asserts - subtensor.substrate.rpc_request.assert_called_once_with( - method="state_call", - params=[f"{fake_runtime_api}_{fake_method}", "0x"], - ) - mocked_scalecodec.assert_called_once_with( - subtensor.substrate.rpc_request.return_value.__getitem__.return_value - ) - mocked_runtime_configuration.assert_called_once() - mocked_runtime_configuration.return_value.update_type_registry.assert_called() - mocked_runtime_configuration.return_value.create_scale_object.assert_called() - assert ( - result - == mocked_runtime_configuration.return_value.create_scale_object.return_value.decode.return_value + subtensor.substrate.runtime_call.assert_called_once_with( + fake_runtime_api, + fake_method, + None, + mock_determine_block_hash.return_value, ) + mock_determine_block_hash.assert_called_once_with(None) + + assert result == subtensor.substrate.runtime_call.return_value.value def test_query_map_subtensor(subtensor, mocker): @@ -1387,23 +1359,21 @@ def test_get_neuron_for_pubkey_and_subnet(subtensor, mocker): fake_netuid = 1 fake_block = 123 - mocker.patch.object( - subtensor.substrate, - "query", - return_value=mocker.Mock(value=123), - ) mocker.patch.object( subtensor.substrate, "rpc_request", - return_value={"result": b"fake_neuron_data"}, + return_value=mocker.MagicMock( + **{ + "get.return_value": "0x32", + }, + ), ) - mocked_neuron_from_vec_u8 = mocker.patch.object( - subtensor_module.NeuronInfo, "from_vec_u8" + mock_neuron_from_dict = mocker.patch.object( + subtensor_module.NeuronInfo, + "from_dict", + return_value=["delegate1", "delegate2"], ) - mocked_get_uid_for_hotkey_on_subnet = mocker.MagicMock() - subtensor.get_uid_for_hotkey_on_subnet = mocked_get_uid_for_hotkey_on_subnet - # Call result = subtensor.get_neuron_for_pubkey_and_subnet( hotkey_ss58=fake_hotkey_ss58, @@ -1412,13 +1382,19 @@ def test_get_neuron_for_pubkey_and_subnet(subtensor, mocker): ) # Asserts - subtensor.substrate.get_block_hash.assert_called_once_with(fake_block) - subtensor.substrate.rpc_request.assert_called_once_with( - method="neuronInfo_getNeuron", - params=[fake_netuid, subtensor.substrate.query.return_value.value], + subtensor.substrate.query.assert_called_once_with( + module="SubtensorModule", + storage_function="Uids", + params=[fake_netuid, fake_hotkey_ss58], block_hash=subtensor.substrate.get_block_hash.return_value, ) - assert result == mocked_neuron_from_vec_u8.return_value + subtensor.substrate.runtime_call.assert_called_once_with( + "NeuronInfoRuntimeApi", + "get_neuron", + [fake_netuid, subtensor.substrate.query.return_value.value], + subtensor.substrate.get_block_hash.return_value, + ) + assert result == mock_neuron_from_dict.return_value def test_neuron_for_uid_none(subtensor, mocker): @@ -1451,7 +1427,7 @@ def test_neuron_for_uid_response_none(subtensor, mocker): subtensor_module.NeuronInfo, "get_null_neuron" ) - subtensor.substrate.rpc_request.return_value.get.return_value = None + subtensor.substrate.runtime_call.return_value.value = None # Call result = subtensor.neuron_for_uid( @@ -1460,9 +1436,11 @@ def test_neuron_for_uid_response_none(subtensor, mocker): # Asserts subtensor.substrate.get_block_hash.assert_called_once_with(fake_block) - subtensor.substrate.rpc_request.assert_called_once_with( - method="neuronInfo_getNeuron", - params=[fake_netuid, fake_uid, subtensor.substrate.get_block_hash.return_value], + subtensor.substrate.runtime_call.assert_called_once_with( + "NeuronInfoRuntimeApi", + "get_neuron", + [fake_netuid, fake_uid], + subtensor.substrate.get_block_hash.return_value, ) mocked_neuron_info.assert_called_once() @@ -1475,8 +1453,8 @@ def test_neuron_for_uid_success(subtensor, mocker): fake_uid = 1 fake_netuid = 2 fake_block = 123 - mocked_neuron_from_vec_u8 = mocker.patch.object( - subtensor_module.NeuronInfo, "from_vec_u8" + mocked_neuron_from_dict = mocker.patch.object( + subtensor_module.NeuronInfo, "from_dict" ) # Call @@ -1486,12 +1464,14 @@ def test_neuron_for_uid_success(subtensor, mocker): # Asserts subtensor.substrate.get_block_hash.assert_called_once_with(fake_block) - subtensor.substrate.rpc_request.assert_called_once_with( - method="neuronInfo_getNeuron", - params=[fake_netuid, fake_uid, subtensor.substrate.get_block_hash.return_value], + subtensor.substrate.runtime_call.assert_called_once_with( + "NeuronInfoRuntimeApi", + "get_neuron", + [fake_netuid, fake_uid], + subtensor.substrate.get_block_hash.return_value, ) - assert result == mocked_neuron_from_vec_u8.return_value + assert result == mocked_neuron_from_dict.return_value @pytest.mark.parametrize( @@ -2100,16 +2080,11 @@ def test_get_all_subnets_info_success(mocker, subtensor): """Test get_all_subnets_info returns correct data when subnet information is found.""" # Prep block = 123 - mocker.patch.object( - subtensor.substrate, "get_block_hash", return_value="mock_block_hash" - ) - hex_bytes_result = "0x010203" - bytes_result = bytes.fromhex(hex_bytes_result[2:]) - mocker.patch.object(subtensor, "query_runtime_api", return_value=hex_bytes_result) + + mocker.patch.object(subtensor, "query_runtime_api") mocker.patch.object( subtensor_module.SubnetInfo, - "list_from_vec_u8", - return_value="list_from_vec_u80", + "list_from_dicts", ) # Call @@ -2117,9 +2092,14 @@ def test_get_all_subnets_info_success(mocker, subtensor): # Asserts subtensor.query_runtime_api.assert_called_once_with( - "SubnetInfoRuntimeApi", "get_subnets_info", params=[], block=block + runtime_api="SubnetInfoRuntimeApi", + method="get_subnets_info", + params=[], + block=block, + ) + subtensor_module.SubnetInfo.list_from_dicts.assert_called_once_with( + subtensor.query_runtime_api.return_value, ) - subtensor_module.SubnetInfo.list_from_vec_u8.assert_called_once_with(bytes_result) @pytest.mark.parametrize("result_", [[], None]) @@ -2130,7 +2110,7 @@ def test_get_all_subnets_info_no_data(mocker, subtensor, result_): mocker.patch.object( subtensor.substrate, "get_block_hash", return_value="mock_block_hash" ) - mocker.patch.object(subtensor_module.SubnetInfo, "list_from_vec_u8") + mocker.patch.object(subtensor_module.SubnetInfo, "list_from_dicts") mocker.patch.object(subtensor, "query_runtime_api", return_value=result_) @@ -2140,9 +2120,12 @@ def test_get_all_subnets_info_no_data(mocker, subtensor, result_): # Asserts assert result == [] subtensor.query_runtime_api.assert_called_once_with( - "SubnetInfoRuntimeApi", "get_subnets_info", params=[], block=block + runtime_api="SubnetInfoRuntimeApi", + method="get_subnets_info", + params=[], + block=block, ) - subtensor_module.SubnetInfo.list_from_vec_u8.assert_not_called() + subtensor_module.SubnetInfo.list_from_dicts.assert_not_called() def test_get_delegate_take_success(subtensor, mocker): @@ -2618,121 +2601,61 @@ def test_get_delegates_success(mocker, subtensor): """Test when delegates are successfully retrieved.""" # Mock data fake_block = 123 - fake_block_hash = "0xabc123" - fake_bytes = b"mock_encoded_delegates" - fake_json_body = { - "result": fake_bytes, - } # Mocks - mocker.patch.object( - subtensor_module, - "RuntimeConfiguration", - return_value=mocker.Mock( - **{ - "create_scale_object.return_value.decode.return_value": f"0x{fake_bytes.hex()}", - }, - ), + mock_query_runtime_api = mocker.patch.object( + subtensor, + "query_runtime_api", ) - mock_get_block_hash = mocker.patch.object( - subtensor.substrate, - "get_block_hash", - return_value=fake_block_hash, - ) - mock_rpc_request = mocker.patch.object( - subtensor.substrate, - "rpc_request", - return_value=fake_json_body, - ) - mock_list_from_vec_u8 = mocker.patch.object( + mock_list_from_dicts = mocker.patch.object( subtensor_module.DelegateInfo, - "list_from_vec_u8", - return_value=["delegate1", "delegate2"], + "list_from_dicts", ) # Call result = subtensor.get_delegates(block=fake_block) # Assertions - mock_get_block_hash.assert_called_once_with(fake_block) - mock_rpc_request.assert_called_once_with( - method="state_call", - params=["DelegateInfoRuntimeApi_get_delegates", "0x", fake_block_hash], + mock_query_runtime_api.assert_called_once_with( + runtime_api="DelegateInfoRuntimeApi", + method="get_delegates", + params=[], + block=123, ) - mock_list_from_vec_u8.assert_called_once_with(fake_json_body["result"]) - assert result == ["delegate1", "delegate2"] + mock_list_from_dicts.assert_called_once_with(mock_query_runtime_api.return_value) + + assert result == mock_list_from_dicts.return_value def test_get_delegates_no_result(mocker, subtensor): """Test when rpc_request returns no result.""" # Mock data fake_block = 123 - fake_block_hash = "0xabc123" - fake_json_body = None # Mocks - mock_get_block_hash = mocker.patch.object( - subtensor.substrate, - "get_block_hash", - return_value=fake_block_hash, + mock_query_runtime_api = mocker.patch.object( + subtensor, + "query_runtime_api", + return_value=None, ) - mock_rpc_request = mocker.patch.object( - subtensor.substrate, - "rpc_request", - return_value=fake_json_body, + mock_list_from_dicts = mocker.patch.object( + subtensor_module.DelegateInfo, + "list_from_dicts", ) # Call result = subtensor.get_delegates(block=fake_block) # Assertions - mock_get_block_hash.assert_called_once_with(fake_block) - mock_rpc_request.assert_called_once_with( - method="state_call", - params=["DelegateInfoRuntimeApi_get_delegates", "0x", fake_block_hash], - ) - assert result == [] - - -def test_get_delegates_latest_block(mocker, subtensor): - """Test when no block is provided (latest block).""" - # Mock data - fake_bytes = b"mock_encoded_delegates" - fake_json_body = { - "result": fake_bytes, - } - - # Mocks - mocker.patch.object( - subtensor_module, - "RuntimeConfiguration", - return_value=mocker.Mock( - **{ - "create_scale_object.return_value.decode.return_value": f"0x{fake_bytes.hex()}", - }, - ), - ) - mock_rpc_request = mocker.patch.object( - subtensor.substrate, - "rpc_request", - return_value=fake_json_body, - ) - mock_list_from_vec_u8 = mocker.patch.object( - subtensor_module.DelegateInfo, - "list_from_vec_u8", - return_value=["delegate1", "delegate2"], + mock_query_runtime_api.assert_called_once_with( + runtime_api="DelegateInfoRuntimeApi", + method="get_delegates", + params=[], + block=123, ) + mock_list_from_dicts.assert_not_called() - # Call - result = subtensor.get_delegates() - - # Assertions - mock_rpc_request.assert_called_once_with( - method="state_call", - params=["DelegateInfoRuntimeApi_get_delegates", "0x"], - ) - mock_list_from_vec_u8.assert_called_once_with(fake_json_body["result"]) - assert result == ["delegate1", "delegate2"] + assert result == [] def test_is_hotkey_delegate_true(mocker, subtensor): From 8c317a6746b9191a1a9136f947c2d376883cd091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Fri, 31 Jan 2025 19:50:29 +0100 Subject: [PATCH 05/19] remove bittensor-cli --- requirements/prod.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements/prod.txt b/requirements/prod.txt index 888743a7ba..f0b742a75d 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -2,7 +2,6 @@ wheel setuptools~=70.0.0 aiohttp~=3.9 asyncstdlib~=3.13.0 -# bittensor-cli bt-decode==0.4.0 colorama~=0.4.6 fastapi~=0.110.1 From 56f804c38ca2c046c552cf04a3b7b65a87d0bea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Fri, 31 Jan 2025 19:53:04 +0100 Subject: [PATCH 06/19] ruff formatting --- bittensor/core/chain_data/delegate_info.py | 4 ++-- bittensor/core/chain_data/neuron_certificate.py | 2 +- bittensor/core/chain_data/neuron_info.py | 3 ++- bittensor/core/chain_data/neuron_info_lite.py | 3 ++- tests/unit_tests/test_async_subtensor.py | 4 +++- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/bittensor/core/chain_data/delegate_info.py b/bittensor/core/chain_data/delegate_info.py index 52cfacc4e3..c233eaa231 100644 --- a/bittensor/core/chain_data/delegate_info.py +++ b/bittensor/core/chain_data/delegate_info.py @@ -41,7 +41,8 @@ class DelegateInfo(InfoBase): @classmethod def from_dict(cls, decoded: dict) -> Optional["DelegateInfo"]: nominators = [ - (decode_account_id(x), Balance.from_rao(y)) for x, y in decoded["nominators"] + (decode_account_id(x), Balance.from_rao(y)) + for x, y in decoded["nominators"] ] total_stake = sum((x[1] for x in nominators)) if nominators else Balance(0) @@ -65,7 +66,6 @@ def delegated_list_from_dicts( ( DelegateInfo.from_dict(delegate), Balance.from_rao(balance), - ) for delegate, balance in delegates ] diff --git a/bittensor/core/chain_data/neuron_certificate.py b/bittensor/core/chain_data/neuron_certificate.py index a702cbc35b..63cbcc4e81 100644 --- a/bittensor/core/chain_data/neuron_certificate.py +++ b/bittensor/core/chain_data/neuron_certificate.py @@ -5,7 +5,7 @@ # Dataclasses for chain data. @dataclass -class NeuronCertificate: # TODO Info? +class NeuronCertificate: # TODO Info? """ Dataclass for neuron certificate. """ diff --git a/bittensor/core/chain_data/neuron_info.py b/bittensor/core/chain_data/neuron_info.py index ac37e0b402..af9ffb9744 100644 --- a/bittensor/core/chain_data/neuron_info.py +++ b/bittensor/core/chain_data/neuron_info.py @@ -134,7 +134,8 @@ def from_dict(cls, decoded: Any) -> "NeuronInfo": return NeuronInfo( active=decoded["active"], axon_info=AxonInfo.from_dict( - decoded["axon_info"] | { + decoded["axon_info"] + | { "hotkey": hotkey, "coldkey": coldkey, }, diff --git a/bittensor/core/chain_data/neuron_info_lite.py b/bittensor/core/chain_data/neuron_info_lite.py index 53f0507283..b86499f2ab 100644 --- a/bittensor/core/chain_data/neuron_info_lite.py +++ b/bittensor/core/chain_data/neuron_info_lite.py @@ -103,7 +103,8 @@ def from_dict(cls, decoded: Any) -> "NeuronInfoLite": return NeuronInfoLite( active=decoded["active"], axon_info=AxonInfo.from_dict( - decoded["axon_info"] | { + decoded["axon_info"] + | { "hotkey": hotkey, "coldkey": coldkey, }, diff --git a/tests/unit_tests/test_async_subtensor.py b/tests/unit_tests/test_async_subtensor.py index a7917a78e4..217c36b3c4 100644 --- a/tests/unit_tests/test_async_subtensor.py +++ b/tests/unit_tests/test_async_subtensor.py @@ -1043,7 +1043,9 @@ async def test_neurons_lite(subtensor, mocker, fake_result, response): subtensor.query_runtime_api = mocked_query_runtime_api mocked_neuron_info_lite_list_from_dicts = mocker.Mock() - async_subtensor.NeuronInfoLite.list_from_dicts = mocked_neuron_info_lite_list_from_dicts + async_subtensor.NeuronInfoLite.list_from_dicts = ( + mocked_neuron_info_lite_list_from_dicts + ) # Call result = await subtensor.neurons_lite( From 7342fec9807985ede53f58a6786d3b8b7b82d4de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Fri, 31 Jan 2025 19:54:47 +0100 Subject: [PATCH 07/19] remove bt-decode - it's part of async-substrate-interface now --- requirements/prod.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/requirements/prod.txt b/requirements/prod.txt index f0b742a75d..b071bd6a02 100644 --- a/requirements/prod.txt +++ b/requirements/prod.txt @@ -2,7 +2,6 @@ wheel setuptools~=70.0.0 aiohttp~=3.9 asyncstdlib~=3.13.0 -bt-decode==0.4.0 colorama~=0.4.6 fastapi~=0.110.1 munch~=2.5.0 From 32acf677d39686ef3202c0ccc6f8d9b727ae47bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Fri, 31 Jan 2025 20:05:36 +0100 Subject: [PATCH 08/19] mypy fixes --- bittensor/core/chain_data/dynamic_info.py | 7 ++----- bittensor/core/chain_data/metagraph_info.py | 4 ---- bittensor/core/subtensor.py | 3 +-- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/bittensor/core/chain_data/dynamic_info.py b/bittensor/core/chain_data/dynamic_info.py index 11a53ed56e..548c2ca74f 100644 --- a/bittensor/core/chain_data/dynamic_info.py +++ b/bittensor/core/chain_data/dynamic_info.py @@ -9,11 +9,8 @@ from scalecodec.utils.ss58 import ss58_encode from bittensor.core.chain_data.info_base import InfoBase -from bittensor.core.chain_data.utils import ( - ChainDataType, - from_scale_encoding, - SS58_FORMAT, -) +from bittensor.core.chain_data.utils import SS58_FORMAT + from bittensor.core.chain_data.subnet_identity import SubnetIdentity from bittensor.utils.balance import Balance diff --git a/bittensor/core/chain_data/metagraph_info.py b/bittensor/core/chain_data/metagraph_info.py index 18d69ca3fd..1f72906d3b 100644 --- a/bittensor/core/chain_data/metagraph_info.py +++ b/bittensor/core/chain_data/metagraph_info.py @@ -5,10 +5,6 @@ from bittensor.core.chain_data.chain_identity import ChainIdentity from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.subnet_identity import SubnetIdentity -from bittensor.core.chain_data.utils import ( - ChainDataType, - from_scale_encoding, -) from bittensor.utils import u64_normalized_float as u64tf, u16_normalized_float as u16tf from bittensor.utils.balance import Balance from scalecodec.utils.ss58 import ss58_encode diff --git a/bittensor/core/subtensor.py b/bittensor/core/subtensor.py index 01bd884e53..3f370219e3 100644 --- a/bittensor/core/subtensor.py +++ b/bittensor/core/subtensor.py @@ -363,8 +363,7 @@ def all_subnets(self, block: Optional[int] = None) -> Optional[list["DynamicInfo "get_all_dynamic_info", block_hash=block_hash, ) - subnets = DynamicInfo.list_from_dicts(query.decode()) - return subnets + return DynamicInfo.list_from_dicts(query.decode()) def blocks_since_last_update(self, netuid: int, uid: int) -> Optional[int]: """ From 82854d8a8314b1f5d2058a00e9f43c68f1f76632 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 31 Jan 2025 12:57:33 -0800 Subject: [PATCH 09/19] fix self usage in metagraph --- bittensor/core/metagraph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bittensor/core/metagraph.py b/bittensor/core/metagraph.py index ea004e99b1..701716274e 100644 --- a/bittensor/core/metagraph.py +++ b/bittensor/core/metagraph.py @@ -1578,7 +1578,7 @@ async def _process_root_weights( async def _get_all_stakes_from_chain(self): """Fills in the stake associated attributes of a class instance from a chain response.""" try: - result = await subtensor.query_runtime_api( + result = await self.subtensor.query_runtime_api( runtime_api="SubnetInfoRuntimeApi", method="get_subnet_state", params=[self.netuid], @@ -1866,7 +1866,7 @@ def _process_root_weights( def _get_all_stakes_from_chain(self): """Fills in the stake associated attributes of a class instance from a chain response.""" try: - result = subtensor.query_runtime_api( + result = self.subtensor.query_runtime_api( runtime_api="SubnetInfoRuntimeApi", method="get_subnet_state", params=[self.netuid], From 351423f34c164c1fc1d7adcf2ab4d4f45ac5a8ac Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 31 Jan 2025 18:21:36 -0800 Subject: [PATCH 10/19] add root fields to metagraph class --- bittensor/core/metagraph.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bittensor/core/metagraph.py b/bittensor/core/metagraph.py index 701716274e..b07e54d19c 100644 --- a/bittensor/core/metagraph.py +++ b/bittensor/core/metagraph.py @@ -19,7 +19,7 @@ MetagraphInfoPool, MetagraphInfoParams, ) -from bittensor.utils import hex_to_bytes + from bittensor.utils.btlogging import logging from bittensor.utils.registration import torch, use_torch from bittensor.utils.weight_utils import ( @@ -266,6 +266,8 @@ class MetagraphMixin(ABC): last_step: int tempo: int blocks_since_last_step: int + owner_coldkey: str + owner_hotkey: str hparams: MetagraphInfoParams pool: MetagraphInfoPool @@ -945,6 +947,8 @@ def _apply_metagraph_ingo_mixin(self, metagraph_info: "MetagraphInfo"): self.last_step = metagraph_info.last_step self.tempo = metagraph_info.tempo self.blocks_since_last_step = metagraph_info.blocks_since_last_step + self.owner_coldkey = metagraph_info.owner_coldkey + self.owner_hotkey = metagraph_info.owner_hotkey self.hparams = MetagraphInfoParams( activity_cutoff=metagraph_info.activity_cutoff, From 19f167ae9e583f2d41b9951f282eea331c7f97eb Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 31 Jan 2025 18:26:31 -0800 Subject: [PATCH 11/19] improve MetagraphInfo --- bittensor/core/chain_data/metagraph_info.py | 41 ++++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/bittensor/core/chain_data/metagraph_info.py b/bittensor/core/chain_data/metagraph_info.py index 0a6a8dfe65..53802f541d 100644 --- a/bittensor/core/chain_data/metagraph_info.py +++ b/bittensor/core/chain_data/metagraph_info.py @@ -1,13 +1,13 @@ from dataclasses import dataclass -from typing import Optional +from typing import Optional, Union from bittensor.core.chain_data.axon_info import AxonInfo from bittensor.core.chain_data.chain_identity import ChainIdentity from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.subnet_identity import SubnetIdentity +from bittensor.core.chain_data.utils import decode_account_id from bittensor.utils import u64_normalized_float as u64tf, u16_normalized_float as u16tf from bittensor.utils.balance import Balance -from scalecodec.utils.ss58 import ss58_encode # to balance with unit (just shortcut) @@ -16,6 +16,21 @@ def _tbwu(val: int, netuid: Optional[int] = 0) -> Balance: return Balance.from_rao(val, netuid) +def _chr_str(codes: tuple[int]) -> str: + """Converts a tuple of integer Unicode code points into a string.""" + return "".join(map(chr, codes)) + + +def process_nested(data: Union[tuple, dict], chr_transform): + """Processes nested data structures by applying a transformation function to their elements.""" + if isinstance(data, (list, tuple)): + if len(data) > 0 and isinstance(data[0], dict): + return {k: chr_transform(v) for k, v in data[0].items()} + return {} + elif isinstance(data, dict): + return {k: chr_transform(v) for k, v in data.items()} + + @dataclass class MetagraphInfo(InfoBase): # Subnet index @@ -125,11 +140,14 @@ def from_dict(cls, decoded: dict) -> "MetagraphInfo": # Name and symbol decoded.update({"name": bytes(decoded.get("name")).decode()}) decoded.update({"symbol": bytes(decoded.get("symbol")).decode()}) - decoded.update({"identity": decoded.get("identity", {})}) + for key in ["identities", "identity"]: + raw_data = decoded.get(key) + processed = process_nested(raw_data, _chr_str) + decoded.update({key: processed}) # Keys for owner. - decoded["owner_hotkey"] = ss58_encode(decoded["owner_hotkey"]) - decoded["owner_coldkey"] = ss58_encode(decoded["owner_coldkey"]) + decoded["owner_hotkey"] = decode_account_id(decoded["owner_hotkey"]) + decoded["owner_coldkey"] = decode_account_id(decoded["owner_coldkey"]) # Subnet emission terms decoded["subnet_emission"] = _tbwu(decoded["subnet_emission"]) @@ -166,8 +184,12 @@ def from_dict(cls, decoded: dict) -> "MetagraphInfo": decoded["bonds_moving_avg"] = u64tf(decoded["bonds_moving_avg"]) # Metagraph info. - decoded["hotkeys"] = [ss58_encode(ck) for ck in decoded.get("hotkeys", [])] - decoded["coldkeys"] = [ss58_encode(hk) for hk in decoded.get("coldkeys", [])] + decoded["hotkeys"] = [ + decode_account_id(ck) for ck in decoded.get("hotkeys", []) + ] + decoded["coldkeys"] = [ + decode_account_id(hk) for hk in decoded.get("coldkeys", []) + ] decoded["axons"] = decoded.get("axons", []) decoded["pruning_score"] = [ u16tf(ps) for ps in decoded.get("pruning_score", []) @@ -184,14 +206,13 @@ def from_dict(cls, decoded: dict) -> "MetagraphInfo": # Dividend break down decoded["tao_dividends_per_hotkey"] = [ - (ss58_encode(alpha[0]), _tbwu(alpha[1])) + (decode_account_id(alpha[0]), _tbwu(alpha[1])) for alpha in decoded["tao_dividends_per_hotkey"] ] decoded["alpha_dividends_per_hotkey"] = [ - (ss58_encode(adphk[0]), _tbwu(adphk[1], _netuid)) + (decode_account_id(adphk[0]), _tbwu(adphk[1], _netuid)) for adphk in decoded["alpha_dividends_per_hotkey"] ] - return MetagraphInfo(**decoded) From 731e5a78c6a8c9a2403c1911122cce6c5f3e7d15 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 31 Jan 2025 18:27:40 -0800 Subject: [PATCH 12/19] fix bug in subtensor --- bittensor/core/subtensor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bittensor/core/subtensor.py b/bittensor/core/subtensor.py index 3f370219e3..82dc728d47 100644 --- a/bittensor/core/subtensor.py +++ b/bittensor/core/subtensor.py @@ -1009,7 +1009,7 @@ def get_metagraph_info( params=[netuid], block_hash=block_hash, ) - return MetagraphInfo.from_dict(query.decode()) + return MetagraphInfo.from_dict(query.value) def get_all_metagraphs_info( self, block: Optional[int] = None @@ -1020,7 +1020,7 @@ def get_all_metagraphs_info( "get_all_metagraphs", block_hash=block_hash, ) - return MetagraphInfo.list_from_dicts(query.decode()) + return MetagraphInfo.list_from_dicts(query.value) def get_netuids_for_hotkey( self, hotkey_ss58: str, block: Optional[int] = None From c53fcbb26c01f178e497edd8ea09f039afb0b18b Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 31 Jan 2025 19:54:18 -0800 Subject: [PATCH 13/19] fix integration metagraph test --- tests/helpers/integration_websocket_data.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/helpers/integration_websocket_data.py b/tests/helpers/integration_websocket_data.py index 46a2476150..8cfd4f24e5 100644 --- a/tests/helpers/integration_websocket_data.py +++ b/tests/helpers/integration_websocket_data.py @@ -6455,6 +6455,10 @@ "jsonrpc": "2.0", "result": "0x01040400000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000400040104feff0300040004072af77b4813040004000400040004000400040ba63a463d22080400040ba63a463d22080804000400", }, + '["SubnetInfoRuntimeApi_get_metagraph", "0100", null]': { + "jsonrpc": "2.0", + "result": "0x01000cd1018501d5010839039102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dec302009101fac20200e400000000000000000028feff010000feff0300009101214e010100010102286bee025a620201000140025a620213ffffffffffffff3f02286bee0700e87648170091010404c80004009a990300cecc020082ee36000000000000000000000000000000000000000000" + } }, "state_getRuntimeVersion": { '["0xae0ef35761d050ada6d4f09efec39ca430d4f4c50b927741b32fd487d382ead8"]': { From 70036f91c266bf4d1a4ffe35a9dd220ea3b67312 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 31 Jan 2025 19:55:02 -0800 Subject: [PATCH 14/19] fix tests + ruff --- tests/helpers/integration_websocket_data.py | 4 +-- .../test_metagraph_integration.py | 27 +++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/tests/helpers/integration_websocket_data.py b/tests/helpers/integration_websocket_data.py index 8cfd4f24e5..177639ec6c 100644 --- a/tests/helpers/integration_websocket_data.py +++ b/tests/helpers/integration_websocket_data.py @@ -6457,8 +6457,8 @@ }, '["SubnetInfoRuntimeApi_get_metagraph", "0100", null]': { "jsonrpc": "2.0", - "result": "0x01000cd1018501d5010839039102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dec302009101fac20200e400000000000000000028feff010000feff0300009101214e010100010102286bee025a620201000140025a620213ffffffffffffff3f02286bee0700e87648170091010404c80004009a990300cecc020082ee36000000000000000000000000000000000000000000" - } + "result": "0x01000cd1018501d5010839039102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dec302009101fac20200e400000000000000000028feff010000feff0300009101214e010100010102286bee025a620201000140025a620213ffffffffffffff3f02286bee0700e87648170091010404c80004009a990300cecc020082ee36000000000000000000000000000000000000000000", + }, }, "state_getRuntimeVersion": { '["0xae0ef35761d050ada6d4f09efec39ca430d4f4c50b927741b32fd487d382ead8"]': { diff --git a/tests/integration_tests/test_metagraph_integration.py b/tests/integration_tests/test_metagraph_integration.py index bd52b4e845..5406219c5e 100644 --- a/tests/integration_tests/test_metagraph_integration.py +++ b/tests/integration_tests/test_metagraph_integration.py @@ -24,23 +24,40 @@ def test_print_empty(self): print(self.metagraph) def test_lite_sync(self): - self.metagraph.sync(lite=True, subtensor=self.sub) + with mock.patch.object( + self.sub, "get_metagraph_info", return_value=mock.MagicMock() + ): + self.metagraph.sync(lite=True, subtensor=self.sub) def test_full_sync(self): - self.metagraph.sync(lite=False, subtensor=self.sub) + with mock.patch.object( + self.sub, "get_metagraph_info", return_value=mock.MagicMock() + ): + self.metagraph.sync(lite=False, subtensor=self.sub) def test_sync_block_0(self): - self.metagraph.sync(lite=True, block=0, subtensor=self.sub) + with mock.patch.object( + self.sub, "get_metagraph_info", return_value=mock.MagicMock() + ): + self.metagraph.sync(lite=True, block=0, subtensor=self.sub) def test_load_sync_save(self): - with mock.patch.object(self.sub, "neurons_lite", return_value=[]): + with mock.patch.object( + self.sub, "neurons_lite", return_value=[] + ), mock.patch.object( + self.sub, "get_metagraph_info", return_value=mock.MagicMock() + ): self.metagraph.sync(lite=True, subtensor=self.sub) self.metagraph.save() self.metagraph.load() self.metagraph.save() def test_load_sync_save_from_torch(self): - with mock.patch.object(self.sub, "neurons_lite", return_value=[]): + with mock.patch.object( + self.sub, "neurons_lite", return_value=[] + ), mock.patch.object( + self.sub, "get_metagraph_info", return_value=mock.MagicMock() + ): self.metagraph.sync(lite=True, subtensor=self.sub) def deprecated_save_torch(metagraph): From 82c4b2bfd8a2bf38533267626dc3eaacdef18d2b Mon Sep 17 00:00:00 2001 From: Benjamin Himes Date: Mon, 3 Feb 2025 02:15:08 +0200 Subject: [PATCH 15/19] Cleanup --- bittensor/core/async_subtensor.py | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/bittensor/core/async_subtensor.py b/bittensor/core/async_subtensor.py index 84524d1f6b..bd8a622b3f 100644 --- a/bittensor/core/async_subtensor.py +++ b/bittensor/core/async_subtensor.py @@ -445,6 +445,8 @@ async def query_runtime_api( specific interactions with the network's runtime environment. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) + if not block_hash and reuse_block: + block_hash = self.substrate.last_block_hash result = await self.substrate.runtime_call( runtime_api, method, params, block_hash ) @@ -1465,27 +1467,23 @@ async def get_neuron_for_pubkey_and_subnet( attributes within a particular subnet of the Bittensor ecosystem. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - uid = await self.substrate.query( + uid_query = await self.substrate.query( module="SubtensorModule", storage_function="Uids", params=[netuid, hotkey_ss58], block_hash=block_hash, reuse_block_hash=reuse_block, ) - if uid is None: - return NeuronInfo.get_null_neuron() - - result = await self.query_runtime_api( - runtime_api="NeuronInfoRuntimeApi", - method="get_neuron", - params=[netuid, uid.value], - block_hash=block_hash, - ) - - if not result: + if (uid := getattr(uid_query, "value", None)) is None: return NeuronInfo.get_null_neuron() - - return NeuronInfo.from_dict(result) + else: + return await self.neuron_for_uid( + uid=uid, + netuid=netuid, + block=block, + block_hash=block_hash, + reuse_block=reuse_block, + ) async def get_stake( self, From 41fe909f9896163a6a0c3c101801d41473a2adf0 Mon Sep 17 00:00:00 2001 From: Benjamin Himes Date: Mon, 3 Feb 2025 02:23:34 +0200 Subject: [PATCH 16/19] Fix test I broke. --- tests/unit_tests/test_async_subtensor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit_tests/test_async_subtensor.py b/tests/unit_tests/test_async_subtensor.py index 217c36b3c4..7197374a5b 100644 --- a/tests/unit_tests/test_async_subtensor.py +++ b/tests/unit_tests/test_async_subtensor.py @@ -1358,7 +1358,7 @@ async def test_get_delegated_with_reuse_block(subtensor, mocker): "DelegateInfoRuntimeApi", "get_delegated", [fake_coldkey_ss58], - None, + subtensor.substrate.last_block_hash, ) mocked_delegated_list_from_dicts.assert_called_once_with( subtensor.substrate.runtime_call.return_value.value From 973b5c1028095adbee858d3f225b15ca409794c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20=C5=BBy=C5=BAniewski?= Date: Mon, 3 Feb 2025 20:17:59 +0100 Subject: [PATCH 17/19] raise SubstrateRequestException on KeyError within InfoBase _from_dict decode --- bittensor/core/chain_data/axon_info.py | 2 +- bittensor/core/chain_data/delegate_info.py | 2 +- bittensor/core/chain_data/dynamic_info.py | 2 +- bittensor/core/chain_data/info_base.py | 13 ++++++++++++- bittensor/core/chain_data/ip_info.py | 2 +- bittensor/core/chain_data/metagraph_info.py | 2 +- bittensor/core/chain_data/neuron_info.py | 2 +- bittensor/core/chain_data/neuron_info_lite.py | 2 +- bittensor/core/chain_data/prometheus_info.py | 2 +- .../core/chain_data/scheduled_coldkey_swap_info.py | 2 +- bittensor/core/chain_data/subnet_hyperparameters.py | 2 +- bittensor/core/chain_data/subnet_info.py | 2 +- bittensor/core/chain_data/subnet_state.py | 2 +- 13 files changed, 24 insertions(+), 13 deletions(-) diff --git a/bittensor/core/chain_data/axon_info.py b/bittensor/core/chain_data/axon_info.py index 7751c641de..3bf1fb21e1 100644 --- a/bittensor/core/chain_data/axon_info.py +++ b/bittensor/core/chain_data/axon_info.py @@ -82,7 +82,7 @@ def to_string(self) -> str: return AxonInfo(0, "", 0, 0, "", "").to_string() @classmethod - def from_dict(cls, data): + def _from_dict(cls, data): return AxonInfo( version=data["version"], ip=str(netaddr.IPAddress(data["ip"])), diff --git a/bittensor/core/chain_data/delegate_info.py b/bittensor/core/chain_data/delegate_info.py index c233eaa231..a1f6e71402 100644 --- a/bittensor/core/chain_data/delegate_info.py +++ b/bittensor/core/chain_data/delegate_info.py @@ -39,7 +39,7 @@ class DelegateInfo(InfoBase): total_daily_return: Balance # Total daily return of the delegate @classmethod - def from_dict(cls, decoded: dict) -> Optional["DelegateInfo"]: + def _from_dict(cls, decoded: dict) -> Optional["DelegateInfo"]: nominators = [ (decode_account_id(x), Balance.from_rao(y)) for x, y in decoded["nominators"] diff --git a/bittensor/core/chain_data/dynamic_info.py b/bittensor/core/chain_data/dynamic_info.py index 548c2ca74f..234abb7f43 100644 --- a/bittensor/core/chain_data/dynamic_info.py +++ b/bittensor/core/chain_data/dynamic_info.py @@ -41,7 +41,7 @@ class DynamicInfo(InfoBase): subnet_identity: Optional[SubnetIdentity] @classmethod - def from_dict(cls, decoded: dict) -> "DynamicInfo": + def _from_dict(cls, decoded: dict) -> "DynamicInfo": """Returns a DynamicInfo object from a decoded DynamicInfo dictionary.""" netuid = int(decoded["netuid"]) diff --git a/bittensor/core/chain_data/info_base.py b/bittensor/core/chain_data/info_base.py index 0d354a0e1b..1b17f068b3 100644 --- a/bittensor/core/chain_data/info_base.py +++ b/bittensor/core/chain_data/info_base.py @@ -1,6 +1,8 @@ from dataclasses import dataclass from typing import Any, TypeVar +from bittensor.core.errors import SubstrateRequestException + T = TypeVar("T", bound="InfoBase") @@ -10,8 +12,17 @@ class InfoBase: @classmethod def from_dict(cls, decoded: dict) -> T: - return cls(**decoded) + try: + return cls._from_dict(decoded) + except KeyError as e: + raise SubstrateRequestException( + f"The {cls} structure is missing {e} from the chain.", + ) @classmethod def list_from_dicts(cls, any_list: list[Any]) -> list[T]: return [cls.from_dict(any_) for any_ in any_list] + + @classmethod + def _from_dict(cls, decoded: dict) -> T: + return cls(**decoded) diff --git a/bittensor/core/chain_data/ip_info.py b/bittensor/core/chain_data/ip_info.py index 28357f7068..5e93cc1450 100644 --- a/bittensor/core/chain_data/ip_info.py +++ b/bittensor/core/chain_data/ip_info.py @@ -30,7 +30,7 @@ def encode(self) -> dict[str, Any]: } @classmethod - def from_dict(cls, decoded: dict) -> "IPInfo": + def _from_dict(cls, decoded: dict) -> "IPInfo": """Returns a SubnetInfo object from a decoded IPInfo dictionary.""" return IPInfo( ip_type=decoded["ip_type_and_protocol"] >> 4, diff --git a/bittensor/core/chain_data/metagraph_info.py b/bittensor/core/chain_data/metagraph_info.py index 53802f541d..c2e49815b0 100644 --- a/bittensor/core/chain_data/metagraph_info.py +++ b/bittensor/core/chain_data/metagraph_info.py @@ -132,7 +132,7 @@ class MetagraphInfo(InfoBase): ] # List of dividend payout in alpha via subnet. @classmethod - def from_dict(cls, decoded: dict) -> "MetagraphInfo": + def _from_dict(cls, decoded: dict) -> "MetagraphInfo": """Returns a Metagraph object from a decoded MetagraphInfo dictionary.""" # Subnet index _netuid = decoded["netuid"] diff --git a/bittensor/core/chain_data/neuron_info.py b/bittensor/core/chain_data/neuron_info.py index af9ffb9744..e8bb958ba5 100644 --- a/bittensor/core/chain_data/neuron_info.py +++ b/bittensor/core/chain_data/neuron_info.py @@ -125,7 +125,7 @@ def get_null_neuron() -> "NeuronInfo": return neuron @classmethod - def from_dict(cls, decoded: Any) -> "NeuronInfo": + def _from_dict(cls, decoded: Any) -> "NeuronInfo": """Instantiates NeuronInfo from a byte vector.""" stake_dict = process_stake_data(decoded["stake"]) total_stake = sum(stake_dict.values()) if stake_dict else Balance(0) diff --git a/bittensor/core/chain_data/neuron_info_lite.py b/bittensor/core/chain_data/neuron_info_lite.py index b86499f2ab..e3241839e2 100644 --- a/bittensor/core/chain_data/neuron_info_lite.py +++ b/bittensor/core/chain_data/neuron_info_lite.py @@ -94,7 +94,7 @@ def get_null_neuron() -> "NeuronInfoLite": return neuron @classmethod - def from_dict(cls, decoded: Any) -> "NeuronInfoLite": + def _from_dict(cls, decoded: Any) -> "NeuronInfoLite": coldkey = decode_account_id(decoded["coldkey"]) hotkey = decode_account_id(decoded["hotkey"]) stake_dict = process_stake_data(decoded["stake"]) diff --git a/bittensor/core/chain_data/prometheus_info.py b/bittensor/core/chain_data/prometheus_info.py index b9e873c5a7..6e975cd515 100644 --- a/bittensor/core/chain_data/prometheus_info.py +++ b/bittensor/core/chain_data/prometheus_info.py @@ -25,7 +25,7 @@ class PrometheusInfo(InfoBase): ip_type: int @classmethod - def from_dict(cls, data): + def _from_dict(cls, data): return cls( block=data["block"], ip_type=data["ip_type"], diff --git a/bittensor/core/chain_data/scheduled_coldkey_swap_info.py b/bittensor/core/chain_data/scheduled_coldkey_swap_info.py index 629f48d744..0ad01b2ff2 100644 --- a/bittensor/core/chain_data/scheduled_coldkey_swap_info.py +++ b/bittensor/core/chain_data/scheduled_coldkey_swap_info.py @@ -24,7 +24,7 @@ class ScheduledColdkeySwapInfo(InfoBase): arbitration_block: int @classmethod - def from_dict(cls, decoded: dict) -> "ScheduledColdkeySwapInfo": + def _from_dict(cls, decoded: dict) -> "ScheduledColdkeySwapInfo": return cls( arbitration_block=decoded["arbitration_block"], new_coldkey=ss58_encode(decoded["new_coldkey"], SS58_FORMAT), diff --git a/bittensor/core/chain_data/subnet_hyperparameters.py b/bittensor/core/chain_data/subnet_hyperparameters.py index 30e4511201..ddcbe53b24 100644 --- a/bittensor/core/chain_data/subnet_hyperparameters.py +++ b/bittensor/core/chain_data/subnet_hyperparameters.py @@ -67,7 +67,7 @@ class SubnetHyperparameters(InfoBase): liquid_alpha_enabled: bool @classmethod - def from_dict(cls, decoded: dict) -> "SubnetHyperparameters": + def _from_dict(cls, decoded: dict) -> "SubnetHyperparameters": """ Create a `SubnetHyperparameters` instance from a vector of bytes. diff --git a/bittensor/core/chain_data/subnet_info.py b/bittensor/core/chain_data/subnet_info.py index 3b47ba16d0..b4ae0237aa 100644 --- a/bittensor/core/chain_data/subnet_info.py +++ b/bittensor/core/chain_data/subnet_info.py @@ -31,7 +31,7 @@ class SubnetInfo(InfoBase): owner_ss58: str @classmethod - def from_dict(cls, decoded: Any) -> "SubnetInfo": + def _from_dict(cls, decoded: Any) -> "SubnetInfo": return SubnetInfo( blocks_since_epoch=decoded["blocks_since_last_step"], burn=Balance.from_rao(decoded["burn"]), diff --git a/bittensor/core/chain_data/subnet_state.py b/bittensor/core/chain_data/subnet_state.py index 4254ffad5b..223ef84dee 100644 --- a/bittensor/core/chain_data/subnet_state.py +++ b/bittensor/core/chain_data/subnet_state.py @@ -35,7 +35,7 @@ class SubnetState(InfoBase): emission_history: list[list[int]] @classmethod - def from_dict(cls, decoded: dict) -> "SubnetState": + def _from_dict(cls, decoded: dict) -> "SubnetState": netuid = decoded["netuid"] return SubnetState( netuid=netuid, From 188ef123303ccb97a37c10c7d4c41e73ccb33e53 Mon Sep 17 00:00:00 2001 From: ibraheem-opentensor Date: Mon, 3 Feb 2025 13:05:32 -0800 Subject: [PATCH 18/19] Review changes implemented --- bittensor/core/async_subtensor.py | 37 +-- bittensor/core/chain_data/__init__.py | 5 +- bittensor/core/chain_data/dynamic_info.py | 14 +- .../core/chain_data/neuron_certificate.py | 13 - bittensor/core/chain_data/stake_info.py | 15 +- bittensor/core/chain_data/utils.py | 231 +----------------- bittensor/core/subtensor.py | 29 +-- tests/unit_tests/test_async_subtensor.py | 7 +- 8 files changed, 23 insertions(+), 328 deletions(-) delete mode 100644 bittensor/core/chain_data/neuron_certificate.py diff --git a/bittensor/core/async_subtensor.py b/bittensor/core/async_subtensor.py index bd8a622b3f..b7ac88e323 100644 --- a/bittensor/core/async_subtensor.py +++ b/bittensor/core/async_subtensor.py @@ -1586,42 +1586,7 @@ async def get_stake_for_coldkey( stakes = StakeInfo.list_from_dicts(result) # type: ignore return [stake for stake in stakes if stake.stake > 0] - async def get_stake_info_for_coldkey( - self, - coldkey_ss58: str, - block: Optional[int] = None, - block_hash: Optional[str] = None, - reuse_block: bool = False, - ) -> list[StakeInfo]: - """ - Retrieves stake information associated with a specific coldkey. This function provides details about the stakes - held by an account, including the staked amounts and associated delegates. - - Arguments: - coldkey_ss58 (str): The ``SS58`` address of the account's coldkey. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used block hash. - - Returns: - A list of StakeInfo objects detailing the stake allocations for the account. - - Stake information is vital for account holders to assess their investment and participation in the network's - delegation and consensus processes. - """ - result = await self.query_runtime_api( - runtime_api="StakeInfoRuntimeApi", - method="get_stake_info_for_coldkey", - params=[coldkey_ss58], - block=block, - block_hash=block_hash, - reuse_block=reuse_block, - ) - - if not result: - return [] - - return StakeInfo.list_from_dicts(result) + get_stake_info_for_coldkey = get_stake_for_coldkey async def get_subnet_burn_cost( self, diff --git a/bittensor/core/chain_data/__init__.py b/bittensor/core/chain_data/__init__.py index 24aa6a3967..cdf1eca55d 100644 --- a/bittensor/core/chain_data/__init__.py +++ b/bittensor/core/chain_data/__init__.py @@ -19,7 +19,6 @@ ) from .neuron_info import NeuronInfo from .neuron_info_lite import NeuronInfoLite -from .neuron_certificate import NeuronCertificate from .prometheus_info import PrometheusInfo from .proposal_vote_data import ProposalVoteData from .scheduled_coldkey_swap_info import ScheduledColdkeySwapInfo @@ -29,7 +28,7 @@ from .subnet_info import SubnetInfo from .subnet_state import SubnetState from .weight_commit_info import WeightCommitInfo -from .utils import custom_rpc_type_registry, decode_account_id, process_stake_data +from .utils import decode_account_id, process_stake_data ProposalCallData = GenericCall @@ -46,7 +45,6 @@ MetagraphInfoPool, NeuronInfo, NeuronInfoLite, - NeuronCertificate, PrometheusInfo, ProposalCallData, ProposalVoteData, @@ -57,7 +55,6 @@ SubnetInfo, SubnetState, WeightCommitInfo, - custom_rpc_type_registry, decode_account_id, process_stake_data, ] diff --git a/bittensor/core/chain_data/dynamic_info.py b/bittensor/core/chain_data/dynamic_info.py index 234abb7f43..e229ed5b37 100644 --- a/bittensor/core/chain_data/dynamic_info.py +++ b/bittensor/core/chain_data/dynamic_info.py @@ -6,10 +6,8 @@ from dataclasses import dataclass from typing import Optional, Union -from scalecodec.utils.ss58 import ss58_encode - from bittensor.core.chain_data.info_base import InfoBase -from bittensor.core.chain_data.utils import SS58_FORMAT +from bittensor.core.chain_data.utils import decode_account_id from bittensor.core.chain_data.subnet_identity import SubnetIdentity from bittensor.utils.balance import Balance @@ -52,8 +50,8 @@ def _from_dict(cls, decoded: dict) -> "DynamicInfo": True if int(decoded["netuid"]) > 0 else False ) # Root is not dynamic - owner_hotkey = ss58_encode(decoded["owner_hotkey"], SS58_FORMAT) - owner_coldkey = ss58_encode(decoded["owner_coldkey"], SS58_FORMAT) + owner_hotkey = decode_account_id(decoded["owner_hotkey"]) + owner_coldkey = decode_account_id(decoded["owner_coldkey"]) emission = Balance.from_rao(decoded["emission"]).set_unit(0) alpha_in = Balance.from_rao(decoded["alpha_in"]).set_unit(netuid) @@ -83,9 +81,9 @@ def _from_dict(cls, decoded: dict) -> "DynamicInfo": if decoded.get("subnet_identity"): subnet_identity = SubnetIdentity( - subnet_name=decoded["subnet_identity"]["subnet_name"], - github_repo=decoded["subnet_identity"]["github_repo"], - subnet_contact=decoded["subnet_identity"]["subnet_contact"], + subnet_name=bytes(decoded["subnet_identity"]["subnet_name"]).decode(), + github_repo=bytes(decoded["subnet_identity"]["github_repo"]).decode(), + subnet_contact=bytes(decoded["subnet_identity"]["subnet_contact"]).decode(), ) else: subnet_identity = None diff --git a/bittensor/core/chain_data/neuron_certificate.py b/bittensor/core/chain_data/neuron_certificate.py deleted file mode 100644 index 63cbcc4e81..0000000000 --- a/bittensor/core/chain_data/neuron_certificate.py +++ /dev/null @@ -1,13 +0,0 @@ -from dataclasses import dataclass - -from bittensor.utils import Certificate - - -# Dataclasses for chain data. -@dataclass -class NeuronCertificate: # TODO Info? - """ - Dataclass for neuron certificate. - """ - - certificate: Certificate diff --git a/bittensor/core/chain_data/stake_info.py b/bittensor/core/chain_data/stake_info.py index 360ce6c3fe..533209d51f 100644 --- a/bittensor/core/chain_data/stake_info.py +++ b/bittensor/core/chain_data/stake_info.py @@ -29,12 +29,12 @@ class StakeInfo(InfoBase): is_registered: bool @classmethod - def fix_decoded_values(cls, decoded: dict) -> "StakeInfo": - """Fixes the decoded values.""" + def from_dict(cls, decoded: dict) -> "StakeInfo": + """Returns a StakeInfo object.""" netuid = decoded["netuid"] return cls( - hotkey_ss58=ss58_encode(decoded["hotkey"], SS58_FORMAT), - coldkey_ss58=ss58_encode(decoded["coldkey"], SS58_FORMAT), + hotkey_ss58=decode_account_id(decoded["hotkey"]), + coldkey_ss58=decode_account_id(decoded["coldkey"]), netuid=int(netuid), stake=Balance.from_rao(decoded["stake"]).set_unit(netuid), locked=Balance.from_rao(decoded["locked"]).set_unit(netuid), @@ -43,10 +43,3 @@ def fix_decoded_values(cls, decoded: dict) -> "StakeInfo": is_registered=bool(decoded["is_registered"]), ) - @classmethod - def _fix_decoded(cls, decoded: dict) -> "StakeInfo": - hotkey = decode_account_id(decoded.hotkey) - coldkey = decode_account_id(decoded.coldkey) - stake = Balance.from_rao(decoded.stake) - - return StakeInfo(hotkey, coldkey, stake) diff --git a/bittensor/core/chain_data/utils.py b/bittensor/core/chain_data/utils.py index 0c78514693..bbd0e6c9ed 100644 --- a/bittensor/core/chain_data/utils.py +++ b/bittensor/core/chain_data/utils.py @@ -22,13 +22,12 @@ class ChainDataType(Enum): SubnetHyperparameters = 8 ScheduledColdkeySwapInfo = 9 AccountId = 10 - NeuronCertificate = 11 - SubnetState = 12 - DynamicInfo = 13 - SubnetIdentity = 14 - MetagraphInfo = 15 - ChainIdentity = 16 - AxonInfo = 17 + SubnetState = 11 + DynamicInfo = 12 + SubnetIdentity = 13 + MetagraphInfo = 14 + ChainIdentity = 15 + AxonInfo = 16 def from_scale_encoding( @@ -92,230 +91,12 @@ def from_scale_encoding_using_type_string( rpc_runtime_config = RuntimeConfiguration() rpc_runtime_config.update_type_registry(load_type_registry_preset("legacy")) - rpc_runtime_config.update_type_registry(custom_rpc_type_registry) obj = rpc_runtime_config.create_scale_object(type_string, data=as_scale_bytes) return obj.decode() -custom_rpc_type_registry = { - "types": { - "NeuronCertificate": { - "type": "struct", - "type_mapping": [ - ["certificate", "Vec"], - ], - }, - "axon_info": { - "type": "struct", - "type_mapping": [ - ["block", "u64"], - ["version", "u32"], - ["ip", "u128"], - ["port", "u16"], - ["ip_type", "u8"], - ["protocol", "u8"], - ["placeholder1", "u8"], - ["placeholder2", "u8"], - ], - }, - "PrometheusInfo": { - "type": "struct", - "type_mapping": [ - ["block", "u64"], - ["version", "u32"], - ["ip", "u128"], - ["port", "u16"], - ["ip_type", "u8"], - ], - }, - "IPInfo": { - "type": "struct", - "type_mapping": [ - ["ip", "Compact"], - ["ip_type_and_protocol", "Compact"], - ], - }, - "SubnetState": { - "type": "struct", - "type_mapping": [ - ["netuid", "Compact"], - ["hotkeys", "Vec"], - ["coldkeys", "Vec"], - ["active", "Vec"], - ["validator_permit", "Vec"], - ["pruning_score", "Vec>"], - ["last_update", "Vec>"], - ["emission", "Vec>"], - ["dividends", "Vec>"], - ["incentives", "Vec>"], - ["consensus", "Vec>"], - ["trust", "Vec>"], - ["rank", "Vec>"], - ["block_at_registration", "Vec>"], - ["alpha_stake", "Vec>"], - ["tao_stake", "Vec>"], - ["total_stake", "Vec>"], - ["emission_history", "Vec>>"], - ], - }, - "StakeInfo": { - "type": "struct", - "type_mapping": [ - ["hotkey", "AccountId"], - ["coldkey", "AccountId"], - ["netuid", "Compact"], - ["stake", "Compact"], - ["locked", "Compact"], - ["emission", "Compact"], - ["drain", "Compact"], - ["is_registered", "bool"], - ], - }, - "ScheduledColdkeySwapInfo": { - "type": "struct", - "type_mapping": [ - ["old_coldkey", "AccountId"], - ["new_coldkey", "AccountId"], - ["arbitration_block", "Compact"], - ], - }, - "SubnetIdentity": { - "type": "struct", - "type_mapping": [ - ["subnet_name", "Vec"], - ["github_repo", "Vec"], - ["subnet_contact", "Vec"], - ], - }, - "DynamicInfo": { - "type": "struct", - "type_mapping": [ - ["netuid", "Compact"], - ["owner_hotkey", "AccountId"], - ["owner_coldkey", "AccountId"], - ["subnet_name", "Vec>"], - ["token_symbol", "Vec>"], - ["tempo", "Compact"], - ["last_step", "Compact"], - ["blocks_since_last_step", "Compact"], - ["emission", "Compact"], - ["alpha_in", "Compact"], - ["alpha_out", "Compact"], - ["tao_in", "Compact"], - ["alpha_out_emission", "Compact"], - ["alpha_in_emission", "Compact"], - ["tao_in_emission", "Compact"], - ["pending_alpha_emission", "Compact"], - ["pending_root_emission", "Compact"], - ["network_registered_at", "Compact"], - ["subnet_identity", "Option"], - ], - }, - "MetagraphInfo": { - "type": "struct", - "type_mapping": [ - ["netuid", "Compact"], - ["name", "Vec>"], - ["symbol", "Vec>"], - ["identity", "Option"], - ["network_registered_at", "Compact"], - ["owner_hotkey", "T::AccountId"], - ["owner_coldkey", "T::AccountId"], - ["block", "Compact"], - ["tempo", "Compact"], - ["last_step", "Compact"], - ["blocks_since_last_step", "Compact"], - ["subnet_emission", "Compact"], - ["alpha_in", "Compact"], - ["alpha_out", "Compact"], - ["tao_in", "Compact"], - ["alpha_out_emission", "Compact"], - ["alpha_in_emission", "Compact"], - ["tao_in_emission", "Compact"], - ["pending_alpha_emission", "Compact"], - ["pending_root_emission", "Compact"], - ["rho", "Compact"], - ["kappa", "Compact"], - ["min_allowed_weights", "Compact"], - ["max_weights_limit", "Compact"], - ["weights_version", "Compact"], - ["weights_rate_limit", "Compact"], - ["activity_cutoff", "Compact"], - ["max_validators", "Compact"], - ["num_uids", "Compact"], - ["max_uids", "Compact"], - ["burn", "Compact"], - ["difficulty", "Compact"], - ["registration_allowed", "bool"], - ["pow_registration_allowed", "bool"], - ["immunity_period", "Compact"], - ["min_difficulty", "Compact"], - ["max_difficulty", "Compact"], - ["min_burn", "Compact"], - ["max_burn", "Compact"], - ["adjustment_alpha", "Compact"], - ["adjustment_interval", "Compact"], - ["target_regs_per_interval", "Compact"], - ["max_regs_per_block", "Compact"], - ["serving_rate_limit", "Compact"], - ["commit_reveal_weights_enabled", "bool"], - ["commit_reveal_period", "Compact"], - ["liquid_alpha_enabled", "bool"], - ["alpha_high", "Compact"], - ["alpha_low", "Compact"], - ["bonds_moving_avg", "Compact"], - ["hotkeys", "Vec"], - ["coldkeys", "Vec"], - ["identities", "Vec>"], - ["axons", "Vec"], - ["active", "Vec"], - ["validator_permit", "Vec"], - ["pruning_score", "Vec>"], - ["last_update", "Vec>"], - ["emission", "Vec>"], - ["dividends", "Vec>"], - ["incentives", "Vec>"], - ["consensus", "Vec>"], - ["trust", "Vec>"], - ["rank", "Vec>"], - ["block_at_registration", "Vec>"], - ["alpha_stake", "Vec>"], - ["tao_stake", "Vec>"], - ["total_stake", "Vec>"], - ["tao_dividends_per_hotkey", "Vec<(T::AccountId, Compact)>"], - ["alpha_dividends_per_hotkey", "Vec<(T::AccountId, Compact)>"], - ], - }, - "ChainIdentityOf": { - "type": "struct", - "type_mapping": [ - ["name", "Vec"], - ["url", "Vec"], - ["image", "Vec"], - ["discord", "Vec"], - ["description", "Vec"], - ["additional", "Vec"], - ], - }, - "AxonInfo": { - "type": "struct", - "type_mapping": [ - ["block", "u64"], - ["version", "u32"], - ["ip", "u128"], - ["port", "u16"], - ["ip_type", "u8"], - ["protocol", "u8"], - ["placeholder1", "u8"], - ["placeholder2", "u8"], - ], - }, - } -} - - def decode_account_id(account_id_bytes: Union[bytes, str]) -> str: """ Decodes an AccountId from bytes to a Base64 string using SS58 encoding. diff --git a/bittensor/core/subtensor.py b/bittensor/core/subtensor.py index 82dc728d47..e81db21b55 100644 --- a/bittensor/core/subtensor.py +++ b/bittensor/core/subtensor.py @@ -1201,34 +1201,7 @@ def get_stake_for_coldkey( stakes = StakeInfo.list_from_dicts(result) # type: ignore return [stake for stake in stakes if stake.stake > 0] - def get_stake_info_for_coldkey( - self, coldkey_ss58: str, block: Optional[int] = None - ) -> list["StakeInfo"]: - """ - Retrieves stake information associated with a specific coldkey. This function provides details about the stakes - held by an account, including the staked amounts and associated delegates. - - Arguments: - coldkey_ss58 (str): The ``SS58`` address of the account's coldkey. - block (Optional[int]): The blockchain block number for the query. - - Returns: - A list of StakeInfo objects detailing the stake allocations for the account. - - Stake information is vital for account holders to assess their investment and participation in the network's - delegation and consensus processes. - """ - result = self.query_runtime_api( - runtime_api="StakeInfoRuntimeApi", - method="get_stake_info_for_coldkey", - params=[coldkey_ss58], - block=block, - ) - - if not result: - return [] - - return StakeInfo.list_from_dicts(result) + get_stake_info_for_coldkey = get_stake_for_coldkey def get_subnet_burn_cost(self, block: Optional[int] = None) -> Optional[str]: """ diff --git a/tests/unit_tests/test_async_subtensor.py b/tests/unit_tests/test_async_subtensor.py index 7197374a5b..a2c688b89a 100644 --- a/tests/unit_tests/test_async_subtensor.py +++ b/tests/unit_tests/test_async_subtensor.py @@ -441,7 +441,8 @@ async def test_get_stake_info_for_coldkey(subtensor, mocker, fake_result, respon ) subtensor.query_runtime_api = mocked_query_runtime_api - mocked_stake_info_list_from_dicts = mocker.Mock() + mock_stake_info = mocker.Mock(spec=async_subtensor.StakeInfo, stake=Balance.from_rao(100)) + mocked_stake_info_list_from_dicts = mocker.Mock(return_value=[mock_stake_info] if fake_result else []) async_subtensor.StakeInfo.list_from_dicts = mocked_stake_info_list_from_dicts # Call @@ -451,10 +452,10 @@ async def test_get_stake_info_for_coldkey(subtensor, mocker, fake_result, respon # Asserts if fake_result: - assert result == mocked_stake_info_list_from_dicts.return_value mocked_stake_info_list_from_dicts.assert_called_once_with(fake_result) + assert result == mocked_stake_info_list_from_dicts.return_value else: - assert result == response + assert result == [] mocked_query_runtime_api.assert_called_once_with( runtime_api="StakeInfoRuntimeApi", From 72cf9158e6829b1ebf8cc888744578e470f626b3 Mon Sep 17 00:00:00 2001 From: ibraheem-opentensor Date: Mon, 3 Feb 2025 13:09:28 -0800 Subject: [PATCH 19/19] Ruff --- bittensor/core/chain_data/dynamic_info.py | 4 +++- bittensor/core/chain_data/stake_info.py | 4 ---- tests/unit_tests/test_async_subtensor.py | 8 ++++++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/bittensor/core/chain_data/dynamic_info.py b/bittensor/core/chain_data/dynamic_info.py index e229ed5b37..1b6209be85 100644 --- a/bittensor/core/chain_data/dynamic_info.py +++ b/bittensor/core/chain_data/dynamic_info.py @@ -83,7 +83,9 @@ def _from_dict(cls, decoded: dict) -> "DynamicInfo": subnet_identity = SubnetIdentity( subnet_name=bytes(decoded["subnet_identity"]["subnet_name"]).decode(), github_repo=bytes(decoded["subnet_identity"]["github_repo"]).decode(), - subnet_contact=bytes(decoded["subnet_identity"]["subnet_contact"]).decode(), + subnet_contact=bytes( + decoded["subnet_identity"]["subnet_contact"] + ).decode(), ) else: subnet_identity = None diff --git a/bittensor/core/chain_data/stake_info.py b/bittensor/core/chain_data/stake_info.py index 533209d51f..8b1dbd2ab0 100644 --- a/bittensor/core/chain_data/stake_info.py +++ b/bittensor/core/chain_data/stake_info.py @@ -1,10 +1,7 @@ from dataclasses import dataclass -from scalecodec.utils.ss58 import ss58_encode - from bittensor.core.chain_data.info_base import InfoBase from bittensor.core.chain_data.utils import decode_account_id -from bittensor.core.settings import SS58_FORMAT from bittensor.utils.balance import Balance @@ -42,4 +39,3 @@ def from_dict(cls, decoded: dict) -> "StakeInfo": drain=int(decoded["drain"]), is_registered=bool(decoded["is_registered"]), ) - diff --git a/tests/unit_tests/test_async_subtensor.py b/tests/unit_tests/test_async_subtensor.py index a2c688b89a..405b532961 100644 --- a/tests/unit_tests/test_async_subtensor.py +++ b/tests/unit_tests/test_async_subtensor.py @@ -441,8 +441,12 @@ async def test_get_stake_info_for_coldkey(subtensor, mocker, fake_result, respon ) subtensor.query_runtime_api = mocked_query_runtime_api - mock_stake_info = mocker.Mock(spec=async_subtensor.StakeInfo, stake=Balance.from_rao(100)) - mocked_stake_info_list_from_dicts = mocker.Mock(return_value=[mock_stake_info] if fake_result else []) + mock_stake_info = mocker.Mock( + spec=async_subtensor.StakeInfo, stake=Balance.from_rao(100) + ) + mocked_stake_info_list_from_dicts = mocker.Mock( + return_value=[mock_stake_info] if fake_result else [] + ) async_subtensor.StakeInfo.list_from_dicts = mocked_stake_info_list_from_dicts # Call