Merge ~ack/maas:resource-pools-2.4 into maas:2.4
- Git
- lp:~ack/maas
- resource-pools-2.4
- Merge into 2.4
Status: | Merged | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Merged at revision: | 786679366806f408368e651b44d2af2282e15e19 | ||||||||||||||||||||||||||||
Proposed branch: | ~ack/maas:resource-pools-2.4 | ||||||||||||||||||||||||||||
Merge into: | maas:2.4 | ||||||||||||||||||||||||||||
Diff against target: |
6862 lines (+2422/-1271) 96 files modified
dev/null (+0/-145) src/maasserver/api/machines.py (+11/-4) src/maasserver/api/nodes.py (+9/-0) src/maasserver/api/pods.py (+21/-3) src/maasserver/api/resourcepools.py (+90/-0) src/maasserver/api/tests/test_commissioning.py (+0/-4) src/maasserver/api/tests/test_enlistment.py (+2/-0) src/maasserver/api/tests/test_maas.py (+1/-2) src/maasserver/api/tests/test_machine.py (+13/-0) src/maasserver/api/tests/test_machines.py (+59/-39) src/maasserver/api/tests/test_nodes.py (+28/-2) src/maasserver/api/tests/test_pods.py (+101/-1) src/maasserver/api/tests/test_resourcepool.py (+105/-0) src/maasserver/api/tests/test_resourcepools.py (+59/-0) src/maasserver/api/tests/test_tag.py (+13/-14) src/maasserver/api/users.py (+1/-0) src/maasserver/config.py (+0/-4) src/maasserver/context_processors.py (+2/-6) src/maasserver/forms/__init__.py (+7/-77) src/maasserver/forms/pods.py (+17/-21) src/maasserver/forms/tests/test_machine.py (+1/-0) src/maasserver/forms/tests/test_node.py (+1/-0) src/maasserver/forms/tests/test_pods.py (+212/-134) src/maasserver/forms/tests/test_resourcepool.py (+0/-31) src/maasserver/forms/tests/test_user.py (+0/-20) src/maasserver/migrations/builtin/maasserver/0141_add_default_usergroup.py (+4/-4) src/maasserver/migrations/builtin/maasserver/0157_drop_usergroup_and_role.py (+48/-0) src/maasserver/migrations/builtin/maasserver/0158_pod_default_pool_to_pod.py (+20/-0) src/maasserver/migrations/builtin/maasserver/0159_pod_storage_pools.py (+43/-0) src/maasserver/migrations/builtin/maasserver/0160_storage_pools_notification.py (+37/-0) src/maasserver/migrations/builtin/maasserver/0161_userprofile_auth_last_check_no_now_default.py (+23/-0) src/maasserver/models/__init__.py (+3/-19) src/maasserver/models/bmc.py (+10/-6) src/maasserver/models/node.py (+1/-7) src/maasserver/models/resourcepool.py (+0/-120) src/maasserver/models/tests/test_bmc.py (+12/-13) src/maasserver/models/tests/test_node.py (+5/-80) src/maasserver/models/tests/test_resourcepool.py (+0/-155) src/maasserver/models/tests/test_userprofile.py (+0/-15) src/maasserver/models/user.py (+0/-5) src/maasserver/models/userprofile.py (+0/-8) src/maasserver/node_action.py (+22/-1) src/maasserver/node_constraint_filter_forms.py (+45/-0) src/maasserver/static/css/build.css (+1/-1) src/maasserver/static/js/angular/controllers/add_hardware.js (+23/-5) src/maasserver/static/js/angular/controllers/node_details.js (+19/-2) src/maasserver/static/js/angular/controllers/nodes_list.js (+105/-26) src/maasserver/static/js/angular/controllers/pod_details.js (+7/-2) src/maasserver/static/js/angular/controllers/pods_list.js (+7/-3) src/maasserver/static/js/angular/controllers/tests/test_add_hardware.js (+19/-3) src/maasserver/static/js/angular/controllers/tests/test_node_details.js (+34/-7) src/maasserver/static/js/angular/controllers/tests/test_nodes_list.js (+196/-2) src/maasserver/static/js/angular/controllers/tests/test_pod_details.js (+20/-2) src/maasserver/static/js/angular/controllers/tests/test_pods_list.js (+22/-2) src/maasserver/static/js/angular/directives/machines_table.js (+4/-7) src/maasserver/static/js/angular/directives/tests/test_machines_table.js (+6/-21) src/maasserver/static/js/angular/factories/machines.js (+3/-0) src/maasserver/static/js/angular/factories/resourcepools.js (+42/-0) src/maasserver/static/js/angular/factories/tests/test_machines.js (+1/-1) src/maasserver/static/js/angular/factories/tests/test_resourcepools.js (+42/-0) src/maasserver/static/js/angular/filters/nodes.js (+3/-0) src/maasserver/static/js/angular/filters/tests/test_nodes.js (+15/-0) src/maasserver/static/js/angular/maas.js (+2/-5) src/maasserver/static/js/bundle/maas-min.js (+1/-1) src/maasserver/static/js/bundle/maas-min.js.map (+1/-1) src/maasserver/static/partials/cards/machine.html (+1/-1) src/maasserver/static/partials/machines-table.html (+6/-12) src/maasserver/static/partials/node-details.html (+1/-1) src/maasserver/static/partials/nodes-list.html (+145/-25) src/maasserver/static/partials/pod-details.html (+22/-14) src/maasserver/static/partials/pods-list.html (+2/-0) src/maasserver/static/scss/_maas.scss (+4/-0) src/maasserver/static/scss/_tables.scss (+2/-2) src/maasserver/templates/maasserver/base.html (+3/-0) src/maasserver/templates/maasserver/index.html (+6/-0) src/maasserver/templates/maasserver/js-conf.html (+1/-2) src/maasserver/testing/factory.py (+5/-40) src/maasserver/tests/test_auth.py (+0/-11) src/maasserver/tests/test_node_action.py (+13/-27) src/maasserver/tests/test_node_constraint_filter_forms.py (+70/-0) src/maasserver/triggers/__init__.py (+6/-0) src/maasserver/triggers/testing.py (+16/-0) src/maasserver/triggers/tests/test_init.py (+6/-0) src/maasserver/triggers/tests/test_websocket_listener.py (+214/-0) src/maasserver/triggers/websocket.py (+66/-0) src/maasserver/urls_api.py (+14/-1) src/maasserver/websockets/base.py (+4/-0) src/maasserver/websockets/handlers/__init__.py (+2/-0) src/maasserver/websockets/handlers/machine.py (+8/-0) src/maasserver/websockets/handlers/node.py (+3/-6) src/maasserver/websockets/handlers/pod.py (+5/-0) src/maasserver/websockets/handlers/resourcepool.py (+68/-0) src/maasserver/websockets/handlers/tests/test_machine.py (+9/-14) src/maasserver/websockets/handlers/tests/test_pod.py (+30/-84) src/maasserver/websockets/handlers/tests/test_resourcepool.py (+89/-0) src/maasserver/websockets/tests/test_protocol.py (+2/-0) |
||||||||||||||||||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
MAAS Lander | Approve | ||
MAAS Maintainers | Pending | ||
Review via email: mp+347227@code.launchpad.net |
Commit message
LP: #1773454 - Assigning multiple machines to a newly created pool only does for the first machine
LP: #1773456 - make machine counts on the pool listing page links to machine listing with filters
LP: #1773437 - fix the initial value of the object tracking adding a pool
Rename Pod.default_pool to Pod.pool.
It was originaly default_pool, since pools are tied to permissions, but pods
weren't covered. Now that pools don't deal with permissions, it was decided to
name it pool, since pods will most be part of the RBAC work later.
I renamed the DB patches, since we want to backport this change.
Allow speciying a resource pool when composing a machine in a pod.
Ensure that default resource pool for pods can be managed via the API.
Add ability to change default_
Fix the get_pod_
It called self.list_pools() with arguments, but list_pools() doesn't
accept any arguments.
Tests were passing, since list_pools() was mocked in the tests. I added
a new fake, which can be used to mock things at a lower level, so that
more of the functionality can be tested.
Upgrade from using default_
This allows the old path to work by handling the default_
add configauth option to select which candid domain to authenticate users with
Model and discovery storage pools on virsh pods. Add storage pools to API output for pods.
Allow specifying default resource pool when creating or editing pods in the UI.
add form to edit a pool
add form field for resource pool selection when creating a machine
drop IS_PREMIUM flag, expose resource pools UI
drop UserGroup and Role models, and related logic
add resource pools API
Don't allow non-admins to add or delete resource pools.
Show the Pools top-level link on the settings page. Before the link would
disappear if you went to the settings page.
add resource pools UI
Description of the change
DO NOT MERGE, the MP is only for having CI running tests
MAAS Lander (maas-lander) wrote : | # |
UNIT TESTS
-b resource-pools-2.4 lp:~ack/maas/+git/maas into -b 2.4 lp:~maas-committers/maas
STATUS: SUCCESS
COMMIT: 786679366806f40
Alberto Donato (ack) wrote : | # |
This ran successfully through CI: http://
Preview Diff
1 | diff --git a/src/maasserver/api/machines.py b/src/maasserver/api/machines.py |
2 | index 1335011..35ed712 100644 |
3 | --- a/src/maasserver/api/machines.py |
4 | +++ b/src/maasserver/api/machines.py |
5 | @@ -128,6 +128,7 @@ DISPLAYED_MACHINE_FIELDS = ( |
6 | 'ip_addresses', |
7 | ('interface_set', DISPLAYED_INTERFACE_FIELDS), |
8 | 'zone', |
9 | + 'pool', |
10 | 'disable_ipv4', |
11 | 'constraints_by_type', |
12 | 'boot_disk', |
13 | @@ -1462,6 +1463,15 @@ class MachinesHandler(NodesHandler, PowersMixin): |
14 | exclude, this parameter must be repeated in the request with each |
15 | value. |
16 | :type not_in_zone: unicode (accepts multiple) |
17 | + :param pool: Resource pool name the machine must belong to. |
18 | + :type pool: unicode |
19 | + :param not_in_pool: List of resource pool from which the machine must |
20 | + not be acquired. |
21 | + |
22 | + If multiple pools are specified, the machine must NOT be associated |
23 | + with ANY of them. To request multiple pools to exclude, this |
24 | + parameter must be repeated in the request with each value. |
25 | + :type not_in_pool: unicode (accepts multiple) |
26 | :param pod: Pod the machine must be located in. |
27 | :type pod: unicode |
28 | :param not_pod: Pod the machine must not be located in. |
29 | @@ -1662,10 +1672,7 @@ class MachinesHandler(NodesHandler, PowersMixin): |
30 | "architecture": architecture, |
31 | "storage": storage, |
32 | } |
33 | - # Only match allocation if Pod's zone matches. |
34 | - pods = Pod.objects.filter( |
35 | - Q(default_pool__role__users=request.user) | |
36 | - Q(default_pool__role__groups__users=request.user)) |
37 | + pods = Pod.objects.all() |
38 | if zone is not None: |
39 | pods = pods.filter(zone__name=zone) |
40 | if pods: |
41 | diff --git a/src/maasserver/api/nodes.py b/src/maasserver/api/nodes.py |
42 | index b60e029..e61bf9b 100644 |
43 | --- a/src/maasserver/api/nodes.py |
44 | +++ b/src/maasserver/api/nodes.py |
45 | @@ -209,6 +209,8 @@ def filtered_nodes_list_from_request(request, model=None): |
46 | the nodes in the domain will be returned. |
47 | :param zone: An optional name for a physical zone. Only events relating to |
48 | the nodes in the zone will be returned. |
49 | + :param pool: An optional name for a resource pool. Only nodes belonging |
50 | + to the pool will be returned. |
51 | :param agent_name: An optional agent name. Only events relating to the |
52 | nodes with matching agent names will be returned. |
53 | """ |
54 | @@ -239,6 +241,9 @@ def filtered_nodes_list_from_request(request, model=None): |
55 | match_zone_name = request.GET.get('zone', None) |
56 | if match_zone_name is not None: |
57 | nodes = nodes.filter(zone__name=match_zone_name) |
58 | + match_pool_name = request.GET.get('pool', None) |
59 | + if match_pool_name is not None: |
60 | + nodes = nodes.filter(pool__name=match_pool_name) |
61 | match_agent_name = request.GET.get('agent_name', None) |
62 | if match_agent_name is not None: |
63 | nodes = nodes.filter(agent_name=match_agent_name) |
64 | @@ -593,6 +598,10 @@ class NodesHandler(OperationsHandler): |
65 | to the nodes in the zone will be returned. |
66 | :type zone: unicode |
67 | |
68 | + :param pool: An optional name for a resource pool. Only nodes belonging |
69 | + to the pool will be returned. |
70 | + :type pool: unicode |
71 | + |
72 | :param agent_name: An optional agent name. Only nodes relating to the |
73 | nodes with matching agent names will be returned. |
74 | :type agent_name: unicode |
75 | diff --git a/src/maasserver/api/pods.py b/src/maasserver/api/pods.py |
76 | index 2f3c1ae..6bfdcbf 100644 |
77 | --- a/src/maasserver/api/pods.py |
78 | +++ b/src/maasserver/api/pods.py |
79 | @@ -42,6 +42,7 @@ DISPLAYED_POD_FIELDS = ( |
80 | 'zone', |
81 | 'cpu_over_commit_ratio', |
82 | 'memory_over_commit_ratio', |
83 | + 'pool', |
84 | ) |
85 | |
86 | |
87 | @@ -98,12 +99,23 @@ class PodHandler(OperationsHandler): |
88 | def update(self, request, id): |
89 | """Update a specific Pod. |
90 | |
91 | - :param name: Name for the pod (optional). |
92 | + :param name: Name for the pod |
93 | :type name: unicode |
94 | - :param cpu_over_commit_ratio: CPU over commit ratio (optional). |
95 | + :param pool: Name of resource pool this pod belongs and that |
96 | + composed machines get assigned to by default. |
97 | + :type pool: unicode |
98 | + :param cpu_over_commit_ratio: CPU over commit ratio |
99 | :type cpu_over_commit_ratio: unicode |
100 | - :param memory_over_commit_ratio: Memory over commit ratio (optional). |
101 | + :param memory_over_commit_ratio: Memory over commit ratio |
102 | :type memory_over_commit_ratio: unicode |
103 | + :param power_address: Address for power control of the pod |
104 | + :type power_address: unicode |
105 | + :param power_pass: Password for power control of the pod |
106 | + :type power_pass: unicode |
107 | + :param zone: Name of the zone for the pod |
108 | + :type zone: unicode |
109 | + :param tags: A tag or tags (separated by comma) for the pod. |
110 | + :type tags: unicode |
111 | |
112 | Note: 'type' cannot be updated on a Pod. The Pod must be deleted and |
113 | re-added to change the type. |
114 | @@ -194,6 +206,9 @@ class PodHandler(OperationsHandler): |
115 | :type domain: unicode |
116 | :param zone: ID of zone place the newly composed machine in. |
117 | :type zone: unicode |
118 | + :param pool: ID of resource pool to place the newly composed machine |
119 | + in. |
120 | + :type pool: unicode |
121 | |
122 | Returns 404 if the pod is not found. |
123 | Returns 403 if the user does not have permission to compose machine. |
124 | @@ -298,6 +313,9 @@ class PodsHandler(OperationsHandler): |
125 | :type name: unicode |
126 | :param zone: Name of the zone for the pod (optional). |
127 | :type zone: unicode |
128 | + :param pool: Name of resource pool this pod belongs and that |
129 | + composed machines get assigned to by default (optional). |
130 | + :type pool: unicode |
131 | :param tags: A tag or tags (separated by comma) for the pod (optional). |
132 | :type tags: unicode |
133 | |
134 | diff --git a/src/maasserver/api/resourcepools.py b/src/maasserver/api/resourcepools.py |
135 | new file mode 100644 |
136 | index 0000000..cb232d9 |
137 | --- /dev/null |
138 | +++ b/src/maasserver/api/resourcepools.py |
139 | @@ -0,0 +1,90 @@ |
140 | +# Copyright 2018 Canonical Ltd. This software is licensed under the |
141 | +# GNU Affero General Public License version 3 (see the file LICENSE). |
142 | + |
143 | +"""API handlers: `ResourcePool`.""" |
144 | + |
145 | +__all__ = [ |
146 | + 'ResourcePoolHandler', |
147 | + 'ResourcePoolsHandler', |
148 | +] |
149 | + |
150 | +from maasserver.api.support import ( |
151 | + AnonymousOperationsHandler, |
152 | + ModelCollectionOperationsHandler, |
153 | + ModelOperationsHandler, |
154 | +) |
155 | +from maasserver.forms import ResourcePoolForm |
156 | +from maasserver.models import ResourcePool |
157 | + |
158 | + |
159 | +DISPLAYED_RESOURCEPOOL_FIELDS = ( |
160 | + 'id', |
161 | + 'name', |
162 | + 'description', |
163 | +) |
164 | + |
165 | + |
166 | +class AnonResourcePoolHandler(AnonymousOperationsHandler): |
167 | + """Anonymous access to a resource pool.""" |
168 | + read = create = update = delete = None |
169 | + model = ResourcePool |
170 | + fields = DISPLAYED_RESOURCEPOOL_FIELDS |
171 | + |
172 | + |
173 | +class ResourcePoolHandler(ModelOperationsHandler): |
174 | + """Manage a resource pool.""" |
175 | + |
176 | + model = ResourcePool |
177 | + fields = DISPLAYED_RESOURCEPOOL_FIELDS |
178 | + model_form = ResourcePoolForm |
179 | + handler_url_name = 'resourcepool_handler' |
180 | + api_doc_section_name = 'Resource pool' |
181 | + |
182 | + def read(self, request, id): |
183 | + """GET request. Return resource pool. |
184 | + |
185 | + Returns 404 if the resource pool is not found. |
186 | + """ |
187 | + return super().read(request, id=id) |
188 | + |
189 | + def update(self, request, id): |
190 | + """PUT request. Update resource pool. |
191 | + |
192 | + Returns 404 if the resource pool is not found. |
193 | + """ |
194 | + return super().update(request, id=id) |
195 | + |
196 | + def delete(self, request, id): |
197 | + """DELETE request. Delete resource pool. |
198 | + |
199 | + Returns 404 if the resource pool is not found. |
200 | + Returns 204 if the resource pool is successfully deleted. |
201 | + """ |
202 | + return super().delete(request, id=id) |
203 | + |
204 | + |
205 | +class ResourcePoolsHandler(ModelCollectionOperationsHandler): |
206 | + """Manage resource pools.""" |
207 | + |
208 | + model_manager = ResourcePool.objects |
209 | + fields = DISPLAYED_RESOURCEPOOL_FIELDS |
210 | + model_form = ResourcePoolForm |
211 | + handler_url_name = 'resourcepools_handler' |
212 | + api_doc_section_name = 'Resource pools' |
213 | + |
214 | + def create(self, request): |
215 | + """Create a new resource pool. |
216 | + |
217 | + :param name: Identifier-style name for the new resource pool. |
218 | + :type name: unicode |
219 | + :param description: Free-form description of the new resource pool. |
220 | + :type description: unicode |
221 | + """ |
222 | + return super().create(request) |
223 | + |
224 | + def read(self, request): |
225 | + """List resource pools. |
226 | + |
227 | + Get a listing of all the resource pools. |
228 | + """ |
229 | + return super().read(request) |
230 | diff --git a/src/maasserver/api/tests/test_commissioning.py b/src/maasserver/api/tests/test_commissioning.py |
231 | index 22e80df..f88c81c 100644 |
232 | --- a/src/maasserver/api/tests/test_commissioning.py |
233 | +++ b/src/maasserver/api/tests/test_commissioning.py |
234 | @@ -326,10 +326,6 @@ class NodeCommissionResultHandlerAPITest(APITestCase.ForUser): |
235 | owner=factory.make_User(), with_empty_script_sets=True) |
236 | for script_result in node.current_commissioning_script_set: |
237 | self.store_result(script_result, exit_status=0) |
238 | - node = factory.make_Node( |
239 | - pool=factory.make_ResourcePool(), with_empty_script_sets=True) |
240 | - for script_result in node.current_commissioning_script_set: |
241 | - self.store_result(script_result, exit_status=0) |
242 | |
243 | url = reverse('node_results_handler') |
244 | response = self.client.get(url) |
245 | diff --git a/src/maasserver/api/tests/test_enlistment.py b/src/maasserver/api/tests/test_enlistment.py |
246 | index 0087243..3319116 100644 |
247 | --- a/src/maasserver/api/tests/test_enlistment.py |
248 | +++ b/src/maasserver/api/tests/test_enlistment.py |
249 | @@ -546,6 +546,7 @@ class SimpleUserLoggedInEnlistmentAPITest(APITestCase.ForUser): |
250 | 'storage', |
251 | 'memory', |
252 | 'swap_size', |
253 | + 'pool', |
254 | 'zone', |
255 | 'disable_ipv4', |
256 | 'address_ttl', |
257 | @@ -743,6 +744,7 @@ class AdminLoggedInEnlistmentAPITest(APITestCase.ForAdmin): |
258 | 'memory', |
259 | 'swap_size', |
260 | 'zone', |
261 | + 'pool', |
262 | 'disable_ipv4', |
263 | 'address_ttl', |
264 | 'boot_disk', |
265 | diff --git a/src/maasserver/api/tests/test_maas.py b/src/maasserver/api/tests/test_maas.py |
266 | index d7b8a04..4d268fa 100644 |
267 | --- a/src/maasserver/api/tests/test_maas.py |
268 | +++ b/src/maasserver/api/tests/test_maas.py |
269 | @@ -41,8 +41,7 @@ FORBIDDEN_NAMES = { |
270 | "omapi_key", "rpc_region_certificate", |
271 | "rpc_shared_secret", "commissioning_osystem", |
272 | "active_discovery_last_scan", "uuid", "external_auth_url", |
273 | - "external_auth_user", "external_auth_key", |
274 | - "macaroon_private_key", |
275 | + "external_auth_user", "external_auth_key", "macaroon_private_key", |
276 | } |
277 | |
278 | |
279 | diff --git a/src/maasserver/api/tests/test_machine.py b/src/maasserver/api/tests/test_machine.py |
280 | index 46df780..524f41b 100644 |
281 | --- a/src/maasserver/api/tests/test_machine.py |
282 | +++ b/src/maasserver/api/tests/test_machine.py |
283 | @@ -203,6 +203,19 @@ class TestMachineAPI(APITestCase.ForUser): |
284 | parsed_result['zone']['name'], |
285 | parsed_result['zone']['description']]) |
286 | |
287 | + def test_GET_returns_pool(self): |
288 | + pool = factory.make_ResourcePool() |
289 | + machine = factory.make_Node(pool=pool) |
290 | + response = self.client.get(self.get_machine_uri(machine)) |
291 | + self.assertEqual(http.client.OK, response.status_code) |
292 | + result = json_load_bytes(response.content) |
293 | + self.assertEqual( |
294 | + result['pool'], |
295 | + {'id': pool.id, |
296 | + 'name': pool.name, |
297 | + 'description': pool.description, |
298 | + 'resource_uri': reverse('resourcepool_handler', args=[pool.id])}) |
299 | + |
300 | def test_GET_returns_boot_interface(self): |
301 | machine = factory.make_Node(interface=True) |
302 | machine.boot_interface = machine.interface_set.first() |
303 | diff --git a/src/maasserver/api/tests/test_machines.py b/src/maasserver/api/tests/test_machines.py |
304 | index 4f0a65e..882454e 100644 |
305 | --- a/src/maasserver/api/tests/test_machines.py |
306 | +++ b/src/maasserver/api/tests/test_machines.py |
307 | @@ -346,12 +346,12 @@ class TestMachinesAPI(APITestCase.ForUser): |
308 | ]) |
309 | |
310 | # Because of fields `status_action`, `status_message`, |
311 | - # `default_gateways`, `health_status` and 'special_filesystems' the |
312 | - # number of queries is not the same but it is proportional to the |
313 | - # number of machines. |
314 | + # `default_gateways`, `health_status`, 'special_filesystems' and |
315 | + # 'resource_pool' the number of queries is not the same but it is |
316 | + # proportional to the number of machines. |
317 | DEFAULT_NUM = 61 |
318 | - self.assertEqual(DEFAULT_NUM + (10 * 5), num_queries1) |
319 | - self.assertEqual(DEFAULT_NUM + (20 * 5), num_queries2) |
320 | + self.assertEqual(DEFAULT_NUM + (10 * 6), num_queries1) |
321 | + self.assertEqual(DEFAULT_NUM + (20 * 6), num_queries2) |
322 | |
323 | def test_GET_without_machines_returns_empty_list(self): |
324 | # If there are no machines to list, the "read" op still works but |
325 | @@ -680,7 +680,7 @@ class TestMachinesAPI(APITestCase.ForUser): |
326 | self.assertEqual(machine.system_id, parsed_result['system_id']) |
327 | self.assertThat(mock_compose, MockCalledOnceWith()) |
328 | |
329 | - def test_POST_allocate_returns_a_composed_machine_with_pool_access(self): |
330 | + def test_POST_allocate_returns_a_composed_machine(self): |
331 | # The "allocate" operation returns a composed machine. |
332 | def compose_machine(*args, **kwargs): |
333 | return factory.make_Node( |
334 | @@ -692,9 +692,9 @@ class TestMachinesAPI(APITestCase.ForUser): |
335 | "amd64/generic", "i386/generic", |
336 | "armhf/generic", "arm64/generic" |
337 | ] |
338 | - pool = factory.make_ResourcePool(users=[self.user]) |
339 | + pool = factory.make_ResourcePool() |
340 | pod = factory.make_Pod( |
341 | - architectures=architectures, default_pool=pool) |
342 | + architectures=architectures, pool=pool) |
343 | pod.hints.cores = random.randint(8, 16) |
344 | pod.hints.memory = random.randint(4096, 8192) |
345 | pod.hints.save() |
346 | @@ -716,37 +716,6 @@ class TestMachinesAPI(APITestCase.ForUser): |
347 | response.content.decode(settings.DEFAULT_CHARSET)) |
348 | self.assertEqual(pod_machine_hostname, parsed_result['hostname']) |
349 | |
350 | - def test_POST_allocate_no_composed_machine_with_no_pool_access(self): |
351 | - # The "allocate" operation returns a composed machine. |
352 | - def compose_machine(*args, **kwargs): |
353 | - return factory.make_Node( |
354 | - status=NODE_STATUS.READY, owner=None, with_boot_disk=True, |
355 | - bmc=pod) |
356 | - architectures = [ |
357 | - "amd64/generic", "i386/generic", |
358 | - "armhf/generic", "arm64/generic" |
359 | - ] |
360 | - pool = factory.make_ResourcePool(users=[]) |
361 | - pod = factory.make_Pod( |
362 | - architectures=architectures, default_pool=pool) |
363 | - pod.hints.cores = random.randint(8, 16) |
364 | - pod.hints.memory = random.randint(4096, 8192) |
365 | - pod.hints.save() |
366 | - mock_list_all_usable_architectures = self.patch( |
367 | - forms_module, 'list_all_usable_architectures') |
368 | - mock_list_all_usable_architectures.return_value = sorted( |
369 | - pod.architectures) |
370 | - mock_compose = self.patch(ComposeMachineForm, 'compose') |
371 | - mock_compose.side_effect = compose_machine |
372 | - response = self.client.post( |
373 | - reverse('machines_handler'), { |
374 | - 'op': 'allocate', |
375 | - 'cpu_count': pod.hints.cores, |
376 | - 'mem': pod.hints.memory, |
377 | - 'arch': 'amd64' |
378 | - }) |
379 | - self.assertEqual(http.client.CONFLICT, response.status_code) |
380 | - |
381 | def test_POST_allocate_returns_a_composed_machine_with_zone(self): |
382 | # The "allocate" operation returns a composed machine with zone of Pod. |
383 | available_status = NODE_STATUS.READY |
384 | @@ -1396,6 +1365,37 @@ class TestMachinesAPI(APITestCase.ForUser): |
385 | }) |
386 | self.assertEqual(http.client.BAD_REQUEST, response.status_code) |
387 | |
388 | + def test_POST_allocate_allocates_machine_by_pool(self): |
389 | + node1 = factory.make_Node( |
390 | + status=NODE_STATUS.READY, with_boot_disk=True) |
391 | + factory.make_Node(status=NODE_STATUS.READY, with_boot_disk=True) |
392 | + pool = factory.make_ResourcePool(nodes=[node1]) |
393 | + response = self.client.post(reverse('machines_handler'), { |
394 | + 'op': 'allocate', |
395 | + 'pool': pool.name, |
396 | + }) |
397 | + self.assertThat(response, HasStatusCode(http.client.OK)) |
398 | + response_json = json.loads( |
399 | + response.content.decode(settings.DEFAULT_CHARSET)) |
400 | + self.assertEqual(node1.system_id, response_json['system_id']) |
401 | + |
402 | + def test_POST_allocate_allocates_machine_by_pool_fails_if_no_machine(self): |
403 | + factory.make_Node( |
404 | + status=NODE_STATUS.READY, with_boot_disk=True) |
405 | + pool = factory.make_ResourcePool() |
406 | + response = self.client.post(reverse('machines_handler'), { |
407 | + 'op': 'allocate', |
408 | + 'pool': pool.name, |
409 | + }) |
410 | + self.assertThat(response, HasStatusCode(http.client.CONFLICT)) |
411 | + |
412 | + def test_POST_allocate_rejects_unknown_pool(self): |
413 | + response = self.client.post(reverse('machines_handler'), { |
414 | + 'op': 'allocate', |
415 | + 'pool': factory.make_name('pool'), |
416 | + }) |
417 | + self.assertEqual(http.client.BAD_REQUEST, response.status_code) |
418 | + |
419 | def test_POST_allocate_allocates_machine_by_tags_comma_separated(self): |
420 | machine = factory.make_Node( |
421 | status=NODE_STATUS.READY, with_boot_disk=True) |
422 | @@ -1713,6 +1713,26 @@ class TestMachinesAPI(APITestCase.ForUser): |
423 | response.content.decode(settings.DEFAULT_CHARSET))['system_id'] |
424 | self.assertEqual(eligible_machine.system_id, system_id) |
425 | |
426 | + def test_POST_allocate_obeys_not_in_pool(self): |
427 | + # Pool we don't want to acquire from. |
428 | + node1 = factory.make_Node( |
429 | + status=NODE_STATUS.READY, with_boot_disk=True) |
430 | + node2 = factory.make_Node( |
431 | + status=NODE_STATUS.READY, with_boot_disk=True) |
432 | + pool1 = factory.make_ResourcePool(nodes=[node1]) |
433 | + factory.make_ResourcePool(nodes=[node2]) |
434 | + |
435 | + response = self.client.post( |
436 | + reverse('machines_handler'), |
437 | + { |
438 | + 'op': 'allocate', |
439 | + 'not_in_pool': [pool1.name], |
440 | + }) |
441 | + self.assertEqual(http.client.OK, response.status_code) |
442 | + system_id = json.loads( |
443 | + response.content.decode(settings.DEFAULT_CHARSET))['system_id'] |
444 | + self.assertEqual(node2.system_id, system_id) |
445 | + |
446 | def test_POST_allocate_sets_a_token(self): |
447 | # "acquire" should set the Token being used in the request on |
448 | # the Machine that is allocated. |
449 | diff --git a/src/maasserver/api/tests/test_nodes.py b/src/maasserver/api/tests/test_nodes.py |
450 | index 6d24982..2e145fd 100644 |
451 | --- a/src/maasserver/api/tests/test_nodes.py |
452 | +++ b/src/maasserver/api/tests/test_nodes.py |
453 | @@ -127,8 +127,10 @@ def extract_system_ids_from_nodes(nodes): |
454 | |
455 | |
456 | class RequestFixture: |
457 | - def __init__(self, dict, fields): |
458 | - self.user = factory.make_User() |
459 | + def __init__(self, dict, fields, user=None): |
460 | + if user is None: |
461 | + user = factory.make_User() |
462 | + self.user = user |
463 | self.GET = get_overridden_query_dict(dict, QueryDict(''), fields) |
464 | |
465 | |
466 | @@ -320,6 +322,30 @@ class TestFilteredNodesListFromRequest(APITestCase.ForUser): |
467 | [node.system_id for node in nodes], |
468 | extract_system_ids_from_nodes(node_list)) |
469 | |
470 | + def test_node_list_with_pool_filters_by_pool(self): |
471 | + pool1 = factory.make_ResourcePool() |
472 | + pool2 = factory.make_ResourcePool() |
473 | + node1 = factory.make_Node(pool=pool1) |
474 | + factory.make_Node(pool=pool2) |
475 | + |
476 | + query = RequestFixture({'pool': pool1.name}, 'pool', self.user) |
477 | + node_list = nodes_module.filtered_nodes_list_from_request(query) |
478 | + |
479 | + self.assertSequenceEqual( |
480 | + [node1.system_id], extract_system_ids_from_nodes(node_list)) |
481 | + |
482 | + def test_node_list_without_pool_does_not_filter(self): |
483 | + nodes = [ |
484 | + factory.make_Node(pool=factory.make_ResourcePool()) |
485 | + for _ in range(3)] |
486 | + |
487 | + query = RequestFixture({}, '', self.user) |
488 | + node_list = nodes_module.filtered_nodes_list_from_request(query) |
489 | + |
490 | + self.assertSequenceEqual( |
491 | + [node.system_id for node in nodes], |
492 | + extract_system_ids_from_nodes(node_list)) |
493 | + |
494 | |
495 | class TestNodesAPI(APITestCase.ForUser): |
496 | """Tests for /api/2.0/nodes/.""" |
497 | diff --git a/src/maasserver/api/tests/test_pods.py b/src/maasserver/api/tests/test_pods.py |
498 | index a5e7535..75eb374 100644 |
499 | --- a/src/maasserver/api/tests/test_pods.py |
500 | +++ b/src/maasserver/api/tests/test_pods.py |
501 | @@ -120,7 +120,8 @@ class TestPodsAPI(APITestCase.ForUser, PodMixin): |
502 | 'zone', |
503 | 'available', |
504 | 'cpu_over_commit_ratio', |
505 | - 'memory_over_commit_ratio' |
506 | + 'memory_over_commit_ratio', |
507 | + 'pool', |
508 | ], |
509 | list(parsed_result[0])) |
510 | self.assertItemsEqual( |
511 | @@ -165,6 +166,17 @@ class TestPodsAPI(APITestCase.ForUser, PodMixin): |
512 | parsed_result = json_load_bytes(response.content) |
513 | self.assertEqual(parsed_result['type'], pod_info['type']) |
514 | |
515 | + def test_create_creates_pod_with_default_resource_pool(self): |
516 | + self.become_admin() |
517 | + discovered_pod, _, _ = self.fake_pod_discovery() |
518 | + pod_info = self.make_pod_info() |
519 | + pool = factory.make_ResourcePool() |
520 | + pod_info['pool'] = pool.name |
521 | + response = self.client.post(reverse('pods_handler'), pod_info) |
522 | + self.assertEqual(http.client.OK, response.status_code) |
523 | + parsed_result = json_load_bytes(response.content) |
524 | + self.assertEqual(pool.id, parsed_result['pool']['id']) |
525 | + |
526 | def test_create_duplicate_provides_nice_error(self): |
527 | self.become_admin() |
528 | pod_info = self.make_pod_info() |
529 | @@ -242,6 +254,38 @@ class TestPodAPI(APITestCase.ForUser, PodMixin): |
530 | self.assertEqual( |
531 | http.client.FORBIDDEN, response.status_code, response.content) |
532 | |
533 | + def test_PUT_updates(self): |
534 | + self.become_admin() |
535 | + pod = factory.make_Pod(pod_type='virsh') |
536 | + new_name = factory.make_name('pod') |
537 | + new_tags = [factory.make_name('tag'), factory.make_name('tag')] |
538 | + new_pool = factory.make_ResourcePool() |
539 | + new_zone = factory.make_Zone() |
540 | + new_power_parameters = { |
541 | + 'default_storage_pool': factory.make_name('storage-pool'), |
542 | + 'power_address': 'qemu+ssh://1.2.3.4/system', |
543 | + 'power_pass': factory.make_name('pass'), |
544 | + } |
545 | + discovered_pod, _, _ = self.fake_pod_discovery() |
546 | + response = self.client.put(get_pod_uri(pod), { |
547 | + 'name': new_name, |
548 | + 'tags': ','.join(new_tags), |
549 | + 'default_storage_pool': new_power_parameters[ |
550 | + 'default_storage_pool'], |
551 | + 'power_address': new_power_parameters['power_address'], |
552 | + 'power_pass': new_power_parameters['power_pass'], |
553 | + 'zone': new_zone.name, |
554 | + 'pool': new_pool.name, |
555 | + }) |
556 | + self.assertEqual( |
557 | + http.client.OK, response.status_code, response.content) |
558 | + pod.refresh_from_db() |
559 | + self.assertEqual(new_name, pod.name) |
560 | + self.assertEqual(new_pool, pod.pool) |
561 | + self.assertItemsEqual(new_tags, pod.tags) |
562 | + self.assertEqual(new_power_parameters, pod.power_parameters) |
563 | + self.assertEqual(new_zone, pod.zone) |
564 | + |
565 | def test_PUT_updates_discovers_syncs_and_returns_pod(self): |
566 | self.become_admin() |
567 | pod_info = self.make_pod_info() |
568 | @@ -261,6 +305,27 @@ class TestPodAPI(APITestCase.ForUser, PodMixin): |
569 | self.assertEqual(new_name, parsed_output['name']) |
570 | self.assertEqual(discovered_pod.cores, parsed_output['total']['cores']) |
571 | |
572 | + def test_PUT_update_minimal(self): |
573 | + self.become_admin() |
574 | + pod_info = self.make_pod_info() |
575 | + power_parameters = { |
576 | + 'default_storage_pool': factory.make_name(), |
577 | + 'power_address': pod_info['power_address'], |
578 | + 'power_pass': pod_info['power_pass'], |
579 | + } |
580 | + pod = factory.make_Pod( |
581 | + pod_type=pod_info['type'], parameters=power_parameters) |
582 | + new_name = factory.make_name('pool') |
583 | + self.fake_pod_discovery() |
584 | + response = self.client.put(get_pod_uri(pod), { |
585 | + 'name': new_name, |
586 | + }) |
587 | + self.assertEqual( |
588 | + http.client.OK, response.status_code, response.content) |
589 | + pod.refresh_from_db() |
590 | + self.assertEqual(new_name, pod.name) |
591 | + self.assertEqual(power_parameters, pod.power_parameters) |
592 | + |
593 | def test_refresh_requires_admin(self): |
594 | pod = factory.make_Pod() |
595 | response = self.client.post(get_pod_uri(pod), { |
596 | @@ -328,6 +393,8 @@ class TestPodAPI(APITestCase.ForUser, PodMixin): |
597 | def test_compose_composes_with_defaults(self): |
598 | self.become_admin() |
599 | pod = self.make_pod_with_hints() |
600 | + pod.pool = factory.make_ResourcePool() |
601 | + pod.save() |
602 | |
603 | # Mock the RPC client. |
604 | client = MagicMock() |
605 | @@ -351,6 +418,39 @@ class TestPodAPI(APITestCase.ForUser, PodMixin): |
606 | parsed_machine = json_load_bytes(response.content) |
607 | self.assertItemsEqual( |
608 | parsed_machine.keys(), ['resource_uri', 'system_id']) |
609 | + machine = Machine.objects.get(system_id=parsed_machine['system_id']) |
610 | + self.assertEqual(machine.pool, pod.pool) |
611 | + |
612 | + def test_compose_composes_with_pool(self): |
613 | + self.become_admin() |
614 | + pod = self.make_pod_with_hints() |
615 | + |
616 | + # Mock the RPC client. |
617 | + client = MagicMock() |
618 | + mock_getClient = self.patch(pods, "getClientFromIdentifiers") |
619 | + mock_getClient.return_value = succeed(client) |
620 | + |
621 | + # Mock the result of the composed machine. |
622 | + composed_machine, pod_hints = self.make_compose_machine_result(pod) |
623 | + mock_compose_machine = self.patch(pods, "compose_machine") |
624 | + mock_compose_machine.return_value = succeed( |
625 | + (composed_machine, pod_hints)) |
626 | + |
627 | + # Mock start_commissioning so it doesn't use post commit hooks. |
628 | + self.patch(Machine, "start_commissioning") |
629 | + |
630 | + pool = factory.make_ResourcePool() |
631 | + response = self.client.post(get_pod_uri(pod), { |
632 | + 'op': 'compose', |
633 | + 'pool': pool.id, |
634 | + }) |
635 | + self.assertEqual( |
636 | + http.client.OK, response.status_code, response.content) |
637 | + parsed_machine = json_load_bytes(response.content) |
638 | + self.assertItemsEqual( |
639 | + parsed_machine.keys(), ['resource_uri', 'system_id']) |
640 | + machine = Machine.objects.get(system_id=parsed_machine['system_id']) |
641 | + self.assertEqual(machine.pool, pool) |
642 | |
643 | def test_compose_raises_error_when_to_large_request(self): |
644 | self.become_admin() |
645 | diff --git a/src/maasserver/api/tests/test_resourcepool.py b/src/maasserver/api/tests/test_resourcepool.py |
646 | new file mode 100644 |
647 | index 0000000..7e93e43 |
648 | --- /dev/null |
649 | +++ b/src/maasserver/api/tests/test_resourcepool.py |
650 | @@ -0,0 +1,105 @@ |
651 | +# Copyright 2018 Canonical Ltd. This software is licensed under the |
652 | +# GNU Affero General Public License version 3 (see the file LICENSE). |
653 | + |
654 | +"""Tests for resource pool API.""" |
655 | + |
656 | + |
657 | +import http.client |
658 | +import json |
659 | + |
660 | +from django.conf import settings |
661 | +from maasserver.models import ResourcePool |
662 | +from maasserver.testing.api import APITestCase |
663 | +from maasserver.testing.factory import factory |
664 | +from maasserver.utils.django_urls import reverse |
665 | +from maasserver.utils.orm import reload_object |
666 | + |
667 | + |
668 | +class TestResourcePoolAPI(APITestCase.ForUser): |
669 | + |
670 | + def test_handler_path(self): |
671 | + self.assertEqual( |
672 | + reverse('resourcepool_handler', args=[123]), |
673 | + '/MAAS/api/2.0/resourcepool/123/') |
674 | + |
675 | + def test_POST_disallowed_for_creation(self): |
676 | + self.become_admin() |
677 | + name = factory.make_name('name') |
678 | + description = factory.make_name('description') |
679 | + response = self.client.post( |
680 | + reverse('resourcepool_handler', args=[123]), |
681 | + {'name': name, 'description': description}) |
682 | + self.assertEqual(response.status_code, http.client.METHOD_NOT_ALLOWED) |
683 | + |
684 | + def test_GET_returns_pool(self): |
685 | + pool = factory.make_ResourcePool() |
686 | + response = self.client.get( |
687 | + reverse('resourcepool_handler', args=[pool.id]), {}) |
688 | + self.assertEqual(response.status_code, http.client.OK) |
689 | + result = json.loads( |
690 | + response.content.decode(settings.DEFAULT_CHARSET)) |
691 | + self.assertEqual(result['name'], pool.name) |
692 | + self.assertEqual(result['description'], pool.description) |
693 | + self.assertEqual( |
694 | + result['resource_uri'], |
695 | + '/MAAS/api/2.0/resourcepool/{}/'.format(pool.id)) |
696 | + |
697 | + def test_PUT_updates_pool(self): |
698 | + self.become_admin() |
699 | + pool = factory.make_ResourcePool() |
700 | + new_name = factory.make_name('name') |
701 | + new_description = factory.make_name('description') |
702 | + response = self.client.put( |
703 | + reverse('resourcepool_handler', args=[pool.id]), |
704 | + {'name': new_name, 'description': new_description}) |
705 | + self.assertEqual(response.status_code, http.client.OK) |
706 | + pool = reload_object(pool) |
707 | + self.assertEqual(pool.name, new_name) |
708 | + self.assertEqual(pool.description, new_description) |
709 | + |
710 | + def test_PUT_missing(self): |
711 | + self.become_admin() |
712 | + description = factory.make_string() |
713 | + response = self.client.get( |
714 | + reverse('resourcepool_handler', args=[-1]), |
715 | + {'description': description}) |
716 | + self.assertEqual(response.status_code, http.client.NOT_FOUND) |
717 | + |
718 | + def test_PUT_requires_admin(self): |
719 | + pool = factory.make_ResourcePool() |
720 | + response = self.client.put( |
721 | + reverse('resourcepool_handler', args=[pool.id]), |
722 | + {'description': factory.make_string()}) |
723 | + self.assertEqual(response.status_code, http.client.FORBIDDEN) |
724 | + |
725 | + def test_DELETE_removes_pool(self): |
726 | + self.become_admin() |
727 | + pool = factory.make_ResourcePool() |
728 | + response = self.client.delete( |
729 | + reverse('resourcepool_handler', args=[pool.id]), {}) |
730 | + self.assertEqual(response.status_code, http.client.NO_CONTENT) |
731 | + self.assertIsNone(reload_object(pool)) |
732 | + |
733 | + def test_DELETE_default_pool_denied(self): |
734 | + self.become_admin() |
735 | + response = self.client.delete( |
736 | + reverse('resourcepool_handler', args=[0]), |
737 | + {}) |
738 | + self.assertEqual(response.status_code, http.client.BAD_REQUEST) |
739 | + self.assertIsNotNone(ResourcePool.objects.get_default_resource_pool()) |
740 | + |
741 | + def test_DELETE_requires_admin(self): |
742 | + pool = factory.make_ResourcePool() |
743 | + response = self.client.delete( |
744 | + reverse('resourcepool_handler', args=[pool.id]), {}) |
745 | + self.assertEqual(response.status_code, http.client.FORBIDDEN) |
746 | + |
747 | + def test_DELETE_is_idempotent(self): |
748 | + self.become_admin() |
749 | + pool = factory.make_ResourcePool() |
750 | + response = self.client.delete( |
751 | + reverse('resourcepool_handler', args=[pool.id])) |
752 | + self.assertEqual(response.status_code, http.client.NO_CONTENT) |
753 | + response = self.client.delete( |
754 | + reverse('resourcepool_handler', args=[pool.id])) |
755 | + self.assertEqual(response.status_code, http.client.NO_CONTENT) |
756 | diff --git a/src/maasserver/api/tests/test_resourcepools.py b/src/maasserver/api/tests/test_resourcepools.py |
757 | new file mode 100644 |
758 | index 0000000..8cac703 |
759 | --- /dev/null |
760 | +++ b/src/maasserver/api/tests/test_resourcepools.py |
761 | @@ -0,0 +1,59 @@ |
762 | +# Copyright 2018 Canonical Ltd. This software is licensed under the |
763 | +# GNU Affero General Public License version 3 (see the file LICENSE). |
764 | + |
765 | +"""Tests for resource pools API.""" |
766 | + |
767 | +import http.client |
768 | +import json |
769 | +from operator import attrgetter |
770 | + |
771 | +from django.conf import settings |
772 | +from maasserver.models import ResourcePool |
773 | +from maasserver.testing.api import APITestCase |
774 | +from maasserver.testing.factory import factory |
775 | +from maasserver.utils.django_urls import reverse |
776 | + |
777 | + |
778 | +class TestResourcePoolsAPI(APITestCase.ForUser): |
779 | + |
780 | + def test_handler_path(self): |
781 | + self.assertEqual( |
782 | + '/MAAS/api/2.0/resourcepools/', reverse('resourcepools_handler')) |
783 | + |
784 | + def test_create_pool(self): |
785 | + self.become_admin() |
786 | + name = factory.make_name('name') |
787 | + description = factory.make_name('description') |
788 | + response = self.client.post( |
789 | + reverse('resourcepools_handler'), |
790 | + {'name': name, 'description': description}) |
791 | + self.assertEqual(response.status_code, http.client.OK) |
792 | + pool = ResourcePool.objects.get(name=name) |
793 | + self.assertEqual(pool.description, description) |
794 | + |
795 | + def test_create_requires_admin(self): |
796 | + name = factory.make_name('name') |
797 | + description = factory.make_name('description') |
798 | + response = self.client.post( |
799 | + reverse('resourcepools_handler'), |
800 | + {'name': name, 'description': description}) |
801 | + self.assertEqual(response.status_code, http.client.FORBIDDEN) |
802 | + |
803 | + def test_list_returns_pools_list(self): |
804 | + pools = [factory.make_ResourcePool() for _ in range(3)] |
805 | + # include the default pool |
806 | + pools.append(ResourcePool.objects.get_default_resource_pool()) |
807 | + pools.sort(key=attrgetter('name')) |
808 | + response = self.client.get(reverse('resourcepools_handler'), {}) |
809 | + self.assertEqual( |
810 | + http.client.OK, response.status_code, response.content) |
811 | + result = json.loads( |
812 | + response.content.decode(settings.DEFAULT_CHARSET)) |
813 | + self.assertItemsEqual( |
814 | + [(pool['name'], pool['description'], pool['resource_uri']) |
815 | + for pool in result], |
816 | + [( |
817 | + pool.name, |
818 | + pool.description, |
819 | + reverse('resourcepool_handler', args=[pool.id])) |
820 | + for pool in pools]) |
821 | diff --git a/src/maasserver/api/tests/test_tag.py b/src/maasserver/api/tests/test_tag.py |
822 | index f89f8a0..682721c 100644 |
823 | --- a/src/maasserver/api/tests/test_tag.py |
824 | +++ b/src/maasserver/api/tests/test_tag.py |
825 | @@ -139,7 +139,7 @@ class TestTagAPI(APITestCase.ForUser): |
826 | def test_GET_nodes_returns_nodes(self): |
827 | tag = factory.make_Tag() |
828 | machine = factory.make_Node() |
829 | - device = factory.make_Device(owner=self.user) |
830 | + device = factory.make_Device() |
831 | rack = factory.make_RackController() |
832 | region = factory.make_RegionController() |
833 | # Create a second node that isn't tagged. |
834 | @@ -189,7 +189,7 @@ class TestTagAPI(APITestCase.ForUser): |
835 | parsed_result_2 = json.loads( |
836 | response2.content.decode(settings.DEFAULT_CHARSET)) |
837 | self.assertEqual( |
838 | - [http.client.OK, http.client.OK, 3, 6], |
839 | + [http.client.OK, http.client.OK, 6, 12], |
840 | [ |
841 | response1.status_code, |
842 | response2.status_code, |
843 | @@ -198,10 +198,10 @@ class TestTagAPI(APITestCase.ForUser): |
844 | ]) |
845 | |
846 | # Because of fields `status_action`, `status_message`, |
847 | - # `default_gateways`, `health_status` and 'special_filesystems' the |
848 | - # number of queries is not the same but it is proportional to the |
849 | - # number of machines. |
850 | - self.assertEquals(num_queries1, num_queries2 - (3 * 5)) |
851 | + # `default_gateways`, `health_status`, 'special_filesystems' and |
852 | + # 'resource_pool' the number of queries is not the same but it is |
853 | + # proportional to the number of machines. |
854 | + self.assertEquals(num_queries1, num_queries2 - (3 * 6)) |
855 | |
856 | def test_GET_machines_returns_machines(self): |
857 | tag = factory.make_Tag() |
858 | @@ -259,14 +259,15 @@ class TestTagAPI(APITestCase.ForUser): |
859 | ]) |
860 | |
861 | # Because of fields `status_action`, `status_message`, |
862 | - # `default_gateways`, and `health_status` the number of queries is not |
863 | - # the same but it is proportional to the number of machines. |
864 | - self.assertEquals(num_queries1, num_queries2 - (3 * 5)) |
865 | + # `default_gateways`, `health_status` and 'resource_pool', the number |
866 | + # of queries is not the same but it is proportional to the number of |
867 | + # machines. |
868 | + self.assertEquals(num_queries1, num_queries2 - (3 * 6)) |
869 | |
870 | def test_GET_devices_returns_devices(self): |
871 | tag = factory.make_Tag() |
872 | machine = factory.make_Node() |
873 | - device = factory.make_Device(owner=self.user) |
874 | + device = factory.make_Device() |
875 | rack = factory.make_RackController() |
876 | region = factory.make_RegionController() |
877 | # Create a second node that isn't tagged. |
878 | @@ -292,7 +293,7 @@ class TestTagAPI(APITestCase.ForUser): |
879 | |
880 | tag = factory.make_Tag() |
881 | for _ in range(3): |
882 | - device = factory.make_Device(owner=self.user) |
883 | + device = factory.make_Device() |
884 | device.tags.add(tag) |
885 | num_queries1, response1 = count_queries( |
886 | self.client.get, self.get_tag_uri(tag), {'op': 'devices'}) |
887 | @@ -310,7 +311,7 @@ class TestTagAPI(APITestCase.ForUser): |
888 | parsed_result_2 = json.loads( |
889 | response2.content.decode(settings.DEFAULT_CHARSET)) |
890 | self.assertEqual( |
891 | - [http.client.OK, http.client.OK, 3, 3], |
892 | + [http.client.OK, http.client.OK, 3, 6], |
893 | [ |
894 | response1.status_code, |
895 | response2.status_code, |
896 | @@ -483,11 +484,9 @@ class TestTagAPI(APITestCase.ForUser): |
897 | user2 = factory.make_User() |
898 | node1 = factory.make_Node() |
899 | node2 = factory.make_Node(status=NODE_STATUS.ALLOCATED, owner=user2) |
900 | - node3 = factory.make_Node(pool=factory.make_ResourcePool()) |
901 | tag = factory.make_Tag() |
902 | node1.tags.add(tag) |
903 | node2.tags.add(tag) |
904 | - node3.tags.add(tag) |
905 | |
906 | response = self.client.get(self.get_tag_uri(tag), {'op': 'nodes'}) |
907 | |
908 | diff --git a/src/maasserver/api/users.py b/src/maasserver/api/users.py |
909 | index 5764aa4..6c19b8c 100644 |
910 | --- a/src/maasserver/api/users.py |
911 | +++ b/src/maasserver/api/users.py |
912 | @@ -112,6 +112,7 @@ class UserHandler(OperationsHandler): |
913 | ) |
914 | |
915 | def read(self, request, username): |
916 | + """Return user details.""" |
917 | return get_object_or_404(User, username=username) |
918 | |
919 | @admin_method |
920 | diff --git a/src/maasserver/config.py b/src/maasserver/config.py |
921 | index ead2df1..0b613bd 100644 |
922 | --- a/src/maasserver/config.py |
923 | +++ b/src/maasserver/config.py |
924 | @@ -4,7 +4,6 @@ |
925 | """Configuration for the MAAS region.""" |
926 | |
927 | __all__ = [ |
928 | - "IS_PREMIUM", |
929 | "RegionConfiguration", |
930 | ] |
931 | |
932 | @@ -24,9 +23,6 @@ from provisioningserver.utils.config import ( |
933 | ) |
934 | |
935 | |
936 | -IS_PREMIUM = False |
937 | - |
938 | - |
939 | class RegionConfigurationMeta(ConfigurationMeta): |
940 | """Local meta-configuration for the MAAS region.""" |
941 | |
942 | diff --git a/src/maasserver/context_processors.py b/src/maasserver/context_processors.py |
943 | index 9acf3c1..958a5d0 100644 |
944 | --- a/src/maasserver/context_processors.py |
945 | +++ b/src/maasserver/context_processors.py |
946 | @@ -8,10 +8,7 @@ __all__ = [ |
947 | ] |
948 | |
949 | from django.conf import settings |
950 | -from maasserver.config import ( |
951 | - IS_PREMIUM, |
952 | - RegionConfiguration, |
953 | -) |
954 | +from maasserver.config import RegionConfiguration |
955 | from maasserver.models import ( |
956 | Config, |
957 | RegionController, |
958 | @@ -50,6 +47,5 @@ def global_options(request): |
959 | 'completed_intro': Config.objects.get_config('completed_intro'), |
960 | 'user_completed_intro': user_completed_intro, |
961 | 'analytics_user_id': analytics_user_id, |
962 | - 'maas_uuid': uuid, |
963 | - 'is_premium': IS_PREMIUM |
964 | + 'maas_uuid': uuid |
965 | } |
966 | diff --git a/src/maasserver/forms/__init__.py b/src/maasserver/forms/__init__.py |
967 | index 3a88e75..9c4eacd 100644 |
968 | --- a/src/maasserver/forms/__init__.py |
969 | +++ b/src/maasserver/forms/__init__.py |
970 | @@ -40,8 +40,6 @@ __all__ = [ |
971 | "list_all_usable_architectures", |
972 | "MAASForm", |
973 | "MachineForm", |
974 | - "ManageResourcePoolsAssociationForm", |
975 | - "ManageUserGroupsForm", |
976 | "NetworksListingForm", |
977 | "NewUserCreationForm", |
978 | "NetworkDiscoveryForm", |
979 | @@ -64,7 +62,6 @@ __all__ = [ |
980 | "UpdateRaidForm", |
981 | "UpdateVirtualBlockDeviceForm", |
982 | "UpdateVolumeGroupForm", |
983 | - "UserGroupForm", |
984 | "WindowsForm", |
985 | "ZoneForm", |
986 | ] |
987 | @@ -160,7 +157,6 @@ from maasserver.models import ( |
988 | SSHKey, |
989 | SSLKey, |
990 | Tag, |
991 | - UserGroup, |
992 | VirtualBlockDevice, |
993 | VolumeGroup, |
994 | Zone, |
995 | @@ -193,8 +189,6 @@ from maasserver.utils.osystems import ( |
996 | validate_min_hwe_kernel, |
997 | ) |
998 | from maasserver.utils.threads import deferToDatabase |
999 | -from maasserver.worker_user import user_name as worker_username |
1000 | -from metadataserver.nodeinituser import user_name as node_init_username |
1001 | from netaddr import ( |
1002 | IPNetwork, |
1003 | valid_ipv6, |
1004 | @@ -967,7 +961,10 @@ class AdminNodeForm(NodeForm): |
1005 | label="Physical zone", required=False, |
1006 | initial=Zone.objects.get_default_zone, |
1007 | queryset=Zone.objects.all(), to_field_name='name') |
1008 | - |
1009 | + pool = forms.ModelChoiceField( |
1010 | + label="Resource pool", required=False, |
1011 | + initial=ResourcePool.objects.get_default_resource_pool, |
1012 | + queryset=ResourcePool.objects.all(), to_field_name='name') |
1013 | cpu_count = forms.IntegerField( |
1014 | required=False, initial=0, label="CPU Count") |
1015 | memory = forms.IntegerField( |
1016 | @@ -1046,6 +1043,9 @@ class AdminMachineForm(MachineForm, AdminNodeForm, WithPowerTypeMixin): |
1017 | zone = self.cleaned_data.get('zone') |
1018 | if zone: |
1019 | machine.zone = zone |
1020 | + pool = self.cleaned_data.get('pool') |
1021 | + if pool: |
1022 | + machine.pool = pool |
1023 | WithPowerTypeMixin.set_values(self, machine) |
1024 | if kwargs.get('commit', True): |
1025 | machine.save(*args, **kwargs) |
1026 | @@ -1410,54 +1410,6 @@ class DeleteUserForm(Form): |
1027 | help_text="Transfer resources owned by the user to this user.") |
1028 | |
1029 | |
1030 | -class UserGroupForm(MAASModelForm): |
1031 | - """Form for managing a user group.""" |
1032 | - |
1033 | - class Meta: |
1034 | - model = UserGroup |
1035 | - fields = ( |
1036 | - 'name', |
1037 | - 'description', |
1038 | - 'local', |
1039 | - ) |
1040 | - |
1041 | - def clean(self): |
1042 | - if self.is_update and not self.instance.local: |
1043 | - raise ValidationError("Can't edit non-local group") |
1044 | - return super().clean() |
1045 | - |
1046 | - def clean_local(self): |
1047 | - new_local = self.cleaned_data['local'] |
1048 | - if self.is_update and new_local != self.instance.local: |
1049 | - raise ValidationError("Can't change user group type") |
1050 | - |
1051 | - # if not specified, apply the field default (when creating an object) |
1052 | - if not self.is_update and 'local' not in self.data: |
1053 | - self.cleaned_data['local'] = self.fields['local'].initial |
1054 | - return self.cleaned_data['local'] |
1055 | - |
1056 | - |
1057 | -class ManageUserGroupsForm(Form): |
1058 | - """A form to add/remove users with groups.""" |
1059 | - |
1060 | - user = forms.ModelMultipleChoiceField( |
1061 | - queryset=User.objects.filter(is_active=True).exclude( |
1062 | - username__in=(worker_username, node_init_username)), |
1063 | - label="User group to add/remove ", required=True) |
1064 | - |
1065 | - |
1066 | -class ManageResourcePoolsAssociationForm(Form): |
1067 | - """A form to grant/revoke access to resource pools. |
1068 | - |
1069 | - It's used to manage user and user groups association with resource pools. |
1070 | - |
1071 | - """ |
1072 | - |
1073 | - pool = forms.ModelMultipleChoiceField( |
1074 | - queryset=ResourcePool.objects.all(), |
1075 | - label="Resource pool to grant/revoke access to", required=True) |
1076 | - |
1077 | - |
1078 | class ConfigForm(Form): |
1079 | """A base class for forms that save the content of their fields into |
1080 | Config objects. |
1081 | @@ -2024,28 +1976,6 @@ class ResourcePoolForm(MAASModelForm): |
1082 | 'description', |
1083 | ) |
1084 | |
1085 | - def save(self): |
1086 | - pool = super().save() |
1087 | - user_ids = set(self.data.getlist('users')) |
1088 | - if user_ids: |
1089 | - self._update_linked( |
1090 | - pool.users, pool.grant_user, pool.revoke_user, User, user_ids) |
1091 | - group_ids = set(self.data.getlist('groups')) |
1092 | - if group_ids: |
1093 | - self._update_linked( |
1094 | - pool.groups, pool.grant_group, pool.revoke_group, UserGroup, |
1095 | - group_ids) |
1096 | - return pool |
1097 | - |
1098 | - def _update_linked(self, current_set, grant, revoke, model, ids): |
1099 | - current_ids = set(current_set.values_list('id', flat=True)) |
1100 | - to_add = model.objects.filter(id__in=(ids - current_ids)) |
1101 | - to_remove = model.objects.filter(id__in=(current_ids - ids)) |
1102 | - for entry in to_remove: |
1103 | - revoke(entry) |
1104 | - for entry in to_add: |
1105 | - grant(entry) |
1106 | - |
1107 | |
1108 | class NodeMACAddressChoiceField(forms.ModelMultipleChoiceField): |
1109 | """A ModelMultipleChoiceField which shows the name of the MACs.""" |
1110 | diff --git a/src/maasserver/forms/pods.py b/src/maasserver/forms/pods.py |
1111 | index ec339c4..8bd067d 100644 |
1112 | --- a/src/maasserver/forms/pods.py |
1113 | +++ b/src/maasserver/forms/pods.py |
1114 | @@ -83,6 +83,7 @@ class PodForm(MAASModelForm): |
1115 | 'name', |
1116 | 'tags', |
1117 | 'zone', |
1118 | + 'pool', |
1119 | 'cpu_over_commit_ratio', |
1120 | 'memory_over_commit_ratio', |
1121 | ] |
1122 | @@ -96,6 +97,11 @@ class PodForm(MAASModelForm): |
1123 | initial=Zone.objects.get_default_zone, |
1124 | queryset=Zone.objects.all(), to_field_name='name') |
1125 | |
1126 | + pool = forms.ModelChoiceField( |
1127 | + label="Default pool of created machines", required=False, |
1128 | + initial=lambda: ResourcePool.objects.get_default_resource_pool().name, |
1129 | + queryset=ResourcePool.objects.all(), to_field_name='name') |
1130 | + |
1131 | cpu_over_commit_ratio = forms.FloatField( |
1132 | label="CPU over commit ratio", initial=1, required=False, |
1133 | min_value=0, max_value=10) |
1134 | @@ -134,10 +140,7 @@ class PodForm(MAASModelForm): |
1135 | self.initial['type'] = self.instance.power_type |
1136 | if instance is not None: |
1137 | self.initial['zone'] = instance.zone.name |
1138 | - self.initial['cpu_over_commit_ratio'] = ( |
1139 | - instance.cpu_over_commit_ratio) |
1140 | - self.initial['memory_over_commit_ratio'] = ( |
1141 | - instance.memory_over_commit_ratio) |
1142 | + self.initial['pool'] = instance.pool.name |
1143 | |
1144 | def _clean_fields(self): |
1145 | """Override to dynamically add fields based on the value of `type` |
1146 | @@ -148,10 +151,14 @@ class PodForm(MAASModelForm): |
1147 | # selected type for the pod. |
1148 | if len(self.errors) == 0: |
1149 | driver_fields = get_driver_parameters_from_json( |
1150 | - self.drivers_orig, None, scope=SETTING_SCOPE.BMC) |
1151 | + self.drivers_orig, scope=SETTING_SCOPE.BMC) |
1152 | self.param_fields = ( |
1153 | driver_fields[self.cleaned_data['type']].field_dict) |
1154 | self.fields.update(self.param_fields) |
1155 | + if not self.is_new: |
1156 | + for key, value in self.instance.power_parameters.items(): |
1157 | + if key not in self.data: |
1158 | + self.data[key] = value |
1159 | super(PodForm, self)._clean_fields() |
1160 | |
1161 | def clean(self): |
1162 | @@ -185,7 +192,7 @@ class PodForm(MAASModelForm): |
1163 | # Convert the BMC to a Pod and set as the instance for |
1164 | # the PodForm. |
1165 | bmc.bmc_type = BMC_TYPE.POD |
1166 | - bmc.default_pool = ( |
1167 | + bmc.pool = ( |
1168 | ResourcePool.objects.get_default_resource_pool()) |
1169 | return bmc.as_pod() |
1170 | else: |
1171 | @@ -199,25 +206,10 @@ class PodForm(MAASModelForm): |
1172 | if existing_obj is not None: |
1173 | self.instance = existing_obj |
1174 | self.instance = super(PodForm, self).save(commit=False) |
1175 | - if tags: |
1176 | - self.instance.tags = tags |
1177 | - if zone: |
1178 | - self.instance.zone = zone |
1179 | - if cpu_over_commit_ratio: |
1180 | - self.instance.cpu_over_commit_ratio = cpu_over_commit_ratio |
1181 | - if memory_over_commit_ratio: |
1182 | - self.instance.memory_over_commit_ratio = ( |
1183 | - memory_over_commit_ratio) |
1184 | self.instance.power_type = power_type |
1185 | self.instance.power_parameters = power_parameters |
1186 | return self.instance |
1187 | |
1188 | - tags = self.cleaned_data.get('tags') |
1189 | - zone = self.cleaned_data.get('zone') |
1190 | - cpu_over_commit_ratio = self.cleaned_data.get( |
1191 | - 'cpu_over_commit_ratio') |
1192 | - memory_over_commit_ratio = self.cleaned_data.get( |
1193 | - 'memory_over_commit_ratio') |
1194 | power_type = self.cleaned_data['type'] |
1195 | # Set power_parameters to the generated param_fields. |
1196 | power_parameters = { |
1197 | @@ -367,6 +359,9 @@ class ComposeMachineForm(forms.Form): |
1198 | self.fields['zone'] = ModelChoiceField( |
1199 | required=False, queryset=Zone.objects.all()) |
1200 | self.initial['zone'] = Zone.objects.get_default_zone() |
1201 | + self.fields['pool'] = ModelChoiceField( |
1202 | + required=False, queryset=ResourcePool.objects.all()) |
1203 | + self.initial['pool'] = self.pod.pool |
1204 | self.fields['storage'] = CharField( |
1205 | validators=[storage_validator], required=False) |
1206 | self.initial['storage'] = 'root:8(local)' |
1207 | @@ -438,6 +433,7 @@ class ComposeMachineForm(forms.Form): |
1208 | skip_commissioning=skip_commissioning, |
1209 | creation_type=creation_type, |
1210 | domain=self.get_value_for('domain'), |
1211 | + pool=self.get_value_for('pool'), |
1212 | zone=self.get_value_for('zone')) |
1213 | self.pod.sync_hints(pod_hints) |
1214 | return created_machine |
1215 | diff --git a/src/maasserver/forms/tests/test_machine.py b/src/maasserver/forms/tests/test_machine.py |
1216 | index cf65b88..17a91bf 100644 |
1217 | --- a/src/maasserver/forms/tests/test_machine.py |
1218 | +++ b/src/maasserver/forms/tests/test_machine.py |
1219 | @@ -364,6 +364,7 @@ class TestAdminMachineForm(MAASServerTestCase): |
1220 | 'zone', |
1221 | 'power_type', |
1222 | 'power_parameters', |
1223 | + 'pool', |
1224 | ], |
1225 | list(form.fields)) |
1226 | |
1227 | diff --git a/src/maasserver/forms/tests/test_node.py b/src/maasserver/forms/tests/test_node.py |
1228 | index b33fffb..0fe0041 100644 |
1229 | --- a/src/maasserver/forms/tests/test_node.py |
1230 | +++ b/src/maasserver/forms/tests/test_node.py |
1231 | @@ -120,6 +120,7 @@ class TestAdminNodeForm(MAASServerTestCase): |
1232 | 'cpu_count', |
1233 | 'memory', |
1234 | 'zone', |
1235 | + 'pool', |
1236 | ], |
1237 | list(form.fields)) |
1238 | |
1239 | diff --git a/src/maasserver/forms/tests/test_pods.py b/src/maasserver/forms/tests/test_pods.py |
1240 | index 27ca1fa..f427767 100644 |
1241 | --- a/src/maasserver/forms/tests/test_pods.py |
1242 | +++ b/src/maasserver/forms/tests/test_pods.py |
1243 | @@ -30,6 +30,8 @@ from maasserver.forms.pods import ( |
1244 | ) |
1245 | from maasserver.models.bmc import Pod |
1246 | from maasserver.models.node import Machine |
1247 | +from maasserver.models.resourcepool import ResourcePool |
1248 | +from maasserver.models.zone import Zone |
1249 | from maasserver.testing.factory import factory |
1250 | from maasserver.testing.testcase import ( |
1251 | MAASServerTestCase, |
1252 | @@ -90,29 +92,21 @@ def make_pod_with_hints(): |
1253 | |
1254 | class TestPodForm(MAASTransactionServerTestCase): |
1255 | |
1256 | + def setUp(self): |
1257 | + super().setUp() |
1258 | + self.request = MagicMock() |
1259 | + self.request.user = factory.make_User() |
1260 | + |
1261 | def make_pod_info(self): |
1262 | # Use virsh pod type as the required fields are specific to the |
1263 | # type of pod being created. |
1264 | pod_type = 'virsh' |
1265 | pod_ip_adddress = factory.make_ipv4_address() |
1266 | pod_power_address = 'qemu+ssh://user@%s/system' % pod_ip_adddress |
1267 | - pod_password = factory.make_name('password') |
1268 | - pod_default_storage_pool = factory.make_name('default_pool') |
1269 | - pod_tags = [ |
1270 | - factory.make_name("tag") |
1271 | - for _ in range(3) |
1272 | - ] |
1273 | - pod_cpu_over_commit_ratio = random.randint(0, 10) |
1274 | - pod_memory_over_commit_ratio = random.randint(0, 10) |
1275 | return { |
1276 | 'type': pod_type, |
1277 | 'power_address': pod_power_address, |
1278 | - 'power_pass': pod_password, |
1279 | - 'default_storage_pool': pod_default_storage_pool, |
1280 | 'ip_address': pod_ip_adddress, |
1281 | - 'tags': ",".join(pod_tags), |
1282 | - 'cpu_over_commit_ratio': pod_cpu_over_commit_ratio, |
1283 | - 'memory_over_commit_ratio': pod_memory_over_commit_ratio, |
1284 | } |
1285 | |
1286 | def fake_pod_discovery(self): |
1287 | @@ -147,6 +141,7 @@ class TestPodForm(MAASTransactionServerTestCase): |
1288 | 'tags', |
1289 | 'type', |
1290 | 'zone', |
1291 | + 'pool', |
1292 | 'cpu_over_commit_ratio', |
1293 | 'memory_over_commit_ratio', |
1294 | ], list(form.fields)) |
1295 | @@ -154,29 +149,13 @@ class TestPodForm(MAASTransactionServerTestCase): |
1296 | def test_creates_pod_with_discovered_information(self): |
1297 | discovered_pod, discovered_racks, failed_racks = ( |
1298 | self.fake_pod_discovery()) |
1299 | - zone = factory.make_Zone() |
1300 | pod_info = self.make_pod_info() |
1301 | - pod_info['zone'] = zone.name |
1302 | - request = MagicMock() |
1303 | - request.user = factory.make_User() |
1304 | - form = PodForm(data=pod_info, request=request) |
1305 | + form = PodForm(data=pod_info, request=self.request) |
1306 | self.assertTrue(form.is_valid(), form._errors) |
1307 | pod = form.save() |
1308 | - self.assertThat(pod, MatchesStructure( |
1309 | - architectures=Equals(['amd64/generic']), |
1310 | - name=MatchesAll(Not(Is(None)), Not(Equals(''))), |
1311 | - cores=Equals(discovered_pod.cores), |
1312 | - memory=Equals(discovered_pod.memory), |
1313 | - cpu_speed=Equals(discovered_pod.cpu_speed), |
1314 | - zone=Equals(zone), |
1315 | - power_type=Equals(pod_info['type']), |
1316 | - power_parameters=Equals({ |
1317 | - 'power_address': pod_info['power_address'], |
1318 | - 'power_pass': pod_info['power_pass'], |
1319 | - 'default_storage_pool': pod_info['default_storage_pool'], |
1320 | - }), |
1321 | - ip_address=MatchesStructure(ip=Equals(pod_info['ip_address'])), |
1322 | - )) |
1323 | + self.assertEqual(discovered_pod.cores, pod.cores) |
1324 | + self.assertEqual(discovered_pod.memory, pod.memory) |
1325 | + self.assertEqual(discovered_pod.cpu_speed, pod.cpu_speed) |
1326 | routable_racks = [ |
1327 | relation.rack_controller |
1328 | for relation in pod.routable_rack_relationships.all() |
1329 | @@ -190,38 +169,103 @@ class TestPodForm(MAASTransactionServerTestCase): |
1330 | self.assertItemsEqual(routable_racks, discovered_racks) |
1331 | self.assertItemsEqual(not_routable_racks, failed_racks) |
1332 | |
1333 | - def test_creates_pod_with_name(self): |
1334 | + def test_creates_pod_with_only_required(self): |
1335 | discovered_pod, discovered_racks, failed_racks = ( |
1336 | self.fake_pod_discovery()) |
1337 | - zone = factory.make_Zone() |
1338 | pod_info = self.make_pod_info() |
1339 | - pod_info['zone'] = zone.name |
1340 | - request = MagicMock() |
1341 | - request.user = factory.make_User() |
1342 | - pod_name = factory.make_name('pod') |
1343 | - pod_info['name'] = pod_name |
1344 | - form = PodForm(data=pod_info, request=request) |
1345 | + form = PodForm(data=pod_info, request=self.request) |
1346 | self.assertTrue(form.is_valid(), form._errors) |
1347 | pod = form.save() |
1348 | self.assertThat(pod, MatchesStructure( |
1349 | architectures=Equals(['amd64/generic']), |
1350 | - name=Equals(pod_name), |
1351 | + name=MatchesAll(Not(Is(None)), Not(Equals(''))), |
1352 | cores=Equals(discovered_pod.cores), |
1353 | memory=Equals(discovered_pod.memory), |
1354 | cpu_speed=Equals(discovered_pod.cpu_speed), |
1355 | - zone=Equals(zone), |
1356 | + zone=Equals(Zone.objects.get_default_zone()), |
1357 | + pool=Equals( |
1358 | + ResourcePool.objects.get_default_resource_pool()), |
1359 | power_type=Equals(pod_info['type']), |
1360 | power_parameters=Equals({ |
1361 | 'power_address': pod_info['power_address'], |
1362 | - 'power_pass': pod_info['power_pass'], |
1363 | - 'default_storage_pool': pod_info['default_storage_pool'], |
1364 | + 'power_pass': '', |
1365 | + 'default_storage_pool': '', |
1366 | }), |
1367 | ip_address=MatchesStructure(ip=Equals(pod_info['ip_address'])), |
1368 | )) |
1369 | |
1370 | + def test_creates_pod_with_name(self): |
1371 | + self.fake_pod_discovery() |
1372 | + pod_info = self.make_pod_info() |
1373 | + pod_name = factory.make_name('pod') |
1374 | + pod_info['name'] = pod_name |
1375 | + form = PodForm(data=pod_info, request=self.request) |
1376 | + self.assertTrue(form.is_valid(), form._errors) |
1377 | + pod = form.save() |
1378 | + self.assertEqual(pod_name, pod.name) |
1379 | + |
1380 | + def test_creates_pod_with_power_parameters(self): |
1381 | + self.fake_pod_discovery() |
1382 | + pod_info = self.make_pod_info() |
1383 | + pod_info['power_pass'] = factory.make_name('pass') |
1384 | + pod_info['default_storage_pool'] = factory.make_name('storage') |
1385 | + form = PodForm(data=pod_info, request=self.request) |
1386 | + self.assertTrue(form.is_valid(), form._errors) |
1387 | + pod = form.save() |
1388 | + self.assertEqual( |
1389 | + pod_info['power_address'], pod.power_parameters['power_address']) |
1390 | + self.assertEqual( |
1391 | + pod_info['power_pass'], pod.power_parameters['power_pass']) |
1392 | + self.assertEqual( |
1393 | + pod_info['default_storage_pool'], |
1394 | + pod.power_parameters['default_storage_pool']) |
1395 | + |
1396 | + def test_creates_pod_with_overcommit(self): |
1397 | + self.fake_pod_discovery() |
1398 | + pod_info = self.make_pod_info() |
1399 | + pod_info['cpu_over_commit_ratio'] = random.randint(0, 10) |
1400 | + pod_info['memory_over_commit_ratio'] = random.randint(0, 10) |
1401 | + form = PodForm(data=pod_info, request=self.request) |
1402 | + self.assertTrue(form.is_valid(), form._errors) |
1403 | + pod = form.save() |
1404 | + self.assertEqual( |
1405 | + pod_info['cpu_over_commit_ratio'], pod.cpu_over_commit_ratio) |
1406 | + self.assertEqual( |
1407 | + pod_info['memory_over_commit_ratio'], pod.memory_over_commit_ratio) |
1408 | + |
1409 | + def test_creates_pod_with_tags(self): |
1410 | + self.fake_pod_discovery() |
1411 | + pod_info = self.make_pod_info() |
1412 | + tags = [factory.make_name('tag'), factory.make_name('tag')] |
1413 | + pod_info['tags'] = ','.join(tags) |
1414 | + form = PodForm(data=pod_info, request=self.request) |
1415 | + self.assertTrue(form.is_valid(), form._errors) |
1416 | + pod = form.save() |
1417 | + self.assertItemsEqual(tags, pod.tags) |
1418 | + |
1419 | + def test_creates_pod_with_zone(self): |
1420 | + self.fake_pod_discovery() |
1421 | + pod_info = self.make_pod_info() |
1422 | + zone = factory.make_Zone() |
1423 | + pod_info['zone'] = zone.name |
1424 | + form = PodForm(data=pod_info, request=self.request) |
1425 | + self.assertTrue(form.is_valid(), form._errors) |
1426 | + pod = form.save() |
1427 | + self.assertEqual(zone.id, pod.zone.id) |
1428 | + |
1429 | + def test_creates_pod_with_pool(self): |
1430 | + self.fake_pod_discovery() |
1431 | + pod_info = self.make_pod_info() |
1432 | + pool = factory.make_ResourcePool() |
1433 | + pod_info['pool'] = pool.name |
1434 | + form = PodForm(data=pod_info, request=self.request) |
1435 | + self.assertTrue(form.is_valid(), form._errors) |
1436 | + pod = form.save() |
1437 | + self.assertEqual(pool.id, pod.pool.id) |
1438 | + |
1439 | @wait_for_reactor |
1440 | @inlineCallbacks |
1441 | - def test_creates_pod_with_discovered_information_in_twisted(self): |
1442 | + def test_creates_pod_with_in_twisted(self): |
1443 | discovered_pod, discovered_racks, failed_racks = yield deferToDatabase( |
1444 | self.fake_pod_discovery) |
1445 | pods_module.discover_pod.return_value = succeed( |
1446 | @@ -229,15 +273,15 @@ class TestPodForm(MAASTransactionServerTestCase): |
1447 | zone = yield deferToDatabase(factory.make_Zone) |
1448 | pod_info = yield deferToDatabase(self.make_pod_info) |
1449 | pod_info['zone'] = zone.name |
1450 | - request = MagicMock() |
1451 | - request.user = yield deferToDatabase(factory.make_User) |
1452 | - form = yield deferToDatabase(PodForm, data=pod_info, request=request) |
1453 | + pod_info['name'] = factory.make_name('pod') |
1454 | + form = yield deferToDatabase( |
1455 | + PodForm, data=pod_info, request=self.request) |
1456 | is_valid = yield deferToDatabase(form.is_valid) |
1457 | self.assertTrue(is_valid, form._errors) |
1458 | pod = yield form.save() |
1459 | self.assertThat(pod, MatchesStructure( |
1460 | architectures=Equals(['amd64/generic']), |
1461 | - name=MatchesAll(Not(Is(None)), Not(Equals(''))), |
1462 | + name=Equals(pod_info['name']), |
1463 | cores=Equals(discovered_pod.cores), |
1464 | memory=Equals(discovered_pod.memory), |
1465 | cpu_speed=Equals(discovered_pod.cpu_speed), |
1466 | @@ -245,8 +289,8 @@ class TestPodForm(MAASTransactionServerTestCase): |
1467 | power_type=Equals(pod_info['type']), |
1468 | power_parameters=Equals({ |
1469 | 'power_address': pod_info['power_address'], |
1470 | - 'power_pass': pod_info['power_pass'], |
1471 | - 'default_storage_pool': pod_info['default_storage_pool'], |
1472 | + 'power_pass': '', |
1473 | + 'default_storage_pool': '', |
1474 | }), |
1475 | ip_address=MatchesStructure(ip=Equals(pod_info['ip_address'])), |
1476 | )) |
1477 | @@ -269,50 +313,13 @@ class TestPodForm(MAASTransactionServerTestCase): |
1478 | |
1479 | @wait_for_reactor |
1480 | @inlineCallbacks |
1481 | - def test_creates_pod_with_name_in_twisted(self): |
1482 | - discovered_pod, discovered_racks, failed_racks = yield deferToDatabase( |
1483 | - self.fake_pod_discovery) |
1484 | - pods_module.discover_pod.return_value = succeed( |
1485 | - pods_module.discover_pod.return_value) |
1486 | - zone = yield deferToDatabase(factory.make_Zone) |
1487 | - pod_info = yield deferToDatabase(self.make_pod_info) |
1488 | - pod_info['zone'] = zone.name |
1489 | - pod_name = factory.make_name('pod') |
1490 | - pod_info['name'] = pod_name |
1491 | - request = MagicMock() |
1492 | - request.user = yield deferToDatabase(factory.make_User) |
1493 | - form = yield deferToDatabase(PodForm, data=pod_info, request=request) |
1494 | - is_valid = yield deferToDatabase(form.is_valid) |
1495 | - self.assertTrue(is_valid, form._errors) |
1496 | - pod = yield form.save() |
1497 | - self.assertThat(pod, MatchesStructure( |
1498 | - architectures=Equals(['amd64/generic']), |
1499 | - name=Equals(pod_name), |
1500 | - cores=Equals(discovered_pod.cores), |
1501 | - memory=Equals(discovered_pod.memory), |
1502 | - cpu_speed=Equals(discovered_pod.cpu_speed), |
1503 | - zone=Equals(zone), |
1504 | - power_type=Equals(pod_info['type']), |
1505 | - power_parameters=Equals({ |
1506 | - 'power_address': pod_info['power_address'], |
1507 | - 'power_pass': pod_info['power_pass'], |
1508 | - 'default_storage_pool': pod_info['default_storage_pool'], |
1509 | - }), |
1510 | - ip_address=MatchesStructure(ip=Equals(pod_info['ip_address'])), |
1511 | - )) |
1512 | - |
1513 | - @wait_for_reactor |
1514 | - @inlineCallbacks |
1515 | def test_doesnt_create_pod_when_discovery_fails_in_twisted(self): |
1516 | discovered_pod, discovered_racks, failed_racks = yield deferToDatabase( |
1517 | self.fake_pod_discovery) |
1518 | pods_module.discover_pod.return_value = fail(factory.make_exception()) |
1519 | - zone = yield deferToDatabase(factory.make_Zone) |
1520 | pod_info = yield deferToDatabase(self.make_pod_info) |
1521 | - pod_info['zone'] = zone.name |
1522 | - request = MagicMock() |
1523 | - request.user = yield deferToDatabase(factory.make_User) |
1524 | - form = yield deferToDatabase(PodForm, data=pod_info, request=request) |
1525 | + form = yield deferToDatabase( |
1526 | + PodForm, data=pod_info, request=self.request) |
1527 | is_valid = yield deferToDatabase(form.is_valid) |
1528 | self.assertTrue(is_valid, form._errors) |
1529 | with ExpectedException(PodProblem): |
1530 | @@ -325,12 +332,8 @@ class TestPodForm(MAASTransactionServerTestCase): |
1531 | |
1532 | def test_prevents_duplicate_pod(self): |
1533 | discovered_pod, _, _ = self.fake_pod_discovery() |
1534 | - zone = factory.make_Zone() |
1535 | pod_info = self.make_pod_info() |
1536 | - pod_info['zone'] = zone.name |
1537 | - request = MagicMock() |
1538 | - request.user = factory.make_User() |
1539 | - form = PodForm(data=pod_info, request=request) |
1540 | + form = PodForm(data=pod_info, request=self.request) |
1541 | self.assertTrue(form.is_valid(), form._errors) |
1542 | form.save() |
1543 | new_form = PodForm(data=pod_info) |
1544 | @@ -339,37 +342,61 @@ class TestPodForm(MAASTransactionServerTestCase): |
1545 | |
1546 | def test_takes_over_bmc_with_pod(self): |
1547 | discovered_pod, _, _ = self.fake_pod_discovery() |
1548 | - zone = factory.make_Zone() |
1549 | pod_info = self.make_pod_info() |
1550 | - pod_info['zone'] = zone.name |
1551 | bmc = factory.make_BMC( |
1552 | - zone=zone, tags=pod_info['tags'].split(','), |
1553 | power_type=pod_info['type'], |
1554 | power_parameters={ |
1555 | 'power_address': pod_info['power_address'], |
1556 | - 'power_pass': pod_info['power_pass'], |
1557 | - 'default_storage_pool': pod_info['default_storage_pool'], |
1558 | + 'power_pass': '', |
1559 | + 'default_storage_pool': '', |
1560 | }) |
1561 | - request = MagicMock() |
1562 | - request.user = factory.make_User() |
1563 | - form = PodForm(data=pod_info, request=request) |
1564 | + form = PodForm(data=pod_info, request=self.request) |
1565 | self.assertTrue(form.is_valid(), form._errors) |
1566 | pod = form.save() |
1567 | self.assertEquals(bmc.id, pod.id) |
1568 | self.assertEquals(BMC_TYPE.POD, reload_object(bmc).bmc_type) |
1569 | |
1570 | + def test_updates_existing_pod_minimal(self): |
1571 | + self.fake_pod_discovery() |
1572 | + zone = factory.make_Zone() |
1573 | + pool = factory.make_ResourcePool() |
1574 | + cpu_over_commit = random.randint(0, 10) |
1575 | + memory_over_commit = random.randint(0, 10) |
1576 | + power_parameters = { |
1577 | + 'default_storage_pool': factory.make_name(), |
1578 | + 'power_address': 'qemu+ssh://1.2.3.4/system', |
1579 | + 'power_pass': 'pass', |
1580 | + } |
1581 | + orig_pod = factory.make_Pod( |
1582 | + pod_type='virsh', zone=zone, pool=pool, |
1583 | + cpu_over_commit_ratio=cpu_over_commit, |
1584 | + memory_over_commit_ratio=memory_over_commit, |
1585 | + parameters=power_parameters) |
1586 | + new_name = factory.make_name("pod") |
1587 | + form = PodForm( |
1588 | + data={'name': new_name}, request=self.request, instance=orig_pod) |
1589 | + self.assertTrue(form.is_valid(), form._errors) |
1590 | + pod = form.save() |
1591 | + self.assertEqual(new_name, pod.name) |
1592 | + self.assertEqual(zone, pod.zone) |
1593 | + self.assertEqual(pool, pod.pool) |
1594 | + self.assertEqual(cpu_over_commit, pod.cpu_over_commit_ratio) |
1595 | + self.assertEqual(memory_over_commit, pod.memory_over_commit_ratio) |
1596 | + self.assertEqual(memory_over_commit, pod.memory_over_commit_ratio) |
1597 | + self.assertEqual(power_parameters, pod.power_parameters) |
1598 | + |
1599 | def test_updates_existing_pod(self): |
1600 | discovered_pod, discovered_racks, failed_racks = ( |
1601 | self.fake_pod_discovery()) |
1602 | zone = factory.make_Zone() |
1603 | + pool = factory.make_ResourcePool() |
1604 | pod_info = self.make_pod_info() |
1605 | pod_info['zone'] = zone.name |
1606 | + pod_info['pool'] = pool.name |
1607 | orig_pod = factory.make_Pod(pod_type=pod_info['type']) |
1608 | new_name = factory.make_name("pod") |
1609 | pod_info['name'] = new_name |
1610 | - request = MagicMock() |
1611 | - request.user = factory.make_User() |
1612 | - form = PodForm(data=pod_info, request=request, instance=orig_pod) |
1613 | + form = PodForm(data=pod_info, request=self.request, instance=orig_pod) |
1614 | self.assertTrue(form.is_valid(), form._errors) |
1615 | pod = form.save() |
1616 | self.assertThat(pod, MatchesStructure( |
1617 | @@ -381,11 +408,12 @@ class TestPodForm(MAASTransactionServerTestCase): |
1618 | memory=Equals(discovered_pod.memory), |
1619 | cpu_speed=Equals(discovered_pod.cpu_speed), |
1620 | zone=Equals(zone), |
1621 | + pool=Equals(pool), |
1622 | power_type=Equals(pod_info['type']), |
1623 | power_parameters=Equals({ |
1624 | 'power_address': pod_info['power_address'], |
1625 | - 'power_pass': pod_info['power_pass'], |
1626 | - 'default_storage_pool': pod_info['default_storage_pool'], |
1627 | + 'power_pass': '', |
1628 | + 'default_storage_pool': '', |
1629 | }), |
1630 | ip_address=MatchesStructure(ip=Equals(pod_info['ip_address'])), |
1631 | )) |
1632 | @@ -410,16 +438,16 @@ class TestPodForm(MAASTransactionServerTestCase): |
1633 | pods_module.discover_pod.return_value = succeed( |
1634 | pods_module.discover_pod.return_value) |
1635 | zone = yield deferToDatabase(factory.make_Zone) |
1636 | + pool = yield deferToDatabase(factory.make_ResourcePool) |
1637 | pod_info = yield deferToDatabase(self.make_pod_info) |
1638 | pod_info['zone'] = zone.name |
1639 | + pod_info['pool'] = pool.name |
1640 | orig_pod = yield deferToDatabase( |
1641 | factory.make_Pod, pod_type=pod_info['type']) |
1642 | new_name = factory.make_name("pod") |
1643 | pod_info['name'] = new_name |
1644 | - request = MagicMock() |
1645 | - request.user = yield deferToDatabase(factory.make_User) |
1646 | form = yield deferToDatabase( |
1647 | - PodForm, data=pod_info, request=request, instance=orig_pod) |
1648 | + PodForm, data=pod_info, request=self.request, instance=orig_pod) |
1649 | is_valid = yield deferToDatabase(form.is_valid) |
1650 | self.assertTrue(is_valid, form._errors) |
1651 | pod = yield form.save() |
1652 | @@ -435,8 +463,8 @@ class TestPodForm(MAASTransactionServerTestCase): |
1653 | power_type=Equals(pod_info['type']), |
1654 | power_parameters=Equals({ |
1655 | 'power_address': pod_info['power_address'], |
1656 | - 'power_pass': pod_info['power_pass'], |
1657 | - 'default_storage_pool': pod_info['default_storage_pool'], |
1658 | + 'power_pass': '', |
1659 | + 'default_storage_pool': '', |
1660 | }), |
1661 | ip_address=MatchesStructure(ip=Equals(pod_info['ip_address'])), |
1662 | )) |
1663 | @@ -462,10 +490,11 @@ class TestPodForm(MAASTransactionServerTestCase): |
1664 | self.fake_pod_discovery()) |
1665 | zone = factory.make_Zone() |
1666 | pod_info = self.make_pod_info() |
1667 | - orig_pod = factory.make_Pod(zone=zone, pod_type=pod_info['type']) |
1668 | - request = MagicMock() |
1669 | - request.user = factory.make_User() |
1670 | - form = PodForm(data=pod_info, request=request, instance=orig_pod) |
1671 | + power_parameters = {'power_address': pod_info['power_address']} |
1672 | + orig_pod = factory.make_Pod( |
1673 | + zone=zone, pod_type=pod_info['type'], |
1674 | + parameters=power_parameters) |
1675 | + form = PodForm(data=pod_info, request=self.request, instance=orig_pod) |
1676 | pod = form.discover_and_sync_pod() |
1677 | self.assertThat(pod, MatchesStructure( |
1678 | id=Equals(orig_pod.id), |
1679 | @@ -477,8 +506,8 @@ class TestPodForm(MAASTransactionServerTestCase): |
1680 | cpu_speed=Equals(discovered_pod.cpu_speed), |
1681 | zone=Equals(zone), |
1682 | power_type=Equals(pod_info['type']), |
1683 | - power_parameters=Equals({}), |
1684 | - ip_address=Is(None), |
1685 | + power_parameters=Equals(power_parameters), |
1686 | + ip_address=MatchesStructure(ip=Equals(pod_info['ip_address'])), |
1687 | )) |
1688 | routable_racks = [ |
1689 | relation.rack_controller |
1690 | @@ -502,12 +531,12 @@ class TestPodForm(MAASTransactionServerTestCase): |
1691 | pods_module.discover_pod.return_value) |
1692 | zone = yield deferToDatabase(factory.make_Zone) |
1693 | pod_info = yield deferToDatabase(self.make_pod_info) |
1694 | + power_parameters = {'power_address': pod_info['power_address']} |
1695 | orig_pod = yield deferToDatabase( |
1696 | - factory.make_Pod, zone=zone, pod_type=pod_info['type']) |
1697 | - request = MagicMock() |
1698 | - request.user = yield deferToDatabase(factory.make_User) |
1699 | + factory.make_Pod, zone=zone, pod_type=pod_info['type'], |
1700 | + parameters=power_parameters) |
1701 | form = yield deferToDatabase( |
1702 | - PodForm, data=pod_info, request=request, instance=orig_pod) |
1703 | + PodForm, data=pod_info, request=self.request, instance=orig_pod) |
1704 | pod = yield form.discover_and_sync_pod() |
1705 | self.assertThat(pod, MatchesStructure( |
1706 | id=Equals(orig_pod.id), |
1707 | @@ -519,8 +548,8 @@ class TestPodForm(MAASTransactionServerTestCase): |
1708 | cpu_speed=Equals(discovered_pod.cpu_speed), |
1709 | zone=Equals(zone), |
1710 | power_type=Equals(pod_info['type']), |
1711 | - power_parameters=Equals({}), |
1712 | - ip_address=Is(None), |
1713 | + power_parameters=Equals(power_parameters), |
1714 | + ip_address=MatchesStructure(ip=Equals(pod_info['ip_address'])), |
1715 | )) |
1716 | |
1717 | def validate_rack_routes(): |
1718 | @@ -541,9 +570,7 @@ class TestPodForm(MAASTransactionServerTestCase): |
1719 | |
1720 | def test_raises_unable_to_discover_because_no_racks(self): |
1721 | self.patch(pods_module, "discover_pod").return_value = ({}, {}) |
1722 | - zone = factory.make_Zone() |
1723 | pod_info = self.make_pod_info() |
1724 | - pod_info['zone'] = zone.name |
1725 | form = PodForm(data=pod_info) |
1726 | self.assertTrue(form.is_valid(), form._errors) |
1727 | error = self.assertRaises(PodProblem, form.save) |
1728 | @@ -556,9 +583,7 @@ class TestPodForm(MAASTransactionServerTestCase): |
1729 | def test_raises_unable_to_discover_because_no_racks_in_twisted(self): |
1730 | self.patch(pods_module, "discover_pod").return_value = succeed( |
1731 | ({}, {})) |
1732 | - zone = yield deferToDatabase(factory.make_Zone) |
1733 | pod_info = yield deferToDatabase(self.make_pod_info) |
1734 | - pod_info['zone'] = zone.name |
1735 | form = yield deferToDatabase(PodForm, data=pod_info) |
1736 | is_valid = yield deferToDatabase(form.is_valid) |
1737 | self.assertTrue(is_valid, form._errors) |
1738 | @@ -580,9 +605,7 @@ class TestPodForm(MAASTransactionServerTestCase): |
1739 | self.patch(pods_module, "discover_pod").return_value = ({}, { |
1740 | failed_rack.system_id: exc, |
1741 | }) |
1742 | - zone = factory.make_Zone() |
1743 | pod_info = self.make_pod_info() |
1744 | - pod_info['zone'] = zone.name |
1745 | form = PodForm(data=pod_info) |
1746 | self.assertTrue(form.is_valid(), form._errors) |
1747 | error = self.assertRaises(PodProblem, form.save) |
1748 | @@ -596,9 +619,7 @@ class TestPodForm(MAASTransactionServerTestCase): |
1749 | self.patch(pods_module, "discover_pod").return_value = succeed(({}, { |
1750 | failed_rack.system_id: exc, |
1751 | })) |
1752 | - zone = yield deferToDatabase(factory.make_Zone) |
1753 | pod_info = yield deferToDatabase(self.make_pod_info) |
1754 | - pod_info['zone'] = zone.name |
1755 | form = yield deferToDatabase(PodForm, data=pod_info) |
1756 | is_valid = yield deferToDatabase(form.is_valid) |
1757 | self.assertTrue(is_valid, form._errors) |
1758 | @@ -686,6 +707,15 @@ class TestComposeMachineForm(MAASTransactionServerTestCase): |
1759 | IsInstance(MinValueValidator), |
1760 | MatchesStructure(limit_value=Equals(300)))))) |
1761 | |
1762 | + def test__sets_up_pool_default(self): |
1763 | + request = MagicMock() |
1764 | + pod = make_pod_with_hints() |
1765 | + pool = factory.make_ResourcePool() |
1766 | + pod.pool = pool |
1767 | + pod.save() |
1768 | + form = ComposeMachineForm(request=request, pod=pod) |
1769 | + self.assertEqual(pool, form.initial['pool']) |
1770 | + |
1771 | def test__get_requested_machine_uses_all_initial_values(self): |
1772 | request = MagicMock() |
1773 | pod = make_pod_with_hints() |
1774 | @@ -920,6 +950,54 @@ class TestComposeMachineForm(MAASTransactionServerTestCase): |
1775 | domain=Equals(domain), |
1776 | zone=Equals(zone)))) |
1777 | |
1778 | + def test__compose_sets_resource_pool(self): |
1779 | + request = MagicMock() |
1780 | + pod = make_pod_with_hints() |
1781 | + |
1782 | + # Mock the RPC client. |
1783 | + client = MagicMock() |
1784 | + mock_getClient = self.patch(pods_module, "getClientFromIdentifiers") |
1785 | + mock_getClient.return_value = succeed(client) |
1786 | + |
1787 | + # Mock the result of the composed machine. |
1788 | + composed_machine, pod_hints = self.make_compose_machine_result(pod) |
1789 | + mock_compose_machine = self.patch(pods_module, "compose_machine") |
1790 | + mock_compose_machine.return_value = succeed( |
1791 | + (composed_machine, pod_hints)) |
1792 | + |
1793 | + pool = factory.make_ResourcePool() |
1794 | + form = ComposeMachineForm(data={ |
1795 | + "pool": pool.id, |
1796 | + "skip_commissioning": 'true', |
1797 | + }, request=request, pod=pod) |
1798 | + self.assertTrue(form.is_valid()) |
1799 | + created_machine = form.compose() |
1800 | + self.assertEqual(pool, created_machine.pool) |
1801 | + |
1802 | + def test__compose_uses_pod_pool(self): |
1803 | + request = MagicMock() |
1804 | + pod = make_pod_with_hints() |
1805 | + pod.pool = factory.make_ResourcePool() |
1806 | + pod.save() |
1807 | + |
1808 | + # Mock the RPC client. |
1809 | + client = MagicMock() |
1810 | + mock_getClient = self.patch(pods_module, "getClientFromIdentifiers") |
1811 | + mock_getClient.return_value = succeed(client) |
1812 | + |
1813 | + # Mock the result of the composed machine. |
1814 | + composed_machine, pod_hints = self.make_compose_machine_result(pod) |
1815 | + mock_compose_machine = self.patch(pods_module, "compose_machine") |
1816 | + mock_compose_machine.return_value = succeed( |
1817 | + (composed_machine, pod_hints)) |
1818 | + |
1819 | + form = ComposeMachineForm(data={ |
1820 | + "skip_commissioning": 'true', |
1821 | + }, request=request, pod=pod) |
1822 | + self.assertTrue(form.is_valid()) |
1823 | + created_machine = form.compose() |
1824 | + self.assertEqual(pod.pool, created_machine.pool) |
1825 | + |
1826 | def test__compose_check_over_commit_ratios_raises_error_for_cores(self): |
1827 | request = MagicMock() |
1828 | pod = make_pod_with_hints() |
1829 | diff --git a/src/maasserver/forms/tests/test_resourcepool.py b/src/maasserver/forms/tests/test_resourcepool.py |
1830 | index cacb8ee..0769d2a 100644 |
1831 | --- a/src/maasserver/forms/tests/test_resourcepool.py |
1832 | +++ b/src/maasserver/forms/tests/test_resourcepool.py |
1833 | @@ -25,20 +25,6 @@ class TestResourcePost(MAASServerTestCase): |
1834 | self.assertIsNotNone(pool) |
1835 | self.assertEqual(pool.description, description) |
1836 | |
1837 | - def test_creates_pool_users_groups(self): |
1838 | - user1 = factory.make_User() |
1839 | - user2 = factory.make_User() |
1840 | - group1 = factory.make_UserGroup() |
1841 | - group2 = factory.make_UserGroup() |
1842 | - data = { |
1843 | - 'name': factory.make_name('pool'), |
1844 | - 'users': [user1.id, user2.id], |
1845 | - 'groups': [group1.id, group2.id]} |
1846 | - form = ResourcePoolForm(data=data) |
1847 | - pool = form.save() |
1848 | - self.assertCountEqual(pool.users, [user1, user2]) |
1849 | - self.assertCountEqual(pool.groups, [group1, group2]) |
1850 | - |
1851 | def test_updates_pool(self): |
1852 | pool = factory.make_ResourcePool() |
1853 | new_description = factory.make_string() |
1854 | @@ -48,23 +34,6 @@ class TestResourcePost(MAASServerTestCase): |
1855 | pool = reload_object(pool) |
1856 | self.assertEqual(pool.description, new_description) |
1857 | |
1858 | - def test_updates_pool_users_groups(self): |
1859 | - user1 = factory.make_User() |
1860 | - user2 = factory.make_User() |
1861 | - user3 = factory.make_User() |
1862 | - group1 = factory.make_UserGroup() |
1863 | - group2 = factory.make_UserGroup() |
1864 | - group3 = factory.make_UserGroup() |
1865 | - pool = factory.make_ResourcePool( |
1866 | - users=[user1, user2], groups=[group1, group2]) |
1867 | - data = { |
1868 | - 'users': [user1.id, user3.id], |
1869 | - 'groups': [group1.id, group3.id]} |
1870 | - form = ResourcePoolForm(data=data, instance=pool) |
1871 | - pool = form.save() |
1872 | - self.assertCountEqual(pool.users, [user1, user3]) |
1873 | - self.assertCountEqual(pool.groups, [group1, group3]) |
1874 | - |
1875 | def test_renames_pool(self): |
1876 | pool = factory.make_ResourcePool() |
1877 | new_name = factory.make_name('pool') |
1878 | diff --git a/src/maasserver/forms/tests/test_user.py b/src/maasserver/forms/tests/test_user.py |
1879 | index 965ff33..3e08f7a 100644 |
1880 | --- a/src/maasserver/forms/tests/test_user.py |
1881 | +++ b/src/maasserver/forms/tests/test_user.py |
1882 | @@ -8,7 +8,6 @@ __all__ = [] |
1883 | from django.contrib.auth.models import User |
1884 | from maasserver.forms import ( |
1885 | EditUserForm, |
1886 | - ManageResourcePoolsAssociationForm, |
1887 | NewUserCreationForm, |
1888 | ProfileForm, |
1889 | ) |
1890 | @@ -137,22 +136,3 @@ class TestNewUserCreationForm(MAASServerTestCase): |
1891 | form = NewUserCreationForm(params) |
1892 | user = form.save() |
1893 | self.assertFalse(user.has_usable_password()) |
1894 | - |
1895 | - |
1896 | -class TestManageResourcePoolsAssociationForm(MAASServerTestCase): |
1897 | - |
1898 | - def test_resource_pools(self): |
1899 | - pool1 = factory.make_ResourcePool() |
1900 | - pool2 = factory.make_ResourcePool() |
1901 | - params = {'pool': [str(pool1.id), str(pool2.id)]} |
1902 | - form = ManageResourcePoolsAssociationForm(params) |
1903 | - self.assertTrue(form.is_valid()) |
1904 | - self.assertCountEqual(form.cleaned_data['pool'], [pool1, pool2]) |
1905 | - |
1906 | - def test_pool_required(self): |
1907 | - form = ManageResourcePoolsAssociationForm({}) |
1908 | - self.assertFalse(form.is_valid()) |
1909 | - |
1910 | - def test_unknown_pool(self): |
1911 | - form = ManageResourcePoolsAssociationForm({'pool': [-1]}) |
1912 | - self.assertFalse(form.is_valid()) |
1913 | diff --git a/src/maasserver/forms/tests/test_usergroup.py b/src/maasserver/forms/tests/test_usergroup.py |
1914 | deleted file mode 100644 |
1915 | index ff3c5d8..0000000 |
1916 | --- a/src/maasserver/forms/tests/test_usergroup.py |
1917 | +++ /dev/null |
1918 | @@ -1,96 +0,0 @@ |
1919 | -# Copyright 2018 Canonical Ltd. This software is licensed under the |
1920 | -# GNU Affero General Public License version 3 (see the file LICENSE). |
1921 | - |
1922 | -"""Tests for `UserGroupForm`.""" |
1923 | - |
1924 | -__all__ = [] |
1925 | - |
1926 | -from maasserver.forms import ( |
1927 | - ManageUserGroupsForm, |
1928 | - UserGroupForm, |
1929 | -) |
1930 | -from maasserver.models import UserGroup |
1931 | -from maasserver.testing.factory import factory |
1932 | -from maasserver.testing.testcase import MAASServerTestCase |
1933 | -from maasserver.utils.orm import reload_object |
1934 | -from maasserver.worker_user import get_worker_user |
1935 | -from metadataserver.nodeinituser import get_node_init_user |
1936 | - |
1937 | - |
1938 | -class TestManageUserGroupsForm(MAASServerTestCase): |
1939 | - |
1940 | - def test_get_users(self): |
1941 | - user1 = factory.make_User() |
1942 | - user2 = factory.make_User() |
1943 | - form = ManageUserGroupsForm( |
1944 | - data={'user': [str(user1.id), str(user2.id)]}) |
1945 | - self.assertTrue(form.is_valid()) |
1946 | - self.assertCountEqual(form.cleaned_data['user'], [user1, user2]) |
1947 | - |
1948 | - def test_node_init_user_not_valid(self): |
1949 | - user = get_node_init_user() |
1950 | - form = ManageUserGroupsForm(data={'user': [str(user.id)]}) |
1951 | - self.assertFalse(form.is_valid()) |
1952 | - |
1953 | - def test_worker_user_not_valid(self): |
1954 | - user = get_worker_user() |
1955 | - form = ManageUserGroupsForm(data={'user': [str(user.id)]}) |
1956 | - self.assertFalse(form.is_valid()) |
1957 | - |
1958 | - |
1959 | -class TestUserGroupForm(MAASServerTestCase): |
1960 | - """Tests for `UserGroupForm`.""" |
1961 | - |
1962 | - def test_creates_usergroup(self): |
1963 | - name = factory.make_name('usergroup') |
1964 | - description = factory.make_string() |
1965 | - form = UserGroupForm( |
1966 | - data={'name': name, 'description': description}) |
1967 | - form.save() |
1968 | - group = UserGroup.objects.get(name=name) |
1969 | - self.assertIsNotNone(group) |
1970 | - self.assertEqual(group.description, description) |
1971 | - self.assertTrue(group.local) |
1972 | - |
1973 | - def test_creates_usergroup_not_local(self): |
1974 | - name = factory.make_name('usergroup') |
1975 | - form = UserGroupForm( |
1976 | - data={'name': name, 'local': False}) |
1977 | - form.save() |
1978 | - group = UserGroup.objects.get(name=name) |
1979 | - self.assertFalse(group.local) |
1980 | - |
1981 | - def test_updates_usergroup(self): |
1982 | - group = factory.make_UserGroup() |
1983 | - new_description = factory.make_string() |
1984 | - form = UserGroupForm( |
1985 | - data={'description': new_description}, |
1986 | - instance=group) |
1987 | - form.save() |
1988 | - group = reload_object(group) |
1989 | - self.assertEqual(group.description, new_description) |
1990 | - |
1991 | - def test_update_usergroup_no_change_local(self): |
1992 | - group = factory.make_UserGroup() |
1993 | - form = UserGroupForm(data={'local': False}, instance=group) |
1994 | - self.assertFalse(form.is_valid()) |
1995 | - self.assertEqual( |
1996 | - form.errors['local'].as_data()[0].message, |
1997 | - "Can't change user group type") |
1998 | - |
1999 | - def test_update_usergroup_not_local_no_change(self): |
2000 | - group = factory.make_UserGroup(local=False) |
2001 | - form = UserGroupForm( |
2002 | - data={'name': factory.make_name()}, instance=group) |
2003 | - self.assertFalse(form.is_valid()) |
2004 | - self.assertEqual( |
2005 | - form.errors['__all__'].as_data()[0].message, |
2006 | - "Can't edit non-local group") |
2007 | - |
2008 | - def test_renames_group(self): |
2009 | - group = factory.make_UserGroup() |
2010 | - new_name = factory.make_name('group') |
2011 | - form = UserGroupForm(data={'name': new_name}, instance=group) |
2012 | - form.save() |
2013 | - group = reload_object(group) |
2014 | - self.assertEqual(group.name, new_name) |
2015 | diff --git a/src/maasserver/migrations/builtin/maasserver/0141_add_default_usergroup.py b/src/maasserver/migrations/builtin/maasserver/0141_add_default_usergroup.py |
2016 | index c3eb2be..df1ad9c 100644 |
2017 | --- a/src/maasserver/migrations/builtin/maasserver/0141_add_default_usergroup.py |
2018 | +++ b/src/maasserver/migrations/builtin/maasserver/0141_add_default_usergroup.py |
2019 | @@ -2,14 +2,14 @@ from datetime import datetime |
2020 | |
2021 | from django.conf import settings |
2022 | from django.db import migrations |
2023 | -from maasserver.models.usergroup import ( |
2024 | - DEFAULT_USERGROUP_DESCRIPTION, |
2025 | - DEFAULT_USERGROUP_NAME, |
2026 | -) |
2027 | from maasserver.worker_user import user_name as worker_username |
2028 | from metadataserver.nodeinituser import user_name as node_init_username |
2029 | |
2030 | |
2031 | +DEFAULT_USERGROUP_NAME = 'default' |
2032 | +DEFAULT_USERGROUP_DESCRIPTION = 'Default user group' |
2033 | + |
2034 | + |
2035 | def forwards(apps, schema_editor): |
2036 | User = apps.get_model(settings.AUTH_USER_MODEL) |
2037 | UserGroup = apps.get_model('maasserver', 'UserGroup') |
2038 | diff --git a/src/maasserver/migrations/builtin/maasserver/0157_drop_usergroup_and_role.py b/src/maasserver/migrations/builtin/maasserver/0157_drop_usergroup_and_role.py |
2039 | new file mode 100644 |
2040 | index 0000000..3983a77 |
2041 | --- /dev/null |
2042 | +++ b/src/maasserver/migrations/builtin/maasserver/0157_drop_usergroup_and_role.py |
2043 | @@ -0,0 +1,48 @@ |
2044 | +# -*- coding: utf-8 -*- |
2045 | +# Generated by Django 1.11.11 on 2018-05-14 08:54 |
2046 | +from __future__ import unicode_literals |
2047 | + |
2048 | +from django.db import migrations |
2049 | + |
2050 | + |
2051 | +class Migration(migrations.Migration): |
2052 | + |
2053 | + dependencies = [ |
2054 | + ('maasserver', '0156_drop_ssh_unique_key_index'), |
2055 | + ] |
2056 | + |
2057 | + operations = [ |
2058 | + migrations.RemoveField( |
2059 | + model_name='role', |
2060 | + name='groups', |
2061 | + ), |
2062 | + migrations.RemoveField( |
2063 | + model_name='role', |
2064 | + name='resource_pools', |
2065 | + ), |
2066 | + migrations.RemoveField( |
2067 | + model_name='role', |
2068 | + name='users', |
2069 | + ), |
2070 | + migrations.RemoveField( |
2071 | + model_name='usergroup', |
2072 | + name='users', |
2073 | + ), |
2074 | + migrations.RemoveField( |
2075 | + model_name='usergroupmembership', |
2076 | + name='group', |
2077 | + ), |
2078 | + migrations.RemoveField( |
2079 | + model_name='usergroupmembership', |
2080 | + name='user', |
2081 | + ), |
2082 | + migrations.DeleteModel( |
2083 | + name='Role', |
2084 | + ), |
2085 | + migrations.DeleteModel( |
2086 | + name='UserGroup', |
2087 | + ), |
2088 | + migrations.DeleteModel( |
2089 | + name='UserGroupMembership', |
2090 | + ), |
2091 | + ] |
2092 | diff --git a/src/maasserver/migrations/builtin/maasserver/0158_pod_default_pool_to_pod.py b/src/maasserver/migrations/builtin/maasserver/0158_pod_default_pool_to_pod.py |
2093 | new file mode 100644 |
2094 | index 0000000..7e947b0 |
2095 | --- /dev/null |
2096 | +++ b/src/maasserver/migrations/builtin/maasserver/0158_pod_default_pool_to_pod.py |
2097 | @@ -0,0 +1,20 @@ |
2098 | +# -*- coding: utf-8 -*- |
2099 | +# Generated by Django 1.11.11 on 2018-05-25 12:22 |
2100 | +from __future__ import unicode_literals |
2101 | + |
2102 | +from django.db import migrations |
2103 | + |
2104 | + |
2105 | +class Migration(migrations.Migration): |
2106 | + |
2107 | + dependencies = [ |
2108 | + ('maasserver', '0157_drop_usergroup_and_role'), |
2109 | + ] |
2110 | + |
2111 | + operations = [ |
2112 | + migrations.RenameField( |
2113 | + model_name='bmc', |
2114 | + old_name='default_pool', |
2115 | + new_name='pool', |
2116 | + ), |
2117 | + ] |
2118 | diff --git a/src/maasserver/migrations/builtin/maasserver/0159_pod_storage_pools.py b/src/maasserver/migrations/builtin/maasserver/0159_pod_storage_pools.py |
2119 | new file mode 100644 |
2120 | index 0000000..fd05e8c |
2121 | --- /dev/null |
2122 | +++ b/src/maasserver/migrations/builtin/maasserver/0159_pod_storage_pools.py |
2123 | @@ -0,0 +1,43 @@ |
2124 | +# -*- coding: utf-8 -*- |
2125 | +# Generated by Django 1.11.11 on 2018-05-04 09:43 |
2126 | +from __future__ import unicode_literals |
2127 | + |
2128 | +from django.db import ( |
2129 | + migrations, |
2130 | + models, |
2131 | +) |
2132 | +import django.db.models.deletion |
2133 | +import maasserver.models.cleansave |
2134 | + |
2135 | + |
2136 | +class Migration(migrations.Migration): |
2137 | + |
2138 | + dependencies = [ |
2139 | + ('maasserver', '0158_pod_default_pool_to_pod'), |
2140 | + ] |
2141 | + |
2142 | + operations = [ |
2143 | + migrations.CreateModel( |
2144 | + name='PodStoragePool', |
2145 | + fields=[ |
2146 | + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
2147 | + ('name', models.CharField(max_length=255)), |
2148 | + ('pool_id', models.CharField(max_length=255)), |
2149 | + ('pool_type', models.CharField(max_length=255)), |
2150 | + ('path', models.CharField(max_length=4095)), |
2151 | + ('storage', models.BigIntegerField(default=0)), |
2152 | + ('pod', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='storage_pools', to='maasserver.BMC')), |
2153 | + ], |
2154 | + bases=(maasserver.models.cleansave.CleanSave, models.Model), |
2155 | + ), |
2156 | + migrations.AddField( |
2157 | + model_name='bmc', |
2158 | + name='default_storage_pool', |
2159 | + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='maasserver.PodStoragePool'), |
2160 | + ), |
2161 | + migrations.AddField( |
2162 | + model_name='physicalblockdevice', |
2163 | + name='storage_pool', |
2164 | + field=models.ForeignKey(blank=True, help_text='Storage pool that this block device belongs to', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='block_devices', to='maasserver.PodStoragePool'), |
2165 | + ), |
2166 | + ] |
2167 | diff --git a/src/maasserver/migrations/builtin/maasserver/0160_storage_pools_notification.py b/src/maasserver/migrations/builtin/maasserver/0160_storage_pools_notification.py |
2168 | new file mode 100644 |
2169 | index 0000000..36646da |
2170 | --- /dev/null |
2171 | +++ b/src/maasserver/migrations/builtin/maasserver/0160_storage_pools_notification.py |
2172 | @@ -0,0 +1,37 @@ |
2173 | +# -*- coding: utf-8 -*- |
2174 | +# Generated by Django 1.11.11 on 2018-04-04 09:38 |
2175 | +from __future__ import unicode_literals |
2176 | + |
2177 | +import datetime |
2178 | + |
2179 | +from django.db import ( |
2180 | + migrations, |
2181 | + models, |
2182 | +) |
2183 | +from maasserver.enum import BMC_TYPE |
2184 | + |
2185 | + |
2186 | +def forwards(apps, schema_editor): |
2187 | + BMC = apps.get_model('maasserver', 'BMC') |
2188 | + Notification = apps.get_model('maasserver', 'Notification') |
2189 | + for pod in BMC.objects.filter(bmc_type=BMC_TYPE.POD, power_type='virsh'): |
2190 | + now = datetime.datetime.utcnow() |
2191 | + Notification.objects.create(admins=True, message=( |
2192 | + "Pod %s needs to be refreshed to gather storage pool " |
2193 | + "information." % pod.name), created=now, updated=now) |
2194 | + |
2195 | + |
2196 | +def backwards(apps, schema_editor): |
2197 | + # No reason just can't go backwards, but keep the notifications. |
2198 | + pass |
2199 | + |
2200 | + |
2201 | +class Migration(migrations.Migration): |
2202 | + |
2203 | + dependencies = [ |
2204 | + ('maasserver', '0159_pod_storage_pools'), |
2205 | + ] |
2206 | + |
2207 | + operations = [ |
2208 | + migrations.RunPython(forwards, backwards), |
2209 | + ] |
2210 | diff --git a/src/maasserver/migrations/builtin/maasserver/0161_userprofile_auth_last_check_no_now_default.py b/src/maasserver/migrations/builtin/maasserver/0161_userprofile_auth_last_check_no_now_default.py |
2211 | new file mode 100644 |
2212 | index 0000000..1fcceca |
2213 | --- /dev/null |
2214 | +++ b/src/maasserver/migrations/builtin/maasserver/0161_userprofile_auth_last_check_no_now_default.py |
2215 | @@ -0,0 +1,23 @@ |
2216 | +# -*- coding: utf-8 -*- |
2217 | +# Generated by Django 1.11.11 on 2018-05-23 08:48 |
2218 | +from __future__ import unicode_literals |
2219 | + |
2220 | +from django.db import ( |
2221 | + migrations, |
2222 | + models, |
2223 | +) |
2224 | + |
2225 | + |
2226 | +class Migration(migrations.Migration): |
2227 | + |
2228 | + dependencies = [ |
2229 | + ('maasserver', '0160_storage_pools_notification'), |
2230 | + ] |
2231 | + |
2232 | + operations = [ |
2233 | + migrations.AlterField( |
2234 | + model_name='userprofile', |
2235 | + name='auth_last_check', |
2236 | + field=models.DateTimeField(blank=True, null=True), |
2237 | + ), |
2238 | + ] |
2239 | diff --git a/src/maasserver/models/__init__.py b/src/maasserver/models/__init__.py |
2240 | index 75d2f34..2904e6b 100644 |
2241 | --- a/src/maasserver/models/__init__.py |
2242 | +++ b/src/maasserver/models/__init__.py |
2243 | @@ -65,7 +65,6 @@ __all__ = [ |
2244 | 'RegionControllerProcessEndpoint', |
2245 | 'RegionRackRPCConnection', |
2246 | 'ResourcePool', |
2247 | - 'Role', |
2248 | 'RootKey', |
2249 | 'Service', |
2250 | 'signals', |
2251 | @@ -79,8 +78,6 @@ __all__ = [ |
2252 | 'Tag', |
2253 | 'Template', |
2254 | 'UnknownInterface', |
2255 | - 'UserGroup', |
2256 | - 'UserGroupMembership', |
2257 | 'UserProfile', |
2258 | 'VersionedTextFile', |
2259 | 'VirtualBlockDevice', |
2260 | @@ -174,11 +171,7 @@ from maasserver.models.regioncontrollerprocessendpoint import ( |
2261 | RegionControllerProcessEndpoint, |
2262 | ) |
2263 | from maasserver.models.regionrackrpcconnection import RegionRackRPCConnection |
2264 | -from maasserver.models.resourcepool import ( |
2265 | - create_resource_pool, |
2266 | - ResourcePool, |
2267 | -) |
2268 | -from maasserver.models.role import Role |
2269 | +from maasserver.models.resourcepool import ResourcePool |
2270 | from maasserver.models.rootkey import RootKey |
2271 | from maasserver.models.service import Service |
2272 | from maasserver.models.space import Space |
2273 | @@ -191,10 +184,6 @@ from maasserver.models.switch import Switch |
2274 | from maasserver.models.tag import Tag |
2275 | from maasserver.models.template import Template |
2276 | from maasserver.models.user import create_user |
2277 | -from maasserver.models.usergroup import ( |
2278 | - UserGroup, |
2279 | - UserGroupMembership, |
2280 | -) |
2281 | from maasserver.models.userprofile import UserProfile |
2282 | from maasserver.models.versionedtextfile import VersionedTextFile |
2283 | from maasserver.models.virtualblockdevice import VirtualBlockDevice |
2284 | @@ -210,7 +199,6 @@ from provisioningserver.utils import is_instance_or_subclass |
2285 | |
2286 | # Connect post-creation methods for models. |
2287 | post_save.connect(create_user, sender=User) |
2288 | -post_save.connect(create_resource_pool, sender=ResourcePool) |
2289 | |
2290 | |
2291 | # Monkey patch django.contrib.auth.models.User to force email to be unique and |
2292 | @@ -342,12 +330,8 @@ class MAASAuthorizationBackend(ModelBackend): |
2293 | |
2294 | if isinstance(obj, Node): |
2295 | if perm == NODE_PERMISSION.VIEW: |
2296 | - # users can see unowned machines if they're in a pool they have |
2297 | - # access too. Other types of Node are always visible. |
2298 | - return ( |
2299 | - obj.pool is None or |
2300 | - ResourcePool.objects.user_can_access_pool( |
2301 | - user, obj.pool)) |
2302 | + # Any registered user can view a node regardless of its state. |
2303 | + return True |
2304 | elif perm == NODE_PERMISSION.EDIT: |
2305 | return obj.owner == user and not obj.locked |
2306 | elif perm == NODE_PERMISSION.LOCK: |
2307 | diff --git a/src/maasserver/models/bmc.py b/src/maasserver/models/bmc.py |
2308 | index b2c1966..4a372ab 100644 |
2309 | --- a/src/maasserver/models/bmc.py |
2310 | +++ b/src/maasserver/models/bmc.py |
2311 | @@ -177,7 +177,7 @@ class BMC(CleanSave, TimestampedModel): |
2312 | local_disks = IntegerField(blank=False, null=False, default=-1) |
2313 | iscsi_storage = BigIntegerField( # Bytes |
2314 | blank=False, null=False, default=-1) |
2315 | - default_pool = ForeignKey( |
2316 | + pool = ForeignKey( |
2317 | ResourcePool, default=None, null=True, blank=True, editable=True, |
2318 | on_delete=PROTECT) |
2319 | zone = ForeignKey( |
2320 | @@ -458,16 +458,16 @@ class Pod(BMC): |
2321 | _machine_name_re = re.compile(r'[a-z][a-z0-9-]+$', flags=re.I) |
2322 | |
2323 | def __init__(self, *args, **kwargs): |
2324 | - if 'default_pool' not in kwargs: |
2325 | - kwargs['default_pool'] = ( |
2326 | + if 'pool' not in kwargs: |
2327 | + kwargs['pool'] = ( |
2328 | ResourcePool.objects.get_default_resource_pool()) |
2329 | super(Pod, self).__init__( |
2330 | bmc_type=BMC_TYPE.POD, *args, **kwargs) |
2331 | |
2332 | def clean(self): |
2333 | super().clean() |
2334 | - if self.default_pool is None: |
2335 | - raise ValidationError('A pod needs to have a default pool') |
2336 | + if self.pool is None: |
2337 | + raise ValidationError('A pod needs to have a pool') |
2338 | |
2339 | def unique_error_message(self, model_class, unique_check): |
2340 | if unique_check == ('power_type', 'power_parameters', 'ip_address'): |
2341 | @@ -643,6 +643,10 @@ class Pod(BMC): |
2342 | if zone is None: |
2343 | zone = self.zone |
2344 | |
2345 | + pool = kwargs.pop('pool', None) |
2346 | + if pool is None: |
2347 | + pool = self.pool |
2348 | + |
2349 | # Create the machine. |
2350 | machine = Machine( |
2351 | hostname=discovered_machine.hostname, |
2352 | @@ -653,7 +657,7 @@ class Pod(BMC): |
2353 | memory=discovered_machine.memory, |
2354 | power_state=discovered_machine.power_state, |
2355 | creation_type=creation_type, |
2356 | - pool=self.default_pool, |
2357 | + pool=pool, |
2358 | zone=zone, **kwargs) |
2359 | machine.bmc = self |
2360 | machine.instance_power_parameters = discovered_machine.power_parameters |
2361 | diff --git a/src/maasserver/models/node.py b/src/maasserver/models/node.py |
2362 | index e5274cf..51468ec 100644 |
2363 | --- a/src/maasserver/models/node.py |
2364 | +++ b/src/maasserver/models/node.py |
2365 | @@ -464,9 +464,7 @@ class BaseNodeManager(Manager, NodeQueriesMixin): |
2366 | NODE_TYPE.REGION_AND_RACK_CONTROLLER, |
2367 | ])) |
2368 | if perm == NODE_PERMISSION.VIEW: |
2369 | - pools = ResourcePool.objects.get_user_resource_pools(user) |
2370 | - return nodes.filter( |
2371 | - Q(owner__isnull=True, pool__in=pools) | Q(owner=user)) |
2372 | + return nodes.filter(Q(owner__isnull=True) | Q(owner=user)) |
2373 | elif perm == NODE_PERMISSION.EDIT: |
2374 | return nodes.filter(owner=user) |
2375 | elif perm == NODE_PERMISSION.ADMIN: |
2376 | @@ -1598,10 +1596,6 @@ class Node(CleanSave, TimestampedModel): |
2377 | if self.is_machine: |
2378 | if not self.pool: |
2379 | self.pool = ResourcePool.objects.get_default_resource_pool() |
2380 | - elif self.owner and not ResourcePool.objects.user_can_access_pool( |
2381 | - self.owner, self.pool): |
2382 | - raise ValidationError( |
2383 | - "User doesn't have access to the resource pool") |
2384 | elif self.pool: |
2385 | raise ValidationError( |
2386 | {'pool': ["Can't assign to a resource pool."]}) |
2387 | diff --git a/src/maasserver/models/resourcepool.py b/src/maasserver/models/resourcepool.py |
2388 | index ff5a1ce..377db23 100644 |
2389 | --- a/src/maasserver/models/resourcepool.py |
2390 | +++ b/src/maasserver/models/resourcepool.py |
2391 | @@ -11,21 +11,16 @@ __all__ = [ |
2392 | |
2393 | from datetime import datetime |
2394 | |
2395 | -from django.contrib.auth.models import User |
2396 | from django.core.exceptions import ValidationError |
2397 | from django.db.models import ( |
2398 | CharField, |
2399 | - Count, |
2400 | Manager, |
2401 | - Q, |
2402 | TextField, |
2403 | ) |
2404 | from maasserver import DefaultMeta |
2405 | from maasserver.fields import MODEL_NAME_VALIDATOR |
2406 | from maasserver.models.cleansave import CleanSave |
2407 | from maasserver.models.timestampedmodel import TimestampedModel |
2408 | -from maasserver.worker_user import user_name as worker_username |
2409 | -from metadataserver.nodeinituser import user_name as node_init_username |
2410 | |
2411 | |
2412 | DEFAULT_RESOURCEPOOL_NAME = 'default' |
2413 | @@ -48,19 +43,6 @@ class ResourcePoolManager(Manager): |
2414 | 'updated': now}) |
2415 | return pool |
2416 | |
2417 | - def get_user_resource_pools(self, user): |
2418 | - """Return ResourcePools a User has access to.""" |
2419 | - return self.model.objects.filter( |
2420 | - Q(role__users=user) | Q(role__groups__users=user)) |
2421 | - |
2422 | - def user_can_access_pool(self, user, pool): |
2423 | - """Whether a User has access to a ResourcePool.""" |
2424 | - # maas internal users need to be able to own any node |
2425 | - admin_usernames = (worker_username, node_init_username) |
2426 | - if user.username in admin_usernames: |
2427 | - return True |
2428 | - return self.get_user_resource_pools(user).filter(pk=pool.pk).exists() |
2429 | - |
2430 | |
2431 | class ResourcePool(CleanSave, TimestampedModel): |
2432 | """A resource pool.""" |
2433 | @@ -79,24 +61,6 @@ class ResourcePool(CleanSave, TimestampedModel): |
2434 | def __str__(self): |
2435 | return self.name |
2436 | |
2437 | - @property |
2438 | - def users(self): |
2439 | - """Return users that have access to the pool. |
2440 | - |
2441 | - XXX This should be dropped once we implement full RBAC, and the logic |
2442 | - moved to methods in Role. |
2443 | - """ |
2444 | - return self._get_pool_role().users.all() |
2445 | - |
2446 | - @property |
2447 | - def groups(self): |
2448 | - """Return groups that have access to the pool. |
2449 | - |
2450 | - XXX This should be dropped once we implement full RBAC, and the logic |
2451 | - moved to methods in Role. |
2452 | - """ |
2453 | - return self._get_pool_role().groups.all() |
2454 | - |
2455 | def is_default(self): |
2456 | """Whether this is the default pool.""" |
2457 | return self.id == 0 |
2458 | @@ -108,88 +72,4 @@ class ResourcePool(CleanSave, TimestampedModel): |
2459 | if self.node_set.exists(): |
2460 | raise ValidationError( |
2461 | 'Pool has machines in it, it cannot be deleted.') |
2462 | - self._get_pool_role().delete() |
2463 | super().delete() |
2464 | - |
2465 | - def grant_user(self, user): |
2466 | - """Grant user access to the resource pool. |
2467 | - |
2468 | - XXX This should be dropped once we implement full RBAC, and the logic |
2469 | - moved to methods in Role. |
2470 | - """ |
2471 | - role = self._get_pool_role() |
2472 | - role.users.add(user) |
2473 | - |
2474 | - def revoke_user(self, user): |
2475 | - """Revoke user access to the resource pool. |
2476 | - |
2477 | - XXX This should be dropped once we implement full RBAC, and the logic |
2478 | - moved to methods in Role. |
2479 | - """ |
2480 | - from maasserver.models.node import Machine |
2481 | - from maasserver.models.role import Role |
2482 | - has_machines = Machine.objects.filter(pool=self, owner=user).exists() |
2483 | - has_access_through_roles = Role.objects.filter( |
2484 | - groups__users=user, resource_pools=self).exists() |
2485 | - if has_machines and not has_access_through_roles: |
2486 | - raise ValidationError( |
2487 | - 'User has machines in the pool, it cannot be revoked.') |
2488 | - role = self._get_pool_role() |
2489 | - role.users.remove(user) |
2490 | - |
2491 | - def grant_group(self, group): |
2492 | - """Grant group access to the resource pool. |
2493 | - |
2494 | - XXX This should be dropped once we implement full RBAC, and the logic |
2495 | - moved to methods in Role. |
2496 | - """ |
2497 | - role = self._get_pool_role() |
2498 | - role.groups.add(group) |
2499 | - |
2500 | - def revoke_group(self, group): |
2501 | - """Revoke group access to the resource pool. |
2502 | - |
2503 | - XXX This should be dropped once we implement full RBAC, and the logic |
2504 | - moved to methods in Role. |
2505 | - """ |
2506 | - # check that users that have machines in the pool can still access them |
2507 | - # either directly or via other groups |
2508 | - users_with_direct_access = User.objects.filter( |
2509 | - role__resource_pools=self).values('id') |
2510 | - users_with_other_group_access = User.objects.filter( |
2511 | - usergroup__role__resource_pools=self).annotate( |
2512 | - usergroup_count=Count('usergroup')).filter( |
2513 | - usergroup_count__gt=1).values('id') |
2514 | - users_with_machines = User.objects.filter(node__pool=self).values('id') |
2515 | - excluded_users = users_with_machines.difference( |
2516 | - users_with_direct_access).difference(users_with_other_group_access) |
2517 | - if excluded_users.exists(): |
2518 | - raise ValidationError( |
2519 | - "Can't remove group from pool, some users have machines that" |
2520 | - " would become unaccessible.") |
2521 | - |
2522 | - # remove the group |
2523 | - role = self._get_pool_role() |
2524 | - role.groups.remove(group) |
2525 | - |
2526 | - def _get_pool_role(self): |
2527 | - """Return the Role associated to the pool. |
2528 | - |
2529 | - Until full RBAC is implemented, each ResourcePool is assigned to a |
2530 | - single role. |
2531 | - """ |
2532 | - return self.role_set.first() |
2533 | - |
2534 | - |
2535 | -# When a resource pool is created is created, create a default role associated |
2536 | -# to it. |
2537 | -def create_resource_pool(sender, instance, created, **kwargs): |
2538 | - if not created: |
2539 | - return |
2540 | - |
2541 | - from maasserver.models.role import Role |
2542 | - role = Role( |
2543 | - name='role-{}'.format(instance.name), |
2544 | - description='Default role for resource pool {}'.format(instance.name)) |
2545 | - role.save() |
2546 | - role.resource_pools.add(instance) |
2547 | diff --git a/src/maasserver/models/role.py b/src/maasserver/models/role.py |
2548 | deleted file mode 100644 |
2549 | index 2f3b94e..0000000 |
2550 | --- a/src/maasserver/models/role.py |
2551 | +++ /dev/null |
2552 | @@ -1,27 +0,0 @@ |
2553 | -# Copyright 2012-2017 Canonical Ltd. This software is licensed under the |
2554 | -# GNU Affero General Public License version 3 (see the file LICENSE). |
2555 | - |
2556 | -"""User roles and permissions.""" |
2557 | - |
2558 | -from django.contrib.auth.models import User |
2559 | -from django.db.models import ( |
2560 | - CharField, |
2561 | - ManyToManyField, |
2562 | - Model, |
2563 | - TextField, |
2564 | -) |
2565 | -from maasserver.fields import MODEL_NAME_VALIDATOR |
2566 | -from maasserver.models.resourcepool import ResourcePool |
2567 | -from maasserver.models.usergroup import UserGroup |
2568 | - |
2569 | - |
2570 | -class Role(Model): |
2571 | - """A role defines user access to resource pools.""" |
2572 | - |
2573 | - name = CharField( |
2574 | - max_length=255, unique=True, blank=False, |
2575 | - validators=[MODEL_NAME_VALIDATOR]) |
2576 | - description = TextField(blank=True, editable=True) |
2577 | - users = ManyToManyField(User) |
2578 | - groups = ManyToManyField(UserGroup) |
2579 | - resource_pools = ManyToManyField(ResourcePool) |
2580 | diff --git a/src/maasserver/models/tests/test_bmc.py b/src/maasserver/models/tests/test_bmc.py |
2581 | index d0fbbf5..f8c0fe5 100644 |
2582 | --- a/src/maasserver/models/tests/test_bmc.py |
2583 | +++ b/src/maasserver/models/tests/test_bmc.py |
2584 | @@ -663,27 +663,26 @@ class TestPod(MAASServerTestCase): |
2585 | ), |
2586 | machines=machines) |
2587 | |
2588 | - def test_create_with_default_pool(self): |
2589 | + def test_create_with_pool(self): |
2590 | pool = ResourcePool.objects.get_default_resource_pool() |
2591 | - pod = Pod(power_type='virsh', power_parameters={}, default_pool=pool) |
2592 | + pod = Pod(power_type='virsh', power_parameters={}, pool=pool) |
2593 | pod.save() |
2594 | - self.assertEqual(pool, pod.default_pool) |
2595 | + self.assertEqual(pool, pod.pool) |
2596 | |
2597 | - def test_create_with_no_default_pool(self): |
2598 | + def test_create_with_no_pool(self): |
2599 | pod = Pod(power_type='virsh', power_parameters={}) |
2600 | pod.save() |
2601 | self.assertEqual( |
2602 | - ResourcePool.objects.get_default_resource_pool(), |
2603 | - pod.default_pool) |
2604 | + ResourcePool.objects.get_default_resource_pool(), pod.pool) |
2605 | |
2606 | def test_save_with_no_pool(self): |
2607 | pod = Pod(power_type='virsh', power_parameters={}) |
2608 | - pod.default_pool = None |
2609 | + pod.pool = None |
2610 | self.assertRaises(ValidationError, pod.save) |
2611 | |
2612 | - def test_no_delete_default_pool(self): |
2613 | + def test_no_delete_pod_pool(self): |
2614 | pool = factory.make_ResourcePool() |
2615 | - pod = Pod(power_type='virsh', power_parameters={}, default_pool=pool) |
2616 | + pod = Pod(power_type='virsh', power_parameters={}, pool=pool) |
2617 | pod.save() |
2618 | self.assertRaises(ProtectedError, pool.delete) |
2619 | |
2620 | @@ -878,7 +877,7 @@ class TestPod(MAASServerTestCase): |
2621 | machine = pod.create_machine(discovered_machine, factory.make_User()) |
2622 | self.assertNotEqual(machine.hostname, 'invalid_name') |
2623 | |
2624 | - def test_create_machine_pod_default_pool(self): |
2625 | + def test_create_machine_pod_pool(self): |
2626 | discovered_machine = self.make_discovered_machine() |
2627 | self.patch(Machine, "set_default_storage_layout") |
2628 | self.patch(Machine, "set_initial_networking_configuration") |
2629 | @@ -888,7 +887,7 @@ class TestPod(MAASServerTestCase): |
2630 | fabric=fabric, dhcp_on=True, |
2631 | primary_rack=factory.make_RackController()) |
2632 | pool = factory.make_ResourcePool() |
2633 | - pod = factory.make_Pod(default_pool=pool) |
2634 | + pod = factory.make_Pod(pool=pool) |
2635 | machine = pod.create_machine(discovered_machine, factory.make_User()) |
2636 | self.assertEqual(pool, machine.pool) |
2637 | |
2638 | @@ -1459,8 +1458,8 @@ class TestPodDelete(MAASTransactionServerTestCase): |
2639 | yield pod.async_delete() |
2640 | self.assertThat( |
2641 | client, MockCalledOnceWith( |
2642 | - DecomposeMachine, type=pod.power_type, context={}, |
2643 | - pod_id=pod.id, name=pod.name)) |
2644 | + DecomposeMachine, type=pod.power_type, |
2645 | + context=pod.power_parameters, pod_id=pod.id, name=pod.name)) |
2646 | decomposable_machine = yield deferToDatabase( |
2647 | reload_object, decomposable_machine) |
2648 | delete_machine = yield deferToDatabase(reload_object, delete_machine) |
2649 | diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py |
2650 | index aa2808d..a5a4a07 100644 |
2651 | --- a/src/maasserver/models/tests/test_node.py |
2652 | +++ b/src/maasserver/models/tests/test_node.py |
2653 | @@ -90,7 +90,6 @@ from maasserver.models import ( |
2654 | Service, |
2655 | Subnet, |
2656 | UnknownInterface, |
2657 | - UserGroup, |
2658 | VLAN, |
2659 | VLANInterface, |
2660 | ) |
2661 | @@ -476,25 +475,6 @@ class TestMachineManager(MAASServerTestCase): |
2662 | [], |
2663 | list(Machine.objects.get_available_machines_for_acquisition(user))) |
2664 | |
2665 | - def test_get_available_machines_only_in_accessible_pools(self): |
2666 | - user = factory.make_User() |
2667 | - machine = self.make_machine() |
2668 | - # the user doesn't have access to this pool |
2669 | - self.make_machine(pool=factory.make_ResourcePool()) |
2670 | - self.assertCountEqual( |
2671 | - Machine.objects.get_available_machines_for_acquisition(user), |
2672 | - [machine]) |
2673 | - |
2674 | - def test_get_availalble_machines_includes_accessible_via_group(self): |
2675 | - user = factory.make_User() |
2676 | - group = factory.make_UserGroup(users=[user]) |
2677 | - machine = self.make_machine() |
2678 | - pool = factory.make_ResourcePool(nodes=[machine]) |
2679 | - factory.make_Role(groups=[group], pools=[pool]) |
2680 | - self.assertCountEqual( |
2681 | - Machine.objects.get_available_machines_for_acquisition(user), |
2682 | - [machine]) |
2683 | - |
2684 | |
2685 | class TestControllerManager(MAASServerTestCase): |
2686 | |
2687 | @@ -1068,35 +1048,13 @@ class TestNode(MAASServerTestCase): |
2688 | ValidationError, factory.make_Node, node_type=NODE_TYPE.DEVICE, |
2689 | pool=pool) |
2690 | |
2691 | - def test_pool_and_owner_with_access(self): |
2692 | - pool = factory.make_ResourcePool() |
2693 | - user = factory.make_User() |
2694 | - pool.grant_user(user) |
2695 | - node = factory.make_Node(owner=user, pool=pool) |
2696 | - self.assertEqual(node.pool, pool) |
2697 | - |
2698 | - def test_pool_and_owner_without_access(self): |
2699 | - pool = factory.make_ResourcePool() |
2700 | - user = factory.make_User() |
2701 | - self.assertRaises( |
2702 | - ValidationError, factory.make_Node, owner=user, pool=pool) |
2703 | - |
2704 | def test_update_pool(self): |
2705 | pool = factory.make_ResourcePool() |
2706 | - user = factory.make_User() |
2707 | - pool.grant_user(user) |
2708 | - node = factory.make_Node(owner=user) |
2709 | + node = factory.make_Node() |
2710 | node.pool = pool |
2711 | node.save() |
2712 | self.assertEqual(node.pool, pool) |
2713 | |
2714 | - def test_update_pool_no_user_access(self): |
2715 | - pool = factory.make_ResourcePool() |
2716 | - user = factory.make_User() |
2717 | - node = factory.make_Node(owner=user) |
2718 | - node.pool = pool |
2719 | - self.assertRaises(ValidationError, node.save) |
2720 | - |
2721 | def test_lock(self): |
2722 | user = factory.make_User() |
2723 | node = factory.make_Node(status=NODE_STATUS.DEPLOYED) |
2724 | @@ -4941,14 +4899,13 @@ class NodeManagerTest(MAASServerTestCase): |
2725 | """get_nodes with perm=NODE_PERMISSION.VIEW lists the nodes a user |
2726 | has access to. |
2727 | |
2728 | - When run for a regular user it returns unowned nodes in accessible |
2729 | - pools, and nodes owned by that user. |
2730 | + When run for a regular user it returns unowned nodes and nodes owned by |
2731 | + that user. |
2732 | |
2733 | """ |
2734 | user = factory.make_User() |
2735 | visible_nodes = [self.make_node(owner) for owner in [None, user]] |
2736 | self.make_node(factory.make_User()) |
2737 | - factory.make_Node(pool=factory.make_ResourcePool()) |
2738 | self.assertItemsEqual( |
2739 | visible_nodes, Node.objects.get_nodes(user, NODE_PERMISSION.VIEW)) |
2740 | |
2741 | @@ -4994,10 +4951,7 @@ class NodeManagerTest(MAASServerTestCase): |
2742 | # Node that we'll exclude from from_nodes: |
2743 | factory.make_Node(owner=user) |
2744 | # Node that will be ignored on account of belonging to someone else: |
2745 | - invisible_node1 = factory.make_Node(owner=factory.make_User()) |
2746 | - # Node that will be ignored on account of being in a pool the user |
2747 | - # doesn't have access to |
2748 | - invisible_node2 = factory.make_Node(pool=factory.make_ResourcePool()) |
2749 | + invisible_node = factory.make_Node(owner=factory.make_User()) |
2750 | |
2751 | self.assertItemsEqual( |
2752 | [matching_node], |
2753 | @@ -5005,8 +4959,7 @@ class NodeManagerTest(MAASServerTestCase): |
2754 | user, NODE_PERMISSION.VIEW, |
2755 | from_nodes=Node.objects.filter(id__in=( |
2756 | matching_node.id, |
2757 | - invisible_node1.id, |
2758 | - invisible_node2.id |
2759 | + invisible_node.id, |
2760 | )))) |
2761 | |
2762 | def test_get_nodes_with_edit_perm_for_user_lists_owned_nodes(self): |
2763 | @@ -5083,7 +5036,6 @@ class NodeManagerTest(MAASServerTestCase): |
2764 | user_visible_nodes = [self.make_node(user), self.make_node(None)] |
2765 | admin_visible_nodes = user_visible_nodes + [ |
2766 | self.make_node(factory.make_User()), |
2767 | - self.make_node(pool=factory.make_ResourcePool()), |
2768 | factory.make_RackController(owner=user), |
2769 | factory.make_RackController(owner=None), |
2770 | factory.make_RegionController(), |
2771 | @@ -5097,24 +5049,6 @@ class NodeManagerTest(MAASServerTestCase): |
2772 | user_visible_nodes, |
2773 | Node.objects.get_nodes(user, NODE_PERMISSION.VIEW)) |
2774 | |
2775 | - def test_get_nodes_only_from_accessible_pools(self): |
2776 | - user = factory.make_User() |
2777 | - pool = factory.make_ResourcePool() |
2778 | - node = factory.make_Node() |
2779 | - # the user doesn't have access to the pool |
2780 | - factory.make_Node(pool=pool) |
2781 | - self.assertCountEqual( |
2782 | - Node.objects.get_nodes(user, NODE_PERMISSION.VIEW), |
2783 | - [node]) |
2784 | - |
2785 | - def test_get_nodes_no_accessible_pool(self): |
2786 | - user = factory.make_User() |
2787 | - default_usergroup = UserGroup.objects.get_default_usergroup() |
2788 | - default_usergroup.remove(user) |
2789 | - factory.make_Node() |
2790 | - self.assertCountEqual( |
2791 | - Node.objects.get_nodes(user, NODE_PERMISSION.VIEW), []) |
2792 | - |
2793 | def test_filter_nodes_by_spaces(self): |
2794 | # Create a throwaway node and a throwaway space. |
2795 | # (to ensure they are filtered out.) |
2796 | @@ -5286,15 +5220,6 @@ class NodeManagerTest(MAASServerTestCase): |
2797 | self.assertEqual(node, rack) |
2798 | self.assertIsInstance(rack, RackController) |
2799 | |
2800 | - def test_get_node_or_404_user_not_in_pool(self): |
2801 | - pool = factory.make_ResourcePool() |
2802 | - user = factory.make_User() |
2803 | - node = factory.make_Node(pool=pool) |
2804 | - self.assertRaises( |
2805 | - PermissionDenied, |
2806 | - Node.objects.get_node_or_404, |
2807 | - node.system_id, user, NODE_PERMISSION.VIEW) |
2808 | - |
2809 | def test_netboot_on(self): |
2810 | node = factory.make_Node(netboot=False) |
2811 | node.set_netboot(True) |
2812 | diff --git a/src/maasserver/models/tests/test_resourcepool.py b/src/maasserver/models/tests/test_resourcepool.py |
2813 | index f8efdb2..8984826 100644 |
2814 | --- a/src/maasserver/models/tests/test_resourcepool.py |
2815 | +++ b/src/maasserver/models/tests/test_resourcepool.py |
2816 | @@ -9,12 +9,9 @@ from maasserver.models.resourcepool import ( |
2817 | DEFAULT_RESOURCEPOOL_NAME, |
2818 | ResourcePool, |
2819 | ) |
2820 | -from maasserver.models.role import Role |
2821 | from maasserver.testing.factory import factory |
2822 | from maasserver.testing.testcase import MAASServerTestCase |
2823 | from maasserver.utils.orm import reload_object |
2824 | -from maasserver.worker_user import get_worker_user |
2825 | -from metadataserver.nodeinituser import get_node_init_user |
2826 | |
2827 | |
2828 | class TestResourcePoolManager(MAASServerTestCase): |
2829 | @@ -34,61 +31,6 @@ class TestResourcePoolManager(MAASServerTestCase): |
2830 | ResourcePool.objects.get_default_resource_pool().name, |
2831 | DEFAULT_RESOURCEPOOL_NAME) |
2832 | |
2833 | - def test_get_user_resource_pools_user_in_role(self): |
2834 | - user = factory.make_User() |
2835 | - default_pool = ResourcePool.objects.get_default_resource_pool() |
2836 | - pool1 = factory.make_ResourcePool() |
2837 | - pool2 = factory.make_ResourcePool() |
2838 | - factory.make_ResourcePool() # a pool the user doesn't have access to |
2839 | - factory.make_Role(users=[user], pools=[pool1, pool2]) |
2840 | - self.assertCountEqual( |
2841 | - ResourcePool.objects.get_user_resource_pools(user), |
2842 | - [default_pool, pool1, pool2]) |
2843 | - |
2844 | - def test_get_user_resource_pools_user_group_in_role(self): |
2845 | - user = factory.make_User() |
2846 | - default_pool = ResourcePool.objects.get_default_resource_pool() |
2847 | - pool1 = factory.make_ResourcePool() |
2848 | - pool2 = factory.make_ResourcePool() |
2849 | - factory.make_ResourcePool() # a pool the user doesn't have access to |
2850 | - group = factory.make_UserGroup(users=[user]) |
2851 | - factory.make_Role(groups=[group], pools=[pool1, pool2]) |
2852 | - self.assertCountEqual( |
2853 | - ResourcePool.objects.get_user_resource_pools(user), |
2854 | - [default_pool, pool1, pool2]) |
2855 | - |
2856 | - def test_get_user_resource_pools_role_direct_and_via_group(self): |
2857 | - user = factory.make_User() |
2858 | - group = factory.make_UserGroup(users=[user]) |
2859 | - default_pool = ResourcePool.objects.get_default_resource_pool() |
2860 | - pool1 = factory.make_ResourcePool() |
2861 | - pool2 = factory.make_ResourcePool() |
2862 | - factory.make_Role(users=[user], pools=[pool1]) |
2863 | - factory.make_Role(groups=[group], pools=[pool2]) |
2864 | - self.assertCountEqual( |
2865 | - ResourcePool.objects.get_user_resource_pools(user), |
2866 | - [default_pool, pool1, pool2]) |
2867 | - |
2868 | - def test_user_can_access_pool(self): |
2869 | - user = factory.make_User() |
2870 | - pool = factory.make_ResourcePool() |
2871 | - manager = ResourcePool.objects |
2872 | - self.assertFalse(manager.user_can_access_pool(user, pool)) |
2873 | - pool.grant_user(user) |
2874 | - self.assertTrue(manager.user_can_access_pool(user, pool)) |
2875 | - |
2876 | - def test_user_can_access_pool_worker_user(self): |
2877 | - user = get_worker_user() |
2878 | - pool = factory.make_ResourcePool() |
2879 | - self.assertTrue( |
2880 | - ResourcePool.objects.user_can_access_pool(user, pool)) |
2881 | - |
2882 | - def test_user_can_access_pool_node_init_user(self): |
2883 | - user = get_node_init_user() |
2884 | - pool = factory.make_ResourcePool() |
2885 | - self.assertTrue( |
2886 | - ResourcePool.objects.user_can_access_pool(user, pool)) |
2887 | - |
2888 | |
2889 | class TestResourcePool(MAASServerTestCase): |
2890 | |
2891 | @@ -108,31 +50,11 @@ class TestResourcePool(MAASServerTestCase): |
2892 | def test_is_default_false(self): |
2893 | self.assertFalse(factory.make_ResourcePool().is_default()) |
2894 | |
2895 | - def test_users(self): |
2896 | - user1 = factory.make_User() |
2897 | - user2 = factory.make_User() |
2898 | - factory.make_User() |
2899 | - pool = factory.make_ResourcePool(users=[user1, user2]) |
2900 | - self.assertCountEqual(pool.users, [user1, user2]) |
2901 | - |
2902 | - def test_groups(self): |
2903 | - group1 = factory.make_UserGroup() |
2904 | - group2 = factory.make_UserGroup() |
2905 | - factory.make_UserGroup() |
2906 | - pool = factory.make_ResourcePool(groups=[group1, group2]) |
2907 | - self.assertCountEqual(pool.groups, [group1, group2]) |
2908 | - |
2909 | def test_delete(self): |
2910 | pool = factory.make_ResourcePool() |
2911 | pool.delete() |
2912 | self.assertIsNone(reload_object(pool)) |
2913 | |
2914 | - def test_delete_removes_role(self): |
2915 | - pool = factory.make_ResourcePool() |
2916 | - role = pool.role_set.first() |
2917 | - pool.delete() |
2918 | - self.assertIsNone(reload_object(role)) |
2919 | - |
2920 | def test_delete_default_fails(self): |
2921 | pool = ResourcePool.objects.get_default_resource_pool() |
2922 | self.assertRaises(ValidationError, pool.delete) |
2923 | @@ -141,80 +63,3 @@ class TestResourcePool(MAASServerTestCase): |
2924 | pool = ResourcePool.objects.get_default_resource_pool() |
2925 | factory.make_Node(pool=pool) |
2926 | self.assertRaises(ValidationError, pool.delete) |
2927 | - |
2928 | - def test_create_adds_predefined_role(self): |
2929 | - name = factory.make_name() |
2930 | - pool = factory.make_ResourcePool(name=name) |
2931 | - role = Role.objects.get(name='role-{}'.format(name)) |
2932 | - self.assertCountEqual(role.resource_pools.all(), [pool]) |
2933 | - |
2934 | - def test_grant_user(self): |
2935 | - user = factory.make_User() |
2936 | - pool = factory.make_ResourcePool() |
2937 | - pool.grant_user(user) |
2938 | - self.assertIn( |
2939 | - pool, |
2940 | - ResourcePool.objects.get_user_resource_pools(user)) |
2941 | - |
2942 | - def test_revoke_user(self): |
2943 | - user = factory.make_User() |
2944 | - pool = factory.make_ResourcePool() |
2945 | - pool.grant_user(user) |
2946 | - pool.revoke_user(user) |
2947 | - self.assertNotIn( |
2948 | - pool, ResourcePool.objects.get_user_resource_pools(user)) |
2949 | - |
2950 | - def test_revoke_user_with_machine_in_pool_fail(self): |
2951 | - user = factory.make_User() |
2952 | - node = factory.make_Node(owner=user) |
2953 | - pool = factory.make_ResourcePool(users=[user], nodes=[node]) |
2954 | - # default_pool = ResourcePool.objects.get_default_resource_pool() |
2955 | - self.assertRaises(ValidationError, pool.revoke_user, user) |
2956 | - |
2957 | - def test_revoke_user_with_machine_access_via_group(self): |
2958 | - user = factory.make_User() |
2959 | - group = factory.make_UserGroup(users=[user]) |
2960 | - pool = factory.make_ResourcePool(groups=[group], users=[user]) |
2961 | - factory.make_Node(owner=user, pool=pool) |
2962 | - pool.revoke_user(user) |
2963 | - self.assertIn(pool, ResourcePool.objects.get_user_resource_pools(user)) |
2964 | - |
2965 | - def test_grant_group(self): |
2966 | - user = factory.make_User() |
2967 | - group = factory.make_UserGroup(users=[user]) |
2968 | - pool = factory.make_ResourcePool() |
2969 | - pool.grant_group(group) |
2970 | - self.assertIn( |
2971 | - pool, ResourcePool.objects.get_user_resource_pools(user)) |
2972 | - |
2973 | - def test_revoke_group(self): |
2974 | - user = factory.make_User() |
2975 | - group = factory.make_UserGroup(users=[user]) |
2976 | - pool = factory.make_ResourcePool(groups=[group]) |
2977 | - pool.revoke_group(group) |
2978 | - self.assertNotIn( |
2979 | - pool, ResourcePool.objects.get_user_resource_pools(user)) |
2980 | - |
2981 | - def test_revoke_group_with_owned_machine_fail(self): |
2982 | - user = factory.make_User() |
2983 | - group = factory.make_UserGroup(users=[user]) |
2984 | - pool = factory.make_ResourcePool(groups=[group]) |
2985 | - factory.make_Node(owner=user, pool=pool) |
2986 | - self.assertRaises(ValidationError, pool.revoke_group, group) |
2987 | - |
2988 | - def test_revoke_group_with_machine_direct_access(self): |
2989 | - user = factory.make_User() |
2990 | - group = factory.make_UserGroup(users=[user]) |
2991 | - pool = factory.make_ResourcePool(groups=[group], users=[user]) |
2992 | - factory.make_Node(owner=user, pool=pool) |
2993 | - pool.revoke_group(group) |
2994 | - self.assertIn(pool, ResourcePool.objects.get_user_resource_pools(user)) |
2995 | - |
2996 | - def test_revoke_group_with_machine_other_group_access(self): |
2997 | - user = factory.make_User() |
2998 | - group1 = factory.make_UserGroup(users=[user]) |
2999 | - group2 = factory.make_UserGroup(users=[user]) |
3000 | - pool = factory.make_ResourcePool(groups=[group1, group2]) |
3001 | - factory.make_Node(owner=user, pool=pool) |
3002 | - pool.revoke_group(group1) |
3003 | - self.assertIn(pool, ResourcePool.objects.get_user_resource_pools(user)) |
3004 | diff --git a/src/maasserver/models/tests/test_role.py b/src/maasserver/models/tests/test_role.py |
3005 | deleted file mode 100644 |
3006 | index 1cf92b2..0000000 |
3007 | --- a/src/maasserver/models/tests/test_role.py |
3008 | +++ /dev/null |
3009 | @@ -1,42 +0,0 @@ |
3010 | -# Copyright 2013-2017 Canonical Ltd. This software is licensed under the |
3011 | -# GNU Affero General Public License version 3 (see the file LICENSE). |
3012 | - |
3013 | -"""Test Role objects.""" |
3014 | - |
3015 | -from maasserver.testing.factory import factory |
3016 | -from maasserver.testing.testcase import MAASServerTestCase |
3017 | - |
3018 | - |
3019 | -class TestRole(MAASServerTestCase): |
3020 | - """Tests for :class:`Role`.""" |
3021 | - |
3022 | - def test_init(self): |
3023 | - name = factory.make_name('name') |
3024 | - description = factory.make_name('description') |
3025 | - role = factory.make_Role(name=name, description=description) |
3026 | - self.assertEqual(role.name, name) |
3027 | - self.assertEqual(role.description, description) |
3028 | - |
3029 | - def test_related_users(self): |
3030 | - user1 = factory.make_User() |
3031 | - user2 = factory.make_User() |
3032 | - role = factory.make_Role() |
3033 | - role.users.add(user1) |
3034 | - role.users.add(user2) |
3035 | - self.assertCountEqual(role.users.all(), [user1, user2]) |
3036 | - |
3037 | - def test_related_group(self): |
3038 | - group1 = factory.make_UserGroup() |
3039 | - group2 = factory.make_UserGroup() |
3040 | - role = factory.make_Role() |
3041 | - role.groups.add(group1) |
3042 | - role.groups.add(group2) |
3043 | - self.assertCountEqual(role.groups.all(), [group1, group2]) |
3044 | - |
3045 | - def test_related_resource_pools(self): |
3046 | - pool1 = factory.make_ResourcePool() |
3047 | - pool2 = factory.make_ResourcePool() |
3048 | - role = factory.make_Role() |
3049 | - role.resource_pools.add(pool1) |
3050 | - role.resource_pools.add(pool2) |
3051 | - self.assertCountEqual(role.resource_pools.all(), [pool1, pool2]) |
3052 | diff --git a/src/maasserver/models/tests/test_usergroup.py b/src/maasserver/models/tests/test_usergroup.py |
3053 | deleted file mode 100644 |
3054 | index edb0361..0000000 |
3055 | --- a/src/maasserver/models/tests/test_usergroup.py |
3056 | +++ /dev/null |
3057 | @@ -1,187 +0,0 @@ |
3058 | -# Copyright 2018 Canonical Ltd. This software is licensed under the |
3059 | -# GNU Affero General Public License version 3 (see the file LICENSE). |
3060 | - |
3061 | -"""Test UserGroup objects.""" |
3062 | - |
3063 | -from django.core.exceptions import ValidationError |
3064 | -from maasserver.models import ResourcePool |
3065 | -from maasserver.models.usergroup import ( |
3066 | - DEFAULT_USERGROUP_DESCRIPTION, |
3067 | - DEFAULT_USERGROUP_NAME, |
3068 | - UserGroup, |
3069 | -) |
3070 | -from maasserver.testing.factory import factory |
3071 | -from maasserver.testing.testcase import MAASServerTestCase |
3072 | -from maasserver.utils.orm import reload_object |
3073 | -from maasserver.worker_user import get_worker_user |
3074 | -from metadataserver.nodeinituser import get_node_init_user |
3075 | - |
3076 | - |
3077 | -class TestUserGroupManager(MAASServerTestCase): |
3078 | - """Tests for `UserGroup` manager.""" |
3079 | - |
3080 | - def test_get_default_usergroup_returns_default(self): |
3081 | - group = UserGroup.objects.get_default_usergroup() |
3082 | - self.assertEqual(group.id, 0) |
3083 | - self.assertEqual(group.name, DEFAULT_USERGROUP_NAME) |
3084 | - self.assertEqual(group.description, DEFAULT_USERGROUP_DESCRIPTION) |
3085 | - self.assertIsNotNone(group.created) |
3086 | - self.assertIsNotNone(group.updated) |
3087 | - |
3088 | - def test_get_default_usergroup_ignores_other_groups(self): |
3089 | - factory.make_UserGroup() |
3090 | - self.assertEqual( |
3091 | - UserGroup.objects.get_default_usergroup().name, |
3092 | - DEFAULT_USERGROUP_NAME) |
3093 | - |
3094 | - def test_get_remote_group_names(self): |
3095 | - remote1 = factory.make_UserGroup(local=False) |
3096 | - remote2 = factory.make_UserGroup(local=False) |
3097 | - factory.make_UserGroup(local=True) |
3098 | - self.assertEqual( |
3099 | - UserGroup.objects.get_remote_group_names(), |
3100 | - {remote1.name, remote2.name}) |
3101 | - |
3102 | - def test_user_assigned_to_default_group(self): |
3103 | - default_group = UserGroup.objects.get_default_usergroup() |
3104 | - user = factory.make_User() |
3105 | - self.assertIn(user, default_group.users.all()) |
3106 | - |
3107 | - def test_worker_user_not_in_default_group(self): |
3108 | - default_group = UserGroup.objects.get_default_usergroup() |
3109 | - self.assertNotIn(get_worker_user(), default_group.users.all()) |
3110 | - |
3111 | - def test_node_init_user_not_in_default_group(self): |
3112 | - default_group = UserGroup.objects.get_default_usergroup() |
3113 | - self.assertNotIn(get_node_init_user(), default_group.users.all()) |
3114 | - |
3115 | - |
3116 | -class TestUserGroup(MAASServerTestCase): |
3117 | - |
3118 | - def test_init(self): |
3119 | - name = factory.make_name('name') |
3120 | - description = factory.make_name('description') |
3121 | - group = UserGroup(name=name, description=description) |
3122 | - group.save() |
3123 | - group = reload_object(group) |
3124 | - self.assertEqual(group.name, name) |
3125 | - self.assertEqual(group.description, description) |
3126 | - self.assertTrue(group.local) |
3127 | - |
3128 | - def test_not_local(self): |
3129 | - group = UserGroup( |
3130 | - name=factory.make_name(), description=factory.make_name(), |
3131 | - local=False) |
3132 | - group.save() |
3133 | - group = reload_object(group) |
3134 | - self.assertFalse(group.local) |
3135 | - |
3136 | - def test_is_default_true(self): |
3137 | - self.assertTrue( |
3138 | - UserGroup.objects.get_default_usergroup().is_default()) |
3139 | - |
3140 | - def test_is_default_false(self): |
3141 | - self.assertFalse(factory.make_UserGroup().is_default()) |
3142 | - |
3143 | - def test_delete(self): |
3144 | - group = factory.make_UserGroup() |
3145 | - group.delete() |
3146 | - self.assertIsNone(reload_object(group)) |
3147 | - |
3148 | - def test_delete_default_fails(self): |
3149 | - group = UserGroup.objects.get_default_usergroup() |
3150 | - self.assertRaises(ValidationError, group.delete) |
3151 | - |
3152 | - def test_delete_with_user_losing_access_fails(self): |
3153 | - user = factory.make_User() |
3154 | - group = factory.make_UserGroup(users=[user]) |
3155 | - node = factory.make_Node(owner=user) |
3156 | - factory.make_ResourcePool(groups=[group], nodes=[node]) |
3157 | - self.assertRaises(ValidationError, group.delete) |
3158 | - |
3159 | - def test_delete_with_user_direct_access(self): |
3160 | - user = factory.make_User() |
3161 | - group = factory.make_UserGroup(users=[user]) |
3162 | - node = factory.make_Node(owner=user) |
3163 | - pool = factory.make_ResourcePool( |
3164 | - groups=[group], users=[user], nodes=[node]) |
3165 | - group.delete() |
3166 | - self.assertIn( |
3167 | - pool, ResourcePool.objects.get_user_resource_pools(user)) |
3168 | - |
3169 | - def test_delete_with_other_group_access(self): |
3170 | - user = factory.make_User() |
3171 | - group1 = factory.make_UserGroup(users=[user]) |
3172 | - group2 = factory.make_UserGroup(users=[user]) |
3173 | - node = factory.make_Node(owner=user) |
3174 | - pool = factory.make_ResourcePool(groups=[group1, group2], nodes=[node]) |
3175 | - group1.delete() |
3176 | - self.assertIn( |
3177 | - pool, ResourcePool.objects.get_user_resource_pools(user)) |
3178 | - |
3179 | - def test_delete_user_unrelated_resources(self): |
3180 | - user = factory.make_User() |
3181 | - group1 = factory.make_UserGroup(users=[user]) |
3182 | - group2 = factory.make_UserGroup(users=[user]) |
3183 | - node = factory.make_Node(owner=user) |
3184 | - factory.make_ResourcePool(groups=[group1]) |
3185 | - pool2 = factory.make_ResourcePool(groups=[group2], nodes=[node]) |
3186 | - group1.delete() |
3187 | - self.assertIn( |
3188 | - pool2, ResourcePool.objects.get_user_resource_pools(user)) |
3189 | - |
3190 | - def test_add_user(self): |
3191 | - user = factory.make_User() |
3192 | - group = factory.make_UserGroup() |
3193 | - group.add(user) |
3194 | - self.assertCountEqual(group.users.all(), [user]) |
3195 | - |
3196 | - def test_add_user_already_in_group(self): |
3197 | - user = factory.make_User() |
3198 | - group = factory.make_UserGroup(users=[user]) |
3199 | - group.add(user) |
3200 | - self.assertCountEqual(group.users.all(), [user]) |
3201 | - |
3202 | - def test_remove_user(self): |
3203 | - user1 = factory.make_User() |
3204 | - user2 = factory.make_User() |
3205 | - group = factory.make_UserGroup(users=[user1, user2]) |
3206 | - group.remove(user1) |
3207 | - self.assertCountEqual(group.users.all(), [user2]) |
3208 | - |
3209 | - def test_remove_user_would_lose_machine_access(self): |
3210 | - user = factory.make_User() |
3211 | - group = factory.make_UserGroup(users=[user]) |
3212 | - pool = factory.make_ResourcePool() |
3213 | - factory.make_Role(pools=[pool], groups=[group]) |
3214 | - factory.make_Node(owner=user, pool=pool) |
3215 | - self.assertRaises(ValidationError, group.remove, user) |
3216 | - |
3217 | - def test_remove_user_with_other_group_access_to_machine(self): |
3218 | - user = factory.make_User() |
3219 | - group1 = factory.make_UserGroup(users=[user]) |
3220 | - group2 = factory.make_UserGroup(users=[user]) |
3221 | - pool = factory.make_ResourcePool() |
3222 | - factory.make_Role(pools=[pool], groups=[group1]) |
3223 | - factory.make_Role(pools=[pool], groups=[group2]) |
3224 | - factory.make_Node(owner=user, pool=pool) |
3225 | - group1.remove(user) |
3226 | - self.assertTrue(ResourcePool.objects.user_can_access_pool(user, pool)) |
3227 | - |
3228 | - def test_remove_user_with_other_group_access_to_machine_same_role(self): |
3229 | - user = factory.make_User() |
3230 | - group1 = factory.make_UserGroup(users=[user]) |
3231 | - group2 = factory.make_UserGroup(users=[user]) |
3232 | - pool = factory.make_ResourcePool() |
3233 | - factory.make_Role(pools=[pool], groups=[group1, group2]) |
3234 | - factory.make_Node(owner=user, pool=pool) |
3235 | - group1.remove(user) |
3236 | - self.assertTrue(ResourcePool.objects.user_can_access_pool(user, pool)) |
3237 | - |
3238 | - def test_remove_user_with_direct_access_to_machine(self): |
3239 | - user = factory.make_User() |
3240 | - group = factory.make_UserGroup(users=[user]) |
3241 | - pool = factory.make_ResourcePool(users=[user]) |
3242 | - factory.make_Role(pools=[pool], groups=[group]) |
3243 | - group.remove(user) |
3244 | - self.assertTrue(ResourcePool.objects.user_can_access_pool(user, pool)) |
3245 | diff --git a/src/maasserver/models/tests/test_userprofile.py b/src/maasserver/models/tests/test_userprofile.py |
3246 | index 8a0efac..9fa2ba1 100644 |
3247 | --- a/src/maasserver/models/tests/test_userprofile.py |
3248 | +++ b/src/maasserver/models/tests/test_userprofile.py |
3249 | @@ -6,7 +6,6 @@ |
3250 | __all__ = [] |
3251 | |
3252 | from django.contrib.auth.models import User |
3253 | -from django.core.exceptions import ValidationError |
3254 | from maasserver.exceptions import CannotDeleteUserException |
3255 | from maasserver.models import ( |
3256 | FileStorage, |
3257 | @@ -140,20 +139,6 @@ class UserProfileTest(MAASServerTestCase): |
3258 | self.assertEqual(reload_object(ipaddress).user, new_user) |
3259 | self.assertEqual(reload_object(iprange).user, new_user) |
3260 | |
3261 | - def test_transfer_resources_missing_target_access(self): |
3262 | - user = factory.make_User() |
3263 | - pool = factory.make_ResourcePool(users=[user]) |
3264 | - node = factory.make_Node(owner=user, pool=pool) |
3265 | - new_user = factory.make_User() |
3266 | - error = self.assertRaises( |
3267 | - ValidationError, user.userprofile.transfer_resources, new_user) |
3268 | - self.assertEqual( |
3269 | - error.message, |
3270 | - "Can't transfer machines to new user, user missing access target" |
3271 | - " resource pool(s)") |
3272 | - # owner didn't change |
3273 | - self.assertEqual(reload_object(node).owner, user) |
3274 | - |
3275 | def test_manager_all_users(self): |
3276 | users = set(factory.make_User() for _ in range(3)) |
3277 | all_users = set(UserProfile.objects.all_users()) |
3278 | diff --git a/src/maasserver/models/user.py b/src/maasserver/models/user.py |
3279 | index 369783f..267840a 100644 |
3280 | --- a/src/maasserver/models/user.py |
3281 | +++ b/src/maasserver/models/user.py |
3282 | @@ -87,11 +87,6 @@ def create_user(sender, instance, created, **kwargs): |
3283 | # Create initial authorisation token. |
3284 | profile.create_authorisation_token() |
3285 | |
3286 | - # Assign the user to the default group |
3287 | - from maasserver.models import UserGroup |
3288 | - default_group = UserGroup.objects.get_default_usergroup() |
3289 | - default_group.add(instance) |
3290 | - |
3291 | |
3292 | def get_creds_tuple(token): |
3293 | """Return API credentials as tuple, as used in :class:`MAASOAuth`. |
3294 | diff --git a/src/maasserver/models/usergroup.py b/src/maasserver/models/usergroup.py |
3295 | deleted file mode 100644 |
3296 | index 38ce656..0000000 |
3297 | --- a/src/maasserver/models/usergroup.py |
3298 | +++ /dev/null |
3299 | @@ -1,145 +0,0 @@ |
3300 | -# Copyright 2018 Canonical Ltd. This software is licensed under the |
3301 | -# GNU Affero General Public License version 3 (see the file LICENSE). |
3302 | - |
3303 | -"""UserGroup model""" |
3304 | - |
3305 | -__all__ = [ |
3306 | - "DEFAULT_USERGROUP_DESCRIPTION", |
3307 | - "DEFAULT_USERGROUP_NAME", |
3308 | - "UserGroup", |
3309 | -] |
3310 | - |
3311 | -from datetime import datetime |
3312 | - |
3313 | -from django.contrib.auth.models import User |
3314 | -from django.core.exceptions import ValidationError |
3315 | -from django.db.models import ( |
3316 | - BooleanField, |
3317 | - CASCADE, |
3318 | - CharField, |
3319 | - Count, |
3320 | - ForeignKey, |
3321 | - Manager, |
3322 | - ManyToManyField, |
3323 | - Model, |
3324 | - Q, |
3325 | - TextField, |
3326 | -) |
3327 | -from maasserver import DefaultMeta |
3328 | -from maasserver.fields import MODEL_NAME_VALIDATOR |
3329 | -from maasserver.models import ( |
3330 | - Node, |
3331 | - ResourcePool, |
3332 | -) |
3333 | -from maasserver.models.cleansave import CleanSave |
3334 | -from maasserver.models.timestampedmodel import TimestampedModel |
3335 | - |
3336 | - |
3337 | -DEFAULT_USERGROUP_NAME = 'default' |
3338 | -DEFAULT_USERGROUP_DESCRIPTION = 'Default user group' |
3339 | - |
3340 | - |
3341 | -class UserGroupManager(Manager): |
3342 | - """Manager for the :class:`UserGroup` model.""" |
3343 | - |
3344 | - def get_default_usergroup(self): |
3345 | - """Return the default user group.""" |
3346 | - now = datetime.now() |
3347 | - group, _ = self.get_or_create( |
3348 | - id=0, |
3349 | - defaults={ |
3350 | - 'id': 0, |
3351 | - 'name': DEFAULT_USERGROUP_NAME, |
3352 | - 'description': DEFAULT_USERGROUP_DESCRIPTION, |
3353 | - 'created': now, |
3354 | - 'updated': now}) |
3355 | - return group |
3356 | - |
3357 | - def get_remote_group_names(self): |
3358 | - """Return names of groups related to external authentication.""" |
3359 | - return frozenset( |
3360 | - self.filter(local=False).values_list('name', flat=True)) |
3361 | - |
3362 | - |
3363 | -class UserGroup(CleanSave, TimestampedModel): |
3364 | - """A Group of Users.""" |
3365 | - |
3366 | - objects = UserGroupManager() |
3367 | - |
3368 | - name = CharField( |
3369 | - max_length=256, unique=True, editable=True, |
3370 | - validators=[MODEL_NAME_VALIDATOR]) |
3371 | - description = TextField(null=False, blank=True) |
3372 | - local = BooleanField(blank=True, default=True) |
3373 | - users = ManyToManyField(User, through='UserGroupMembership') |
3374 | - |
3375 | - class Meta(DefaultMeta): |
3376 | - |
3377 | - ordering = ['name'] |
3378 | - |
3379 | - def __str__(self): |
3380 | - return self.name |
3381 | - |
3382 | - def is_default(self): |
3383 | - """Whether this is the default user group.""" |
3384 | - return self.id == 0 |
3385 | - |
3386 | - def delete(self): |
3387 | - if self.is_default(): |
3388 | - raise ValidationError( |
3389 | - 'This is the default user group, it cannot be deleted.') |
3390 | - |
3391 | - # check if by removing the group, any user would lose access to |
3392 | - # machines in related resource pools |
3393 | - nodes = Node.objects.filter( |
3394 | - owner__isnull=False, pool__role__groups=self) |
3395 | - # get a list of tuples with (User ID, Node ID) for users that have a |
3396 | - # single way of accessing nodes in pool related to the group being |
3397 | - # removed through user groups |
3398 | - affected_users = User.objects.filter( |
3399 | - usergroup__role__resource_pools__node__in=nodes).annotate( |
3400 | - access_count=Count('usergroup')).filter( |
3401 | - access_count__lte=1).values('id', 'node') |
3402 | - # remove tuples where users can access machines through a direct |
3403 | - # relation with roles associated to resource pools |
3404 | - affected_users = affected_users.difference( |
3405 | - User.objects.filter( |
3406 | - role__resource_pools__node__in=nodes).values('id', 'node')) |
3407 | - if affected_users: |
3408 | - raise ValidationError( |
3409 | - "Can't remove group, some users have machines that" |
3410 | - " would become unaccessible") |
3411 | - |
3412 | - super().delete() |
3413 | - |
3414 | - def add(self, user): |
3415 | - """Add a user to this group.""" |
3416 | - if user in self.users.all(): |
3417 | - return |
3418 | - UserGroupMembership.objects.create(user=user, group=self) |
3419 | - |
3420 | - def remove(self, user): |
3421 | - """Remove a user from this group.""" |
3422 | - self._check_pools_accessibility_without_group(user) |
3423 | - UserGroupMembership.objects.filter(user=user, group=self).delete() |
3424 | - |
3425 | - def _check_pools_accessibility_without_group(self, user): |
3426 | - """Check required pools are still accessible after removing user.""" |
3427 | - # pools that are required to be accessible by the user because of owned |
3428 | - # resources |
3429 | - required_pools = ResourcePool.objects.filter(node__owner=user) |
3430 | - # pools that are accessible after removing the user from the group |
3431 | - from maasserver.models import Role |
3432 | - roles = Role.objects.filter( |
3433 | - Q(users=user) | (Q(groups__users=user) & ~Q(groups=self))) |
3434 | - pools = ResourcePool.objects.filter(role__in=roles) |
3435 | - if required_pools.difference(pools): |
3436 | - raise ValidationError( |
3437 | - "Can't remove user from group, owned machines are in pools" |
3438 | - " that would become unaccessible.") |
3439 | - |
3440 | - |
3441 | -class UserGroupMembership(Model): |
3442 | - |
3443 | - user = ForeignKey(User, on_delete=CASCADE) |
3444 | - group = ForeignKey(UserGroup, on_delete=CASCADE) |
3445 | diff --git a/src/maasserver/models/userprofile.py b/src/maasserver/models/userprofile.py |
3446 | index d8a79c4..d587f5c 100644 |
3447 | --- a/src/maasserver/models/userprofile.py |
3448 | +++ b/src/maasserver/models/userprofile.py |
3449 | @@ -9,7 +9,6 @@ __all__ = [ |
3450 | |
3451 | |
3452 | from django.contrib.auth.models import User |
3453 | -from django.core.exceptions import ValidationError |
3454 | from django.db.models import ( |
3455 | BooleanField, |
3456 | CASCADE, |
3457 | @@ -21,7 +20,6 @@ from django.db.models import ( |
3458 | from django.shortcuts import get_object_or_404 |
3459 | from maasserver import DefaultMeta |
3460 | from maasserver.exceptions import CannotDeleteUserException |
3461 | -from maasserver.models import ResourcePool |
3462 | from maasserver.models.cleansave import CleanSave |
3463 | from piston3.models import Token |
3464 | |
3465 | @@ -105,12 +103,6 @@ class UserProfile(CleanSave, Model): |
3466 | :type new_owner: maasserver.models.UserProfile |
3467 | |
3468 | """ |
3469 | - user_pools = ResourcePool.objects.get_user_resource_pools(new_owner) |
3470 | - nodes = self.user.node_set |
3471 | - if nodes.exists() and nodes.exclude(pool__in=user_pools).exists(): |
3472 | - raise ValidationError( |
3473 | - "Can't transfer machines to new user," |
3474 | - " user missing access target resource pool(s)") |
3475 | self.user.node_set.update(owner=new_owner) |
3476 | self.user.staticipaddress_set.update(user=new_owner) |
3477 | self.user.iprange_set.update(user=new_owner) |
3478 | diff --git a/src/maasserver/node_action.py b/src/maasserver/node_action.py |
3479 | index 6cc9097..10ba760 100644 |
3480 | --- a/src/maasserver/node_action.py |
3481 | +++ b/src/maasserver/node_action.py |
3482 | @@ -39,7 +39,10 @@ from maasserver.exceptions import ( |
3483 | NodeActionError, |
3484 | StaticIPAddressExhaustion, |
3485 | ) |
3486 | -from maasserver.models import Zone |
3487 | +from maasserver.models import ( |
3488 | + ResourcePool, |
3489 | + Zone, |
3490 | +) |
3491 | from maasserver.node_status import ( |
3492 | is_failed_status, |
3493 | NON_MONITORED_STATUSES, |
3494 | @@ -223,6 +226,23 @@ class SetZone(NodeAction): |
3495 | self.node.set_zone(zone) |
3496 | |
3497 | |
3498 | +class SetPool(NodeAction): |
3499 | + """Set the resource pool of a node.""" |
3500 | + name = "set-pool" |
3501 | + display = "Set resource pool" |
3502 | + display_sentence = "Pool set" |
3503 | + actionable_statuses = ALL_STATUSES |
3504 | + permission = NODE_PERMISSION.EDIT |
3505 | + node_permission = NODE_PERMISSION.ADMIN |
3506 | + for_type = {NODE_TYPE.MACHINE} |
3507 | + |
3508 | + def execute(self, pool_id=None): |
3509 | + """See `NodeAction.execute`.""" |
3510 | + pool = ResourcePool.objects.get(id=pool_id) |
3511 | + self.node.pool = pool |
3512 | + self.node.save() |
3513 | + |
3514 | + |
3515 | class Commission(NodeAction): |
3516 | """Accept a node into the MAAS, and start the commissioning process.""" |
3517 | name = "commission" |
3518 | @@ -657,6 +677,7 @@ ACTION_CLASSES = ( |
3519 | Lock, |
3520 | Unlock, |
3521 | SetZone, |
3522 | + SetPool, |
3523 | ImportImages, |
3524 | Delete, |
3525 | ) |
3526 | diff --git a/src/maasserver/node_constraint_filter_forms.py b/src/maasserver/node_constraint_filter_forms.py |
3527 | index 84cf84c..8b052b5 100644 |
3528 | --- a/src/maasserver/node_constraint_filter_forms.py |
3529 | +++ b/src/maasserver/node_constraint_filter_forms.py |
3530 | @@ -33,6 +33,7 @@ from maasserver.models import ( |
3531 | Filesystem, |
3532 | Interface, |
3533 | Pod, |
3534 | + ResourcePool, |
3535 | Subnet, |
3536 | Tag, |
3537 | VLAN, |
3538 | @@ -581,6 +582,15 @@ class AcquireNodeForm(RenamableFieldsForm): |
3539 | 'invalid_list': "Invalid parameter: must list physical zones.", |
3540 | }) |
3541 | |
3542 | + pool = forms.CharField(label="Resource pool", required=False) |
3543 | + |
3544 | + not_in_pool = ValidatorMultipleChoiceField( |
3545 | + validator=MODEL_NAME_VALIDATOR, |
3546 | + label="Not in resource pool", required=False, |
3547 | + error_messages={ |
3548 | + 'invalid_list': "Invalid parameter: must list resource pools.", |
3549 | + }) |
3550 | + |
3551 | storage = forms.CharField( |
3552 | validators=[storage_validator], label="Storage", required=False) |
3553 | |
3554 | @@ -673,6 +683,28 @@ class AcquireNodeForm(RenamableFieldsForm): |
3555 | return None |
3556 | return value |
3557 | |
3558 | + def clean_pool(self): |
3559 | + value = self.cleaned_data[self.get_field_name('pool')] |
3560 | + if value: |
3561 | + nonexistent_names = detect_nonexistent_names(ResourcePool, [value]) |
3562 | + if nonexistent_names: |
3563 | + error_msg = "No such pool: '%s'." % value |
3564 | + set_form_error(self, self.get_field_name('pool'), error_msg) |
3565 | + return None |
3566 | + return value |
3567 | + return None |
3568 | + |
3569 | + def clean_not_in_pool(self): |
3570 | + value = self.cleaned_data[self.get_field_name('not_in_pool')] |
3571 | + if not value: |
3572 | + return None |
3573 | + nonexistent_names = detect_nonexistent_names(ResourcePool, value) |
3574 | + if nonexistent_names: |
3575 | + error_msg = "No such pool(s): %s." % ', '.join(nonexistent_names) |
3576 | + set_form_error(self, self.get_field_name('not_in_pool'), error_msg) |
3577 | + return None |
3578 | + return value |
3579 | + |
3580 | def _clean_specifiers(self, model, specifiers): |
3581 | if not specifiers: |
3582 | return None |
3583 | @@ -770,6 +802,7 @@ class AcquireNodeForm(RenamableFieldsForm): |
3584 | filtered_nodes = self.filter_by_mem(filtered_nodes) |
3585 | filtered_nodes = self.filter_by_tags(filtered_nodes) |
3586 | filtered_nodes = self.filter_by_zone(filtered_nodes) |
3587 | + filtered_nodes = self.filter_by_pool(filtered_nodes) |
3588 | filtered_nodes = self.filter_by_subnets(filtered_nodes) |
3589 | filtered_nodes = self.filter_by_vlans(filtered_nodes) |
3590 | filtered_nodes = self.filter_by_fabrics(filtered_nodes) |
3591 | @@ -881,6 +914,18 @@ class AcquireNodeForm(RenamableFieldsForm): |
3592 | filtered_nodes = filtered_nodes.exclude(zone__in=not_in_zones) |
3593 | return filtered_nodes |
3594 | |
3595 | + def filter_by_pool(self, filtered_nodes): |
3596 | + pool_name = self.cleaned_data.get(self.get_field_name('pool')) |
3597 | + if pool_name: |
3598 | + pool = ResourcePool.objects.get(name=pool_name) |
3599 | + filtered_nodes = filtered_nodes.filter(pool=pool) |
3600 | + not_in_pool = self.cleaned_data.get(self.get_field_name('not_in_pool')) |
3601 | + if not_in_pool: |
3602 | + pools_to_exclude = ResourcePool.objects.filter( |
3603 | + name__in=not_in_pool) |
3604 | + filtered_nodes = filtered_nodes.exclude(pool__in=pools_to_exclude) |
3605 | + return filtered_nodes |
3606 | + |
3607 | def filter_by_tags(self, filtered_nodes): |
3608 | tags = self.cleaned_data.get(self.get_field_name('tags')) |
3609 | if tags: |
3610 | diff --git a/src/maasserver/static/css/build.css b/src/maasserver/static/css/build.css |
3611 | index 49c4871..c971c91 100644 |
3612 | --- a/src/maasserver/static/css/build.css |
3613 | +++ b/src/maasserver/static/css/build.css |
3614 | @@ -1 +1 @@ |
3615 | -button,.p-button,.p-button--neutral,.p-button--brand,.p-button--positive,.p-button--negative,.p-button--base{transition-duration:0.165s;transition-property:background-color;transition-timing-function:cubic-bezier(0.55, 0.055, 0.675, 0.19);border-radius:.125rem;border-style:solid;border-width:1px;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:"Ubuntu", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;font-size:1rem;font-weight:300;line-height:1rem;outline:none;padding:.75rem 1.5rem;text-align:center;text-decoration:none;width:100%}button:focus,.p-button:focus,.p-button--neutral:focus,.p-button--brand:focus,.p-button--positive:focus,.p-button--negative:focus,.p-button--base:focus{outline:1px solid #19b6ee;outline-offset:2px}@media (max-width: 459px){button+button,.p-button+button,.p-button--neutral+button,.p-button--brand+button,.p-button--positive+button,.p-button--negative+button,.p-button--base+button,button+.p-button,.p-button+.p-button,.p-button--neutral+.p-button,.p-button--brand+.p-button,.p-button--positive+.p-button,.p-button--negative+.p-button,.p-button--base+.p-button,button+.p-button--neutral,.p-button+.p-button--neutral,.p-button--neutral+.p-button--neutral,.p-button--brand+.p-button--neutral,.p-button--positive+.p-button--neutral,.p-button--negative+.p-button--neutral,.p-button--base+.p-button--neutral,button+.p-button--brand,.p-button+.p-button--brand,.p-button--neutral+.p-button--brand,.p-button--brand+.p-button--brand,.p-button--positive+.p-button--brand,.p-button--negative+.p-button--brand,.p-button--base+.p-button--brand,button+.p-button--positive,.p-button+.p-button--positive,.p-button--neutral+.p-button--positive,.p-button--brand+.p-button--positive,.p-button--positive+.p-button--positive,.p-button--negative+.p-button--positive,.p-button--base+.p-button--positive,button+.p-button--negative,.p-button+.p-button--negative,.p-button--neutral+.p-button--negative,.p-button--brand+.p-button--negative,.p-button--positive+.p-button--negative,.p-button--negative+.p-button--negative,.p-button--base+.p-button--negative,button+.p-button--base,.p-button+.p-button--base,.p-button--neutral+.p-button--base,.p-button--brand+.p-button--base,.p-button--positive+.p-button--base,.p-button--negative+.p-button--base,.p-button--base+.p-button--base{margin-top:1rem}}@media (min-width: 460px){button+button,.p-button+button,.p-button--neutral+button,.p-button--brand+button,.p-button--positive+button,.p-button--negative+button,.p-button--base+button,button+.p-button,.p-button+.p-button,.p-button--neutral+.p-button,.p-button--brand+.p-button,.p-button--positive+.p-button,.p-button--negative+.p-button,.p-button--base+.p-button,button+.p-button--neutral,.p-button+.p-button--neutral,.p-button--neutral+.p-button--neutral,.p-button--brand+.p-button--neutral,.p-button--positive+.p-button--neutral,.p-button--negative+.p-button--neutral,.p-button--base+.p-button--neutral,button+.p-button--brand,.p-button+.p-button--brand,.p-button--neutral+.p-button--brand,.p-button--brand+.p-button--brand,.p-button--positive+.p-button--brand,.p-button--negative+.p-button--brand,.p-button--base+.p-button--brand,button+.p-button--positive,.p-button+.p-button--positive,.p-button--neutral+.p-button--positive,.p-button--brand+.p-button--positive,.p-button--positive+.p-button--positive,.p-button--negative+.p-button--positive,.p-button--base+.p-button--positive,button+.p-button--negative,.p-button+.p-button--negative,.p-button--neutral+.p-button--negative,.p-button--brand+.p-button--negative,.p-button--positive+.p-button--negative,.p-button--negative+.p-button--negative,.p-button--base+.p-button--negative,button+.p-button--base,.p-button+.p-button--base,.p-button--neutral+.p-button--base,.p-button--brand+.p-button--base,.p-button--positive+.p-button--base,.p-button--negative+.p-button--base,.p-button--base+.p-button--base{margin-left:1rem}}@media only screen and (min-width: 460px){button,.p-button,.p-button--neutral,.p-button--brand,.p-button--positive,.p-button--negative,.p-button--base{width:auto}}button:active,.p-button:active,.p-button--neutral:active,.p-button--brand:active,.p-button--positive:active,.p-button--negative:active,.p-button--base:active,button:focus,.p-button:focus,.p-button--neutral:focus,.p-button--brand:focus,.p-button--positive:focus,.p-button--negative:focus,.p-button--base:focus,button:hover,.p-button:hover,.p-button--neutral:hover,.p-button--brand:hover,.p-button--positive:hover,.p-button--negative:hover,.p-button--base:hover{text-decoration:none}button:disabled,.p-button:disabled,.p-button--neutral:disabled,.p-button--brand:disabled,.p-button--positive:disabled,.p-button--negative:disabled,.p-button--base:disabled,button.is--disabled,.is--disabled.p-button,.is--disabled.p-button--neutral,.is--disabled.p-button--brand,.is--disabled.p-button--positive,.is--disabled.p-button--negative,.is--disabled.p-button--base{cursor:not-allowed;opacity:.5}.p-card--highlighted,.p-contextual-menu__dropdown,.p-modal__dialog,.p-tooltip__message,.p-tabs,.p-card,.p-card--overlay{background:#fff;border-radius:2px;color:#111;padding:1.25rem}.p-card--highlighted .p-card__header,.p-contextual-menu__dropdown .p-card__header,.p-modal__dialog .p-card__header,.p-tooltip__message .p-card__header,.p-tabs .p-card__header,.p-card .p-card__header,.p-card--overlay .p-card__header{border-bottom:1px solid #cdcdcd;margin-bottom:.75rem;padding-bottom:.75rem}.p-card--highlighted .p-card__header>.p-link--soft,.p-contextual-menu__dropdown .p-card__header>.p-link--soft,.p-modal__dialog .p-card__header>.p-link--soft,.p-tooltip__message .p-card__header>.p-link--soft,.p-tabs .p-card__header>.p-link--soft,.p-card .p-card__header>.p-link--soft,.p-card--overlay .p-card__header>.p-link--soft{display:inline-block;overflow:auto}.p-card--highlighted .p-card__header img,.p-contextual-menu__dropdown .p-card__header img,.p-modal__dialog .p-card__header img,.p-tooltip__message .p-card__header img,.p-tabs .p-card__header img,.p-card .p-card__header img,.p-card--overlay .p-card__header img{max-height:2rem}.p-card--highlighted .p-card__title,.p-contextual-menu__dropdown .p-card__title,.p-modal__dialog .p-card__title,.p-tooltip__message .p-card__title,.p-tabs .p-card__title,.p-card .p-card__title,.p-card--overlay .p-card__title{margin-top:0}.p-card--highlighted,.p-contextual-menu__dropdown,.p-modal__dialog,.p-tooltip__message,.p-tabs{box-shadow:0 1px 5px 1px rgba(17,17,17,0.2)}.p-breadcrumbs::after,.p-matrix__item::after,.p-navigation::after,.p-navigation--sidebar::after,.p-list::after,.p-stepped-list--detailed::after,.p-inline-images::after,.u-clearfix::after{clear:both;content:'';display:block}html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}blockquote{border-left:2px solid #666}blockquote>cite{display:block}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}button{background-color:#fff;border-color:#cdcdcd;color:#111;line-height:1rem}button:visited{color:#111}button:active,button:hover{background-color:#f7f7f7;border-color:#cdcdcd}button:disabled:active,button:disabled:hover,button.is--disabled:active,button.is--disabled:hover{background-color:transparent;border-color:#cdcdcd}button .p-link--external{color:currentColor}label{cursor:pointer;display:block;font-size:1rem;line-height:1.5}label.has-error{color:#c7162b}label.has-caution{color:#f99b11}label.has-warning{color:#f99b11}label.has-success{color:#0e8420}label.has-information{color:#335280}[type='text'],[type='date'],[type='datetime'],[type='datatime-local'],[type='month'],[type='time'],[type='week'],[type='color'],[type='number'],[type='search'],[type='password'],[type='email'],[type='url'],[type='tel']{appearance:textfield;background-color:#fff;border:1px solid #cdcdcd;border-radius:.125rem;box-shadow:inset 0 1px 2px rgba(0,0,0,0.12);color:#111;font-family:"Ubuntu", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;font-size:1rem;font-weight:300;outline:none;padding:.5rem .75rem;vertical-align:baseline;width:100%}[type='text']:focus,[type='date']:focus,[type='datetime']:focus,[type='datatime-local']:focus,[type='month']:focus,[type='time']:focus,[type='week']:focus,[type='color']:focus,[type='number']:focus,[type='search']:focus,[type='password']:focus,[type='email']:focus,[type='url']:focus,[type='tel']:focus{outline:1px solid #19b6ee;outline-offset:2px}[type='text']:active,[type='date']:active,[type='datetime']:active,[type='datatime-local']:active,[type='month']:active,[type='time']:active,[type='week']:active,[type='color']:active,[type='number']:active,[type='search']:active,[type='password']:active,[type='email']:active,[type='url']:active,[type='tel']:active{border-color:#666;color:#111;outline:none}[type='text']::placeholder,[type='date']::placeholder,[type='datetime']::placeholder,[type='datatime-local']::placeholder,[type='month']::placeholder,[type='time']::placeholder,[type='week']::placeholder,[type='color']::placeholder,[type='number']::placeholder,[type='search']::placeholder,[type='password']::placeholder,[type='email']::placeholder,[type='url']::placeholder,[type='tel']::placeholder{color:#666;opacity:1}[type='text'][disabled],[type='text'][disabled='disabled'],[type='date'][disabled],[type='date'][disabled='disabled'],[type='datetime'][disabled],[type='datetime'][disabled='disabled'],[type='datatime-local'][disabled],[type='datatime-local'][disabled='disabled'],[type='month'][disabled],[type='month'][disabled='disabled'],[type='time'][disabled],[type='time'][disabled='disabled'],[type='week'][disabled],[type='week'][disabled='disabled'],[type='color'][disabled],[type='color'][disabled='disabled'],[type='number'][disabled],[type='number'][disabled='disabled'],[type='search'][disabled],[type='search'][disabled='disabled'],[type='password'][disabled],[type='password'][disabled='disabled'],[type='email'][disabled],[type='email'][disabled='disabled'],[type='url'][disabled],[type='url'][disabled='disabled'],[type='tel'][disabled],[type='tel'][disabled='disabled']{cursor:not-allowed;opacity:.5}[type='text'][readonly],[type='text'][readonly='readonly'],[type='date'][readonly],[type='date'][readonly='readonly'],[type='datetime'][readonly],[type='datetime'][readonly='readonly'],[type='datatime-local'][readonly],[type='datatime-local'][readonly='readonly'],[type='month'][readonly],[type='month'][readonly='readonly'],[type='time'][readonly],[type='time'][readonly='readonly'],[type='week'][readonly],[type='week'][readonly='readonly'],[type='color'][readonly],[type='color'][readonly='readonly'],[type='number'][readonly],[type='number'][readonly='readonly'],[type='search'][readonly],[type='search'][readonly='readonly'],[type='password'][readonly],[type='password'][readonly='readonly'],[type='email'][readonly],[type='email'][readonly='readonly'],[type='url'][readonly],[type='url'][readonly='readonly'],[type='tel'][readonly],[type='tel'][readonly='readonly']{color:#cdcdcd;cursor:default}[type='text'][readonly]:hover,[type='text'][readonly]:active,[type='text'][readonly='readonly']:hover,[type='text'][readonly='readonly']:active,[type='date'][readonly]:hover,[type='date'][readonly]:active,[type='date'][readonly='readonly']:hover,[type='date'][readonly='readonly']:active,[type='datetime'][readonly]:hover,[type='datetime'][readonly]:active,[type='datetime'][readonly='readonly']:hover,[type='datetime'][readonly='readonly']:active,[type='datatime-local'][readonly]:hover,[type='datatime-local'][readonly]:active,[type='datatime-local'][readonly='readonly']:hover,[type='datatime-local'][readonly='readonly']:active,[type='month'][readonly]:hover,[type='month'][readonly]:active,[type='month'][readonly='readonly']:hover,[type='month'][readonly='readonly']:active,[type='time'][readonly]:hover,[type='time'][readonly]:active,[type='time'][readonly='readonly']:hover,[type='time'][readonly='readonly']:active,[type='week'][readonly]:hover,[type='week'][readonly]:active,[type='week'][readonly='readonly']:hover,[type='week'][readonly='readonly']:active,[type='color'][readonly]:hover,[type='color'][readonly]:active,[type='color'][readonly='readonly']:hover,[type='color'][readonly='readonly']:active,[type='number'][readonly]:hover,[type='number'][readonly]:active,[type='number'][readonly='readonly']:hover,[type='number'][readonly='readonly']:active,[type='search'][readonly]:hover,[type='search'][readonly]:active,[type='search'][readonly='readonly']:hover,[type='search'][readonly='readonly']:active,[type='password'][readonly]:hover,[type='password'][readonly]:active,[type='password'][readonly='readonly']:hover,[type='password'][readonly='readonly']:active,[type='email'][readonly]:hover,[type='email'][readonly]:active,[type='email'][readonly='readonly']:hover,[type='email'][readonly='readonly']:active,[type='url'][readonly]:hover,[type='url'][readonly]:active,[type='url'][readonly='readonly']:hover,[type='url'][readonly='readonly']:active,[type='tel'][readonly]:hover,[type='tel'][readonly]:active,[type='tel'][readonly='readonly']:hover,[type='tel'][readonly='readonly']:active{border-color:#666;outline:none}[type='text'].has-error,[type='date'].has-error,[type='datetime'].has-error,[type='datatime-local'].has-error,[type='month'].has-error,[type='time'].has-error,[type='week'].has-error,[type='color'].has-error,[type='number'].has-error,[type='search'].has-error,[type='password'].has-error,[type='email'].has-error,[type='url'].has-error,[type='tel'].has-error{border:1px solid #c7162b}[type='text'].has-caution,[type='date'].has-caution,[type='datetime'].has-caution,[type='datatime-local'].has-caution,[type='month'].has-caution,[type='time'].has-caution,[type='week'].has-caution,[type='color'].has-caution,[type='number'].has-caution,[type='search'].has-caution,[type='password'].has-caution,[type='email'].has-caution,[type='url'].has-caution,[type='tel'].has-caution{border:1px solid #f99b11}[type='text'].has-warning,[type='date'].has-warning,[type='datetime'].has-warning,[type='datatime-local'].has-warning,[type='month'].has-warning,[type='time'].has-warning,[type='week'].has-warning,[type='color'].has-warning,[type='number'].has-warning,[type='search'].has-warning,[type='password'].has-warning,[type='email'].has-warning,[type='url'].has-warning,[type='tel'].has-warning{border:1px solid #f99b11}[type='text'].has-success,[type='date'].has-success,[type='datetime'].has-success,[type='datatime-local'].has-success,[type='month'].has-success,[type='time'].has-success,[type='week'].has-success,[type='color'].has-success,[type='number'].has-success,[type='search'].has-success,[type='password'].has-success,[type='email'].has-success,[type='url'].has-success,[type='tel'].has-success{border:1px solid #0e8420}[type='text'].has-information,[type='date'].has-information,[type='datetime'].has-information,[type='datatime-local'].has-information,[type='month'].has-information,[type='time'].has-information,[type='week'].has-information,[type='color'].has-information,[type='number'].has-information,[type='search'].has-information,[type='password'].has-information,[type='email'].has-information,[type='url'].has-information,[type='tel'].has-information{border:1px solid #335280}[type='file']{width:100%}[type='file']:focus{outline:1px solid #19b6ee;outline-offset:2px}[type='reset']{display:none}[type='search']{-moz-appearance:none;-webkit-appearance:none;appearance:none;border-radius:0}[type='search']::-webkit-search-results-decoration{display:none}[type='search']::-webkit-search-cancel-button{-webkit-appearance:searchfield-cancel-button;cursor:pointer}[type='checkbox'],[type='radio']{float:left;height:1.5rem;margin-bottom:0;margin-right:.75rem;outline:none;padding:0;vertical-align:middle;width:auto;min-height:1.5rem}[type='checkbox']:focus,[type='radio']:focus{outline:1px solid #19b6ee;outline-offset:0}[type='checkbox'][disabled]+label,[type='checkbox'][disabled='disabled']+label,[type='radio'][disabled]+label,[type='radio'][disabled='disabled']+label{cursor:not-allowed;opacity:.5}[type='checkbox']+label,[type='radio']+label{vertical-align:middle;width:100%}[type='submit']{background-color:#0e8420;color:#fff;padding:.75rem 1.5rem}[type='submit']:hover{background-color:#04280a;cursor:pointer}select{appearance:textfield;background-color:#fff;border:1px solid #cdcdcd;border-radius:.125rem;box-shadow:inset 0 1px 2px rgba(0,0,0,0.12);color:#111;font-family:"Ubuntu", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;font-size:1rem;font-weight:300;outline:none;padding:.5rem .75rem;vertical-align:baseline;width:100%;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:#fff url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjRweCIgd2lkdGg9IjEwcHgiIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZpZXdCb3g9IjAgMCAxMCA0Ij4gPHRpdGxlPmFjY29yZGlvbi1vcGVuPC90aXRsZT4gPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+IDxnIGlkPSJmaWx0ZXItcGFuZWwiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2tldGNoOnR5cGU9Ik1TUGFnZSIgZmlsbD0ibm9uZSI+ICA8ZyBpZD0iYWNjb3JkaW9uLW9wZW4iIGZpbGw9IiM4ODgiIHNrZXRjaDp0eXBlPSJNU0FydGJvYXJkR3JvdXAiPiAgIDxwYXRoIGlkPSJjaGV2cm9uIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIiBkPSJtNi4zNjEgMC44NjIzYzAuNTE4IDAuMzY1IDEuMDUyIDAuNzc4MSAxLjYwMSAxLjIzOCAwLjU0OSAwLjQ1ODUgMS4wODkgMC45NTE4IDEuNjIxIDEuNDc3MiAwLjE0MiAwLjE0MDQgMC4yODEgMC4yODIxIDAuNDE1IDAuNDIyNWgtMS41NDFjLTAuMzA0LTAuMjg4OC0wLjYyLTAuNTcwOS0wLjk0Ny0wLjg0NjMtMC4xMzc5LTAuMTE2MS0wLjI3NjgtMC4yMjk3LTAuNDE2OC0wLjM0MDgtMC4xNjM2LTAuMTI5Ny0wLjMyODYtMC4yNTU4LTAuNDk1NC0wLjM3ODMtMC4wODUyLTAuMDYyNS0wLjE3MDgtMC4xMjQxLTAuMjU2OC0wLjE4NDYtMC4zOTctMC4yODIxLTAuOTM1LTAuNjI1Ny0xLjMxNS0wLjg0NzZoLTAuMDU0Yy0wLjM4IDAuMjIxOS0wLjkxOCAwLjU2NTUtMS4zMTUgMC44NDc2LTAuMzk4IDAuMjgwNy0wLjc4OCAwLjU4MjktMS4xNjkgMC45MDM3LTAuMzI3IDAuMjc1NC0wLjY0MyAwLjU1NzUtMC45NDcgMC44NDYzaC0xLjU0MWMwLjEzNS0wLjE0MDQgMC4yNzMtMC4yODIxIDAuNDE1LTAuNDIyNSAwLjUzMi0wLjUyNTQgMS4wNzItMS4wMTg3IDEuNjIxLTEuNDc3MiAwLjU1LTAuNDU5OSAxLjA4My0wLjg3MyAxLjYwMS0xLjIzOCAwLjUxOS0wLjM2NDk3IDAuOTczLTAuNjUyNDEgMS4zNjItMC44NjIzIDAuMzkgMC4yMDk4OSAwLjg0NCAwLjQ5NzMzIDEuMzYyIDAuODYyM3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQuOTk5IDIpIHJvdGF0ZSgxODApIHRyYW5zbGF0ZSgtNC45OTkgLTIpIi8+ICA8L2c+IDwvZz48L3N2Zz4=") no-repeat;background-position:right 1.25rem center;color:#111;min-height:24px;text-indent:.01px;text-overflow:''}select:focus{outline:1px solid #19b6ee;outline-offset:2px}select:active{border-color:#666;color:#111;outline:none}select::placeholder{color:#666;opacity:1}select[disabled],select[disabled='disabled']{cursor:not-allowed;opacity:.5}select[readonly],select[readonly='readonly']{color:#cdcdcd;cursor:default}select[readonly]:hover,select[readonly]:active,select[readonly='readonly']:hover,select[readonly='readonly']:active{border-color:#666;outline:none}select.has-error{border:1px solid #c7162b}select.has-caution{border:1px solid #f99b11}select.has-warning{border:1px solid #f99b11}select.has-success{border:1px solid #0e8420}select.has-information{border:1px solid #335280}select:hover{cursor:pointer}select[multiple],select[size]{background-image:none;height:auto;padding:.35rem .8125rem}select[multiple] option,select[size] option{font-weight:300;margin:.5rem 0}textarea{appearance:textfield;background-color:#fff;border:1px solid #cdcdcd;border-radius:.125rem;box-shadow:inset 0 1px 2px rgba(0,0,0,0.12);color:#111;font-family:"Ubuntu", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;font-size:1rem;font-weight:300;outline:none;padding:.5rem .75rem;vertical-align:baseline;width:100%;margin-top:.5rem;overflow:auto;vertical-align:top}textarea:focus{outline:1px solid #19b6ee;outline-offset:2px}textarea:active{border-color:#666;color:#111;outline:none}textarea::placeholder{color:#666;opacity:1}textarea[disabled],textarea[disabled='disabled']{cursor:not-allowed;opacity:.5}textarea[readonly],textarea[readonly='readonly']{color:#cdcdcd;cursor:default}textarea[readonly]:hover,textarea[readonly]:active,textarea[readonly='readonly']:hover,textarea[readonly='readonly']:active{border-color:#666;outline:none}textarea.has-error{border:1px solid #c7162b}textarea.has-caution{border:1px solid #f99b11}textarea.has-warning{border:1px solid #f99b11}textarea.has-success{border:1px solid #0e8420}textarea.has-information{border:1px solid #335280}fieldset{background-color:#f7f7f7;border-radius:.125rem;color:#111;padding:.9375rem 1.25rem}fieldset+fieldset{margin-top:1.25rem}@media screen and (min-width: 768px){fieldset+fieldset{margin-top:1.75rem}}@media screen and (min-width: 1030px){fieldset+fieldset{margin-top:2rem}}fieldset h3{border-bottom:1px dotted #666;padding-bottom:.625rem}form+*{margin-top:.5rem}form *+input,form *+select{margin-top:.75rem}form *+label{margin-top:1.25rem}form *+input[type="checkbox"],form *+input[type="radio"],form *+button,form *+input[type="submit"]{margin-top:1rem}form *+input[type="checkbox"]+label,form *+input[type="radio"]+label,form *+button+label,form *+input[type="submit"]+label{margin-top:1rem}code,samp,kbd{font-family:"Ubuntu Mono", Consolas, Monaco, Courier, monospace;font-weight:300;text-align:left}pre,code{direction:ltr;hyphens:none;line-height:1.5;margin-bottom:0;margin-top:0;tab-size:4;white-space:pre-wrap;word-spacing:normal;word-wrap:break-word}pre+pre,code+pre,pre+code,code+code{margin-top:1.25rem}@media screen and (min-width: 768px){pre+pre,code+pre,pre+code,code+code{margin-top:1.75rem}}@media screen and (min-width: 1030px){pre+pre,code+pre,pre+code,code+code{margin-top:2rem}}pre{background-color:#f7f7f7;border:1px solid #cdcdcd;border-radius:2px;color:#111;overflow:auto;padding:1rem;text-align:left;text-shadow:none}a{color:#007aa6;text-decoration:none}a:focus{outline:thin dotted #cdcdcd}a:hover{cursor:pointer;text-decoration:underline}a:visited{color:#005573}ol,ul{margin-bottom:0;margin-left:1rem;padding-left:1rem}ol ul,ol ol,ul ul,ul ol{margin-bottom:0}nav ol,nav ul{list-style:none;list-style-image:none}ol li+li,ul li+li{margin-top:.5rem}ol li>ul,ol li>ol,ul li>ul,ul li>ol{margin-top:.5rem}li{margin:0 0 .5rem;padding:0}dl{margin-bottom:0}dt{border-top:1px dotted #666;font-size:1rem;font-weight:400;margin-top:1rem;padding-top:1rem}dt:first-of-type{border-top:0}dd{margin-left:1rem;margin-top:.5rem}hr{border:0;border-top:1px solid #cdcdcd;height:0;margin:1rem 0}img{border:0;border-radius:2px;height:auto;max-width:100%}svg:not(:root){overflow:hidden}figure{margin-bottom:0;margin-left:0;width:100%}*+figure{margin-top:1.25rem}@media screen and (min-width: 768px){*+figure{margin-top:1.75rem}}@media screen and (min-width: 1030px){*+figure{margin-top:2rem}}figure caption,figure figcaption{display:block;font-style:italic;margin-top:.5rem;width:100%}object,iframe,embed,canvas,video,audio{display:block;margin:0 auto 20px;max-width:100%}audio:not([controls]){display:none;height:0}[hidden]{display:none}table{border:0;border-collapse:collapse;overflow-x:auto;width:100%}th,td{padding:.75rem 0}td{font-weight:300;text-align:left;vertical-align:middle}thead th{border-collapse:separate;border-spacing:0 .5rem;font-weight:400;text-align:left}thead tr{border-bottom:1px solid #666}tbody tr{border-bottom:1px solid #cdcdcd}tbody tr:last-child{border-bottom:0}tbody th{font-weight:400;text-align:left}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:300;src:url("/MAAS/static/assets/fonts/e8c07df6-Ubuntu-L_W.woff2") format("woff2"),url("/MAAS/static/assets/fonts/8619add2-Ubuntu-L_W.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:400;src:url("/MAAS/static/assets/fonts/fff37993-Ubuntu-R_W.woff2") format("woff2"),url("/MAAS/static/assets/fonts/7af50859-Ubuntu-R_W.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:300;src:url("/MAAS/static/assets/fonts/f8097dea-Ubuntu-LI_W.woff2") format("woff2"),url("/MAAS/static/assets/fonts/8be89d02-Ubuntu-LI_W.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:italic;font-weight:400;src:url("/MAAS/static/assets/fonts/fca66073-ubuntu-ri-webfont.woff2") format("woff2"),url("/MAAS/static/assets/fonts/f0898c72-ubuntu-ri-webfont.woff") format("woff")}@font-face{font-family:'Ubuntu';font-style:normal;font-weight:100;src:url("/MAAS/static/assets/fonts/7f100985-Ubuntu-Th_W.woff2") format("woff2"),url("/MAAS/static/assets/fonts/502cc3a1-Ubuntu-Th_W.woff") format("woff")}@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:300;src:url("/MAAS/static/assets/fonts/fdd692b9-UbuntuMono-R_W.woff2") format("woff2"),url("/MAAS/static/assets/fonts/85edb898-UbuntuMono-R_W.woff") format("woff")}@font-face{font-family:'Ubuntu Mono';font-style:normal;font-weight:400;src:url("/MAAS/static/assets/fonts/fdd692b9-UbuntuMono-R_W.woff2") format("woff2"),url("/MAAS/static/assets/fonts/85edb898-UbuntuMono-R_W.woff") format("woff")}*{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:subpixel-antialiased}html{font-size:16px}body{color:#111;font-family:"Ubuntu", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;font-weight:300;line-height:1.5}h1,h2,h3,h4,h5,h6,[class^="p-heading--"]{font-family:"Ubuntu", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;margin:0}h1+*{margin-top:1rem}@media screen and (min-width: 1030px){h1+*{margin-top:1.5rem}}h5+*,h6+*{margin-top:.5rem}@media screen and (min-width: 1030px){h5+*,h6+*{margin-top:.75rem}}p{max-width:35em;margin-bottom:0}.u-align--center p{margin-left:auto;margin-right:auto}.u-align--left p{margin-right:auto}.u-align--right p{margin-left:auto}p+p{margin-top:1rem}@media screen and (min-width: 1030px){p+p{margin-top:1.5rem}}button,input,select,textarea{font-family:"Ubuntu", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif}h1{max-width:20em;font-size:2rem;font-weight:300;line-height:1.3125}.u-align--center h1{margin-left:auto;margin-right:auto}.u-align--left h1{margin-right:auto}.u-align--right h1{margin-left:auto}@media only screen and (min-width: 1030px){h1{font-size:3rem;line-height:1.25}}h2{max-width:20em;font-size:1.75rem;font-weight:300;line-height:1.2857}.u-align--center h2{margin-left:auto;margin-right:auto}.u-align--left h2{margin-right:auto}.u-align--right h2{margin-left:auto}@media only screen and (min-width: 1030px){h2{font-size:2.25rem;line-height:1.333}}h3{max-width:25em;font-size:1.5rem;font-weight:300;line-height:1.333}.u-align--center h3{margin-left:auto;margin-right:auto}.u-align--left h3{margin-right:auto}.u-align--right h3{margin-left:auto}@media only screen and (min-width: 1030px){h3{font-size:1.75rem;line-height:1.287}}h4{max-width:25em;font-size:1.375rem;font-weight:300;line-height:1.2727}.u-align--center h4{margin-left:auto;margin-right:auto}.u-align--left h4{margin-right:auto}.u-align--right h4{margin-left:auto}@media only screen and (min-width: 1030px){h4{font-size:1.5rem;line-height:1.333}}h5{max-width:35em;font-size:1.125rem;font-weight:300;line-height:1.333}.u-align--center h5{margin-left:auto;margin-right:auto}.u-align--left h5{margin-right:auto}.u-align--right h5{margin-left:auto}@media only screen and (min-width: 1030px){h5{font-size:1.25rem;line-height:1.4}}h6{max-width:35em;font-size:1rem;font-weight:400;line-height:1.5}.u-align--center h6{margin-left:auto;margin-right:auto}.u-align--left h6{margin-right:auto}.u-align--right h6{margin-left:auto}li{margin-bottom:0;margin-top:0;padding-bottom:0}li>ul,li>ol{padding-top:0}li>ul>li:last-of-type,li>ol>li:last-of-type{padding-bottom:0}blockquote{margin-bottom:0;margin-left:0;padding-left:1.5rem}blockquote>p{font-size:1rem;font-style:italic;margin-top:.75rem}blockquote>cite{font-size:1rem;font-style:normal;margin-top:.75rem}strong{font-weight:400}small{font-size:.875rem}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}*+*{margin-top:1.25rem}@media screen and (min-width: 768px){*+*{margin-top:1.75rem}}@media screen and (min-width: 1030px){*+*{margin-top:2rem}}*>p:first-child{margin-top:0}*+h1,*+.p-heading--one{margin-top:2rem}@media screen and (min-width: 1030px){*+h1,*+.p-heading--one{margin-top:3.75rem}}*+h2,*+.p-heading--two,*+h3,*+.p-heading--three,*+h4,*+.p-heading--four,*+h5,*+.p-heading--five,*+h6,*+.p-heading--six{margin-top:1.5rem}@media screen and (min-width: 1030px){*+h2,*+.p-heading--two,*+h3,*+.p-heading--three,*+h4,*+.p-heading--four,*+h5,*+.p-heading--five,*+h6,*+.p-heading--six{margin-top:2rem}}h2+*,h2+.row,.p-heading--two+*,.p-heading--two+.row,h3+*,h3+.row,.p-heading--three+*,.p-heading--three+.row,h4+*,h4+.row,.p-heading--four+*,.p-heading--four+.row{margin-top:.5rem}@media screen and (min-width: 1030px){h2+*,h2+.row,.p-heading--two+*,.p-heading--two+.row,h3+*,h3+.row,.p-heading--three+*,.p-heading--three+.row,h4+*,h4+.row,.p-heading--four+*,.p-heading--four+.row{margin-top:1rem}}.row ~ .row{margin-top:1.25rem}@media screen and (min-width: 768px){.row ~ .row{margin-top:1.75rem}}@media screen and (min-width: 1030px){.row ~ .row{margin-top:2rem}}.p-accordion{border-bottom:1px solid #cdcdcd}.p-accordion__list{list-style-type:none;margin:0;padding:0}.p-accordion__group{border-top:1px solid #cdcdcd;margin:0}.p-accordion__tab{background-position:top 1.25rem right 1rem;background-repeat:no-repeat;border:0;padding:1rem 2.5rem 1rem .75rem;text-align:left;transition-duration:0s;width:100%;z-index:2}.p-accordion__tab[aria-expanded='true']{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' width='16' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 16 16'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='%23888' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23888' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-accordion__tab[aria-expanded='false']{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='15' width='15' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 16 16'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h16v16H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='%23888' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23888' d='M7 4h1v7H7z'/%3E%3Cpath fill='%23888' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-accordion__tab:focus{outline:1px solid #007aa6;outline-offset:2px}.p-accordion__panel{border-top:1px solid #cdcdcd;margin:0;padding:.75rem .75rem .75rem 1.5rem}.p-accordion__panel[aria-hidden='true']{display:none}.p-aside{border-top:1px solid #cdcdcd;font-size:.875rem;padding:0 1.5rem}@media (min-width: 768px){.p-aside{border-left:1px solid #cdcdcd;border-top:0;padding:0 1rem}}.p-aside__header{color:#666;font-size:1rem;line-height:1.5;margin-bottom:.5rem;text-transform:uppercase}.p-aside__section{padding:1.5rem 0}.p-aside__section:not(:last-child){border-bottom:1px dotted #cdcdcd}.p-aside__nav{list-style:none;margin:0;padding:0}.p-aside__nav .p-aside__link{border-bottom:0;color:#111;margin-bottom:.5rem}.p-aside__nav .p-aside__link:visited{color:#111}.p-aside__nav .p-aside__link:hover{color:#007aa6}.p-aside__nav .p-aside__link.is-active{font-weight:400;padding-left:.5rem}.p-breadcrumbs{list-style:none;margin:0;padding:0;width:100%}.p-breadcrumbs__item{float:left;margin:0 0 .25rem .25rem;position:relative}.p-breadcrumbs__item:not(:first-of-type){text-indent:1rem}.p-breadcrumbs__item:not(:first-of-type)::before{content:'\203A';left:-.75rem;position:absolute;top:0}.p-button{background-color:#fff;border-color:#cdcdcd;color:#111}.p-button:visited{color:#111}.p-button:active,.p-button:hover{background-color:#f7f7f7;border-color:#cdcdcd}.p-button:disabled:active,.p-button:disabled:hover,.p-button.is--disabled:active,.p-button.is--disabled:hover{background-color:#fff;border-color:#fff}.p-button .p-link--external{color:currentColor}.p-button--neutral{background-color:#fff;border-color:#cdcdcd;color:#111}.p-button--neutral:visited{color:#111}.p-button--neutral:active,.p-button--neutral:hover{background-color:#f7f7f7;border-color:#cdcdcd}.p-button--neutral:disabled:active,.p-button--neutral:disabled:hover,.p-button--neutral.is--disabled:active,.p-button--neutral.is--disabled:hover{background-color:transparent;border-color:#cdcdcd}.p-button--neutral .p-link--external{color:currentColor}.p-button--brand{background-color:#e95420;border-color:#e95420;color:#fff}.p-button--brand:visited{color:#fff}.p-button--brand:active,.p-button--brand:hover{background-color:#c34113;border-color:#c34113}.p-button--brand:disabled:active,.p-button--brand:disabled:hover,.p-button--brand.is--disabled:active,.p-button--brand.is--disabled:hover{background-color:#e95420;border-color:#e95420}.p-button--brand .p-link--external{color:currentColor}.p-button--positive{background-color:#0e8420;border-color:#0e8420;color:#fff}.p-button--positive:visited{color:#fff}.p-button--positive:active,.p-button--positive:hover{background-color:#095615;border-color:#095615}.p-button--positive:disabled:active,.p-button--positive:disabled:hover,.p-button--positive.is--disabled:active,.p-button--positive.is--disabled:hover{background-color:#0e8420;border-color:#0e8420}.p-button--positive .p-link--external{color:currentColor}.p-button--negative{background-color:#c7162b;border-color:#c7162b;color:#fff}.p-button--negative:visited{color:#fff}.p-button--negative:active,.p-button--negative:hover{background-color:#991121;border-color:#991121}.p-button--negative:disabled:active,.p-button--negative:disabled:hover,.p-button--negative.is--disabled:active,.p-button--negative.is--disabled:hover{background-color:#c7162b;border-color:#c7162b}.p-button--negative .p-link--external{color:currentColor}.p-button--base{background-color:transparent;border-color:transparent;color:#111}.p-button--base:visited{color:#111}.p-button--base:active,.p-button--base:hover{background-color:#f7f7f7;border-color:transparent}.p-button--base:disabled:active,.p-button--base:disabled:hover,.p-button--base.is--disabled:active,.p-button--base.is--disabled:hover{background-color:transparent;border-color:#cdcdcd}.p-button--base .p-link--external{color:currentColor}@media (max-width: 768px){[class^="p-button"].is-inline{margin-top:1.2rem}}@media (min-width: 768px){[class^="p-button"].is-inline{margin-left:.75rem;width:auto}}.p-card{border:1px solid #cdcdcd;margin-bottom:2rem;margin-top:0}.p-card .p-card{margin-top:0}.p-card--overlay{background:rgba(255,255,255,0.85);border-radius:0}.p-code-numbered{background:#fff;color:#111;counter-reset:line-numbering;padding:1rem 0 0;position:relative}.p-code-numbered::before{background-color:#fff;width:4.5rem}.p-code-numbered .code-line{background:#f7f7f7;color:#111;display:block;margin:-1.5rem 0 0 0;padding:.5rem 1rem 0 5.5rem;position:relative}.p-code-numbered .code-line:first-child,.p-code-numbered .code-line:first-child::before{padding-top:1.25rem}.p-code-numbered .code-line:last-child,.p-code-numbered .code-line:last-child::before{padding-bottom:1rem}.p-code-numbered .code-line::before{background:#fff;border-right:1px solid #cdcdcd;color:#666;content:counter(line-numbering);counter-increment:line-numbering;display:inline-block;height:9999px;left:0;margin-right:1rem;max-height:100%;padding:.5rem 1rem 1rem 1rem;pointer-events:none;position:absolute;text-align:right;top:0;user-select:none;width:4.5rem}.p-code-snippet{background-color:#fff;border:1px solid #cdcdcd;border-radius:2px;color:#111;display:flex;overflow:hidden;position:relative;transition:border .2s, background-color .2s;width:100%}.p-code-snippet__input{background-color:transparent;background-image:url('data:image/svg+xml;utf8, <svg xmlns="http://www.w3.org/2000/svg" width="16" height="15.999999" viewBox="0 0 16 15.999999"><g><g style="display:inline"><g style="display:inline"><path style="opacity:0.21171169;fill:none;stroke:none" d="M-.0000032.00002047h15.9999936v15.9999936H-.0000032z"/><path style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;display:inline;fill:%23808080;fill-opacity:1;stroke:none" d="M2.6660124 2.00000047c-1.77777926 0-2.6660156.0013069-2.6660156 2.0683594v8.8652346c0 2.067046.88823634 2.066406 2.6660156 2.066406h10.6679684c1.77778 0 2.666016.00064 2.666016-2.066406v-8.7988284c0-2.1333325-.888236-2.1347656-2.666016-2.1347656H2.6660124zm1.2792969 1.890625h1.1015625v1.1425781c.3388576.0282222.6418942.0778287.9101562.1484375.2682622.0635378.4794546.127873.6347657.1914063l-.2636719 1.046875c-.2047288-.0776578-.4480911-.1520607-.7304688-.2226563-.2753242-.0705955-.5930895-.1054687-.953125-.1054687-.381213 0-.6687661.0716995-.859375.2128906-.1906042.1341333-.2851562.3205247-.2851562.5605469 0 .141191.0275088.2605439.0839844.359375.0564755.0917777.1429083.1762529.2558594.2539062.1129509.0705956.2497361.1422952.4121093.2128906.1623688.0635334.3460569.1305764.5507813.2011719.2894399.1129555.560311.232304.8144531.359375.2612043.1200089.4871256.2661159.6777344.4355469.1906043.1623688.3394192.3561248.4453125.5820312.112951.2259022.1699219.4940697.1699218.8046878 0 .465928-.1441538.868173-.4335937 1.207031s-.7660922.557414-1.4296875.65625v1.324219H3.9453093v-1.292969c-.5082842-.035289-.9225545-.102332-1.2402344-.201172-.3106176-.105893-.5419546-.200441-.6972656-.285156l.359375-1.00586c.2259066.112956.4967733.214868.8144531.306641.3247377.091773.6921094.138672 1.1015625.138672.4871065 0 .8223128-.0717 1.0058594-.212891.1906088-.148248.2871094-.342004.2871094-.582031 0-.1623686-.0395298-.3038192-.1171875-.423828-.0776533-.1200133-.186934-.2265861-.328125-.3183594-.1411911-.0917733-.3101459-.1762485-.5078125-.2539062-.1906044-.0776533-.4037544-.157472-.6367188-.2421875-.2188488-.0776533-.4374056-.1667895-.65625-.265625-.2117866-.0988311-.4055469-.218184-.5820312-.359375-.1694311-.1482489-.3062161-.3245681-.4121094-.5292969-.1058933-.2047244-.1601563-.455451-.1601563-.7519531e-7-.4871065.146107-.9013768.4355469-1.2402344.2894444-.3459154.7339269-.5671801 1.3339844-.6660156v-1.1855469zm4.0546875 8.095703h3.990234v.996094h-3.990234v-.996094z"/></g></g></g></svg>');background-position:8px center;background-repeat:no-repeat;border:0;box-shadow:inset 0 1px 2px 0 rgba(0,0,0,0.12);color:#666;font-family:"Ubuntu Mono", Consolas, Monaco, Courier, monospace;font-size:1em;font-weight:300;padding:8px 8px 8px 32px;width:100%}.p-code-snippet__action{background-color:#f7f7f7;background-image:url('data:image/svg+xml;utf8, <svg width="80" height="87" viewBox="0 0 80 87" xmlns="http://www.w3.org/2000/svg"><g fill="%23666" fill-rule="evenodd"><path d="M52.934 9H69.23c2.36 0 4.23.265 5.805 1 1.574.733 2.834 2.06 3.58 3.738 1.49 3.355 1.33 7.46 1.383 13.067l.002.01v42.37l-.002.013c-.052 5.608.107 9.71-1.384 13.066-.745 1.678-2.005 3.003-3.58 3.737-1.574.735-3.444 1-5.804 1H20.768c-2.36 0-4.228-.265-5.803-1-1.574-.733-2.835-2.058-3.58-3.736-1.232-2.77-1.338-6.05-1.367-10.264h4.016c.082 4.27.29 7.142.89 8.535.36.828.757 1.3 1.678 1.74.92.44 2.385.725 4.484.725h47.828c2.1 0 3.563-.285 4.484-.726.92-.44 1.318-.91 1.677-1.74.717-1.656.873-5.403.925-11.11V26.548c-.052-5.69-.21-9.428-.925-11.082-.36-.828-.756-1.3-1.677-1.742-.92-.44-2.385-.723-4.484-.723H51.226c.908-1.126 1.518-2.5 1.708-4zm-15.87 0c.19 1.5.8 2.874 1.707 4H21.087c-2.1 0-3.563.283-4.484.723-.92.44-1.318.914-1.677 1.743-.715 1.653-.873 5.392-.925 11.08V54h-4V26.806c.052-5.61-.107-9.713 1.384-13.068.746-1.678 2.007-3.005 3.58-3.74C16.54 9.266 18.41 9 20.77 9h16.295z"/><path d="M56.99 9v12.005H33V9h8c0 2.234 1.764 4.002 3.995 4.002 2.232 0 4-1.768 4-4.002h7.996z" fill-rule="nonzero"/><path d="M52.998 7.998c0 4.395-3.606 8-8 8-4.393 0-7.998-3.605-7.998-8S40.605 0 45 0c4.392 0 7.998 3.603 7.998 7.998zm-4 0C49 5.766 47.233 4 45 4c-2.233 0-4 1.766-4 3.998s1.767 4 4 4c2.234 0 4-1.768 4-4z" fill-rule="nonzero"/><path d="M42 36h28v4H42zM42 48h28v4H42zM50 60h20v4H50z"/><path d="M22 50s10.67 5.13 20 12.524h-.002-.01-.003C32.145 70.152 22 75 22 75V50z" fill-rule="nonzero"/><path d="M0 58h22v10H0z"/></g></svg>');background-position:center;background-repeat:no-repeat;background-size:1rem;border-color:transparent;border-left:1px solid #cdcdcd;border-radius:0;display:block;flex:1;height:100%;padding:0;position:absolute;right:0;text-indent:-9999px;top:0;width:40px}.p-code-snippet__action:hover{border-color:transparent;border-left:1px solid #cdcdcd}.p-contextual-menu,.p-contextual-menu--left,.p-contextual-menu--center{display:inline-block;margin:0;position:relative}.p-contextual-menu__dropdown{display:none;margin:0;max-width:330px;min-width:155px;padding:0;position:absolute;right:0;top:calc(100% + .5rem);z-index:1}.p-contextual-menu__dropdown::before,.p-contextual-menu__dropdown::after{border-bottom:8px solid rgba(17,17,17,0.05);border-left:8px solid transparent;border-right:8px solid transparent;bottom:100%;content:'';height:0;pointer-events:none;position:absolute;right:.75rem;width:0}.p-contextual-menu__dropdown::after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;right:.85rem}.p-contextual-menu__dropdown[aria-hidden="false"]{display:block}.p-contextual-menu__group{display:block;padding:.25rem 0}.p-contextual-menu__group+.p-contextual-menu__group{border-top:1px solid #cdcdcd;margin:0}.p-contextual-menu__link{border:0;clear:both;color:#111;display:block;line-height:1.5rem;margin:0;overflow:hidden;padding:.25rem .75rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.p-contextual-menu__link:hover{background-color:#f7f7f7;text-decoration:none}.p-contextual-menu--left .p-contextual-menu__dropdown{left:0}.p-contextual-menu--left .p-contextual-menu__dropdown::before,.p-contextual-menu--left .p-contextual-menu__dropdown::after{left:.75rem;right:initial}.p-contextual-menu--left .p-contextual-menu__dropdown::after{left:.85rem}.p-contextual-menu--center .p-contextual-menu__dropdown{left:50%;transform:translateX(-50%)}.p-contextual-menu--center .p-contextual-menu__dropdown::before,.p-contextual-menu--center .p-contextual-menu__dropdown::after{left:50%;right:initial;transform:translateX(-50%)}@media (min-width: 768px){.p-divider{display:flex}}.p-divider__block{border-bottom:1px solid #cdcdcd}.p-divider__block:last-child{border-bottom:0}@media (max-width: 768px){.p-divider__block{padding-bottom:1.5rem}}@media (min-width: 768px){.p-divider__block{border-bottom:0;padding-right:1rem}.p-divider__block:not(:nth-child(1))::before{border-left:1px solid #cdcdcd;content:'';height:100%;left:-1rem;position:absolute}.p-divider__block:last-child{padding-right:0}}.p-footer{border-top:1px solid #cdcdcd;font-size:.875rem;line-height:1.5;padding-bottom:1rem;padding-top:1rem}@media (min-width: 768px){.p-footer{padding-bottom:1.5rem;padding-top:1.5rem}}.p-footer__copy{margin-bottom:0}.p-footer__links{margin:0;padding:.75rem 0 0}@media (min-width: 768px){.p-footer__links{margin-top:0;padding-top:1rem}}.p-footer__nav{margin-top:0}.p-footer__item{display:block;margin-bottom:.25rem}@media (min-width: 768px){.p-footer__item{display:inline-block}}.p-footer__item:last-child a::after{opacity:0}.p-footer__link{border-bottom:0;color:#111}.p-footer__link:visited{color:#000}.p-footer__link:hover{color:#007aa6}@media (min-width: 768px){.p-footer__link{margin-right:1rem;position:relative}.p-footer__link::after{content:'\00b7';display:inline-block;font-size:1.5rem;position:absolute;right:-.75rem;top:-.65rem}}.p-footer__link:hover::after{color:#111}@media screen and (max-width: 400px){@-ms-viewport{width:320px}}img{max-width:100%;height:auto}@media \0screen{img{width:auto}}.row{*zoom:1;margin-right:auto;margin-left:auto;max-width:1440px;padding-left:20px;padding-right:20px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row .row{margin-right:0;margin-left:0;max-width:none;padding-right:0;padding-left:0}.mobile-col-1,.mobile-col-2,.mobile-col-3{display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;margin-left:7.80829%}.row .mobile-col-1:first-child,.row .mobile-col-2:first-child,.row .mobile-col-3:first-child,.first-mobile-col{margin-left:0}.mobile-col-1{width:19.14379%}.mobile-col-2{width:46.09586%}.mobile-col-3{width:73.04793%}@media screen and (min-width: 620px){.tablet-col-1,.tablet-col-2,.tablet-col-3,.tablet-col-4,.tablet-col-5{display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;margin-left:4.93155%}.row .tablet-col-1:first-child,.row .tablet-col-2:first-child,.row .tablet-col-3:first-child,.row .tablet-col-4:first-child,.row .tablet-col-5:first-child,.first-tablet-col{margin-left:0}.tablet-col-1{width:12.55704%}.tablet-col-2{width:30.04563%}.tablet-col-3{width:47.53423%}.tablet-col-4{width:65.02282%}.tablet-col-5{width:82.51141%}}@media screen and (min-width: 768px){.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11{display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;margin-left:3.2877%}.row .col-1:first-child,.row .col-2:first-child,.row .col-3:first-child,.row .col-4:first-child,.row .col-5:first-child,.row .col-6:first-child,.row .col-7:first-child,.row .col-8:first-child,.row .col-9:first-child,.row .col-10:first-child,.row .col-11:first-child,.first-col{margin-left:0}.col-1{width:5.31961%}.col-2{width:13.92692%}.col-3{width:22.53423%}.col-4{width:31.14153%}.col-5{width:39.74884%}.col-6{width:48.35615%}.col-7{width:56.96346%}.col-8{width:65.57077%}.col-9{width:74.17808%}.col-10{width:82.78538%}.col-11{width:91.39269%}.prefix-1{padding-left:8.60731%}.prefix-2{padding-left:17.21462%}.prefix-3{padding-left:25.82192%}.prefix-4{padding-left:34.42923%}.prefix-5{padding-left:43.03654%}.prefix-6{padding-left:51.64385%}.prefix-7{padding-left:60.25116%}.prefix-8{padding-left:68.85847%}.prefix-9{padding-left:77.46577%}.prefix-10{padding-left:86.07308%}.prefix-11{padding-left:94.68039%}.suffix-1{padding-right:8.60731%}.suffix-2{padding-right:17.21462%}.suffix-3{padding-right:25.82192%}.suffix-4{padding-right:34.42923%}.suffix-5{padding-right:43.03654%}.suffix-6{padding-right:51.64385%}.suffix-7{padding-right:60.25116%}.suffix-8{padding-right:68.85847%}.suffix-9{padding-right:77.46577%}.suffix-10{padding-right:86.07308%}.suffix-11{padding-right:94.68039%}.push-1{left:8.60731%}.push-2{left:17.21462%}.push-3{left:25.82192%}.push-4{left:34.42923%}.push-5{left:43.03654%}.push-6{left:51.64385%}.push-7{left:60.25116%}.push-8{left:68.85847%}.push-9{left:77.46577%}.push-10{left:86.07308%}.push-11{left:94.68039%}.pull-1{right:8.60731%}.pull-2{right:17.21462%}.pull-3{right:25.82192%}.pull-4{right:34.42923%}.pull-5{right:43.03654%}.pull-6{right:51.64385%}.pull-7{right:60.25116%}.pull-8{right:68.85847%}.pull-9{right:77.46577%}.pull-10{right:86.07308%}.pull-11{right:94.68039%}.col-11 .col-1,.col-11 .col-2,.col-11 .col-3,.col-11 .col-4,.col-11 .col-5,.col-11 .col-6,.col-11 .col-7,.col-11 .col-8,.col-11 .col-9,.col-11 .col-10{margin-left:3.59733%}.col-11 .col-1{width:5.82061%}.col-11 .col-2{width:15.23855%}.col-11 .col-3{width:24.65649%}.col-11 .col-4{width:34.07442%}.col-11 .col-5{width:43.49236%}.col-11 .col-6{width:52.9103%}.col-11 .col-7{width:62.32824%}.col-11 .col-8{width:71.74618%}.col-11 .col-9{width:81.16412%}.col-11 .col-10{width:90.58206%}.col-10 .col-1,.col-10 .col-2,.col-10 .col-3,.col-10 .col-4,.col-10 .col-5,.col-10 .col-6,.col-10 .col-7,.col-10 .col-8,.col-10 .col-9{margin-left:3.97135%}.col-10 .col-1{width:6.42578%}.col-10 .col-2{width:16.82292%}.col-10 .col-3{width:27.22005%}.col-10 .col-4{width:37.61719%}.col-10 .col-5{width:48.01432%}.col-10 .col-6{width:58.41146%}.col-10 .col-7{width:68.80859%}.col-10 .col-8{width:79.20573%}.col-10 .col-9{width:89.60286%}.col-9 .col-1,.col-9 .col-2,.col-9 .col-3,.col-9 .col-4,.col-9 .col-5,.col-9 .col-6,.col-9 .col-7,.col-9 .col-8{margin-left:4.43217%}.col-9 .col-1{width:7.1714%}.col-9 .col-2{width:18.77498%}.col-9 .col-3{width:30.37855%}.col-9 .col-4{width:41.98213%}.col-9 .col-5{width:53.5857%}.col-9 .col-6{width:65.18928%}.col-9 .col-7{width:76.79285%}.col-9 .col-8{width:88.39643%}.col-8 .col-1,.col-8 .col-2,.col-8 .col-3,.col-8 .col-4,.col-8 .col-5,.col-8 .col-6,.col-8 .col-7{margin-left:5.01397%}.col-8 .col-1{width:8.11278%}.col-8 .col-2{width:21.23952%}.col-8 .col-3{width:34.36627%}.col-8 .col-4{width:47.49301%}.col-8 .col-5{width:60.61976%}.col-8 .col-6{width:73.74651%}.col-8 .col-7{width:86.87325%}.col-7 .col-1,.col-7 .col-2,.col-7 .col-3,.col-7 .col-4,.col-7 .col-5,.col-7 .col-6{margin-left:5.77159%}.col-7 .col-1{width:9.33863%}.col-7 .col-2{width:24.44886%}.col-7 .col-3{width:39.55909%}.col-7 .col-4{width:54.66932%}.col-7 .col-5{width:69.77954%}.col-7 .col-6{width:84.88977%}.col-6 .col-1,.col-6 .col-2,.col-6 .col-3,.col-6 .col-4,.col-6 .col-5{margin-left:6.79893%}.col-6 .col-1{width:11.00089%}.col-6 .col-2{width:28.80072%}.col-6 .col-3{width:46.60054%}.col-6 .col-4{width:64.40036%}.col-6 .col-5{width:82.20018%}.col-5 .col-1,.col-5 .col-2,.col-5 .col-3,.col-5 .col-4{margin-left:8.27118%}.col-5 .col-1{width:13.38305%}.col-5 .col-2{width:35.03729%}.col-5 .col-3{width:56.69153%}.col-5 .col-4{width:78.34576%}.col-4 .col-1,.col-4 .col-2,.col-4 .col-3{margin-left:10.55728%}.col-4 .col-1{width:17.08204%}.col-4 .col-2{width:44.72136%}.col-4 .col-3{width:72.36068%}.col-3 .col-1,.col-3 .col-2{margin-left:14.5898%}.col-3 .col-1{width:23.6068%}.col-3 .col-2{width:61.8034%}.col-2 .col-1{margin-left:23.6068%}.col-2 .col-1{width:38.1966%}}.row .center-col{float:none;margin-left:auto !important;margin-right:auto}@media screen and (max-width: 619px){.hidden-mobile,.visible-tablet,.visible-desktop{display:none !important}}@media screen and (min-width: 620px) and (max-width: 767px){.visible-mobile,.hidden-tablet,.visible-desktop{display:none !important}}@media screen and (min-width: 768px){.visible-mobile,.visible-tablet,.hidden-desktop{display:none !important}}[class*="col-"],.row{margin-top:0}@media screen and (max-width: 767px){[class*="col-"]+[class*="col-"]{margin-top:20px}}[grid-demo] [class*="col-"]{background:#cdcdcd;margin-bottom:1rem}[grid-outline] [class*="col-"]{outline:1px solid #fff;padding:.25rem}.p-heading--one{max-width:20em;font-size:2rem;font-weight:300;line-height:1.3125}.u-align--center .p-heading--one{margin-left:auto;margin-right:auto}.u-align--left .p-heading--one{margin-right:auto}.u-align--right .p-heading--one{margin-left:auto}@media only screen and (min-width: 1030px){.p-heading--one{font-size:3rem;line-height:1.25}}.p-heading--two{max-width:20em;font-size:1.75rem;font-weight:300;line-height:1.2857}.u-align--center .p-heading--two{margin-left:auto;margin-right:auto}.u-align--left .p-heading--two{margin-right:auto}.u-align--right .p-heading--two{margin-left:auto}@media only screen and (min-width: 1030px){.p-heading--two{font-size:2.25rem;line-height:1.333}}.p-heading--three{max-width:25em;font-size:1.5rem;font-weight:300;line-height:1.333}.u-align--center .p-heading--three{margin-left:auto;margin-right:auto}.u-align--left .p-heading--three{margin-right:auto}.u-align--right .p-heading--three{margin-left:auto}@media only screen and (min-width: 1030px){.p-heading--three{font-size:1.75rem;line-height:1.287}}.p-heading--four{max-width:25em;font-size:1.375rem;font-weight:300;line-height:1.2727}.u-align--center .p-heading--four{margin-left:auto;margin-right:auto}.u-align--left .p-heading--four{margin-right:auto}.u-align--right .p-heading--four{margin-left:auto}@media only screen and (min-width: 1030px){.p-heading--four{font-size:1.5rem;line-height:1.333}}.p-heading--five{max-width:35em;font-size:1.125rem;font-weight:300;line-height:1.333}.u-align--center .p-heading--five{margin-left:auto;margin-right:auto}.u-align--left .p-heading--five{margin-right:auto}.u-align--right .p-heading--five{margin-left:auto}@media only screen and (min-width: 1030px){.p-heading--five{font-size:1.25rem;line-height:1.4}}.p-heading--six{max-width:35em;font-size:1rem;font-weight:400;line-height:1.5}.u-align--center .p-heading--six{margin-left:auto;margin-right:auto}.u-align--left .p-heading--six{margin-right:auto}.u-align--right .p-heading--six{margin-left:auto}.p-heading-icon{margin-bottom:2rem}@media (min-width: 768px){.p-heading-icon{margin-bottom:0}}.p-heading-icon__header{align-items:center;display:flex;margin-bottom:1rem}@media (min-width: 1030px){.p-heading-icon__header{margin-bottom:1.5rem}}.p-heading-icon__title{max-width:25em;font-size:1.5rem;font-weight:300;line-height:1.333;margin-bottom:0;margin-top:0}.u-align--center .p-heading-icon__title{margin-left:auto;margin-right:auto}.u-align--left .p-heading-icon__title{margin-right:auto}.u-align--right .p-heading-icon__title{margin-left:auto}@media only screen and (min-width: 1030px){.p-heading-icon__title{font-size:1.75rem;line-height:1.287}}.p-heading-icon__img{align-self:flex-start;flex-shrink:0;height:2.5rem;margin-right:1rem;width:2.5rem}@media (min-width: 768px){.p-heading-icon__img{height:3.75rem;width:3.75rem}}.p-image--bordered{border-color:#cdcdcd;border-style:solid;border-width:1px}.p-image--shadowed{box-shadow:0 1px 5px 1px rgba(205,205,205,0.2)}.p-media-object{display:flex}.p-media-object__details{margin-top:0}.p-media-object__image{align-self:flex-start;border-radius:.25rem;flex-basis:inherit;flex-shrink:0;margin-right:1rem;max-height:3.75rem;max-width:3.75rem;vertical-align:middle;width:auto}@media (min-width: 768px){.p-media-object__image{max-height:4.5rem;max-width:4.5rem}}.p-media-object__image.is-round{border-radius:50%}.p-media-object__title{max-width:25em;font-size:1.375rem;font-weight:300;line-height:1.2727;margin-bottom:.5rem}.u-align--center .p-media-object__title{margin-left:auto;margin-right:auto}.u-align--left .p-media-object__title{margin-right:auto}.u-align--right .p-media-object__title{margin-left:auto}@media only screen and (min-width: 1030px){.p-media-object__title{font-size:1.5rem;line-height:1.333}}.p-media-object__content{margin-top:.25rem}.p-media-object__meta-list{list-style:none;margin:1rem 0 0;padding-left:0}.p-media-object__meta-list-item{color:#111;font-size:.875em;margin-bottom:.4rem;padding-left:1.75rem}.p-media-object__meta-list-item--date{color:#111;font-size:.875em;margin-bottom:.4rem;padding-left:1.75rem;background-repeat:no-repeat;background-size:1.25rem 1.25rem;background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="90" height="90"><g transform="translate(0 -962.362)"><path color="%23000" fill="none" stroke-width="7.5" overflow="visible" enable-background="accumulate" d="M0 962.362h90v90H0z"/><path d="M35.914 968.362v9c0 4.837-4.078 8.914-8.914 8.914-4.836 0-8.914-4.077-8.914-8.914v-8.547C7.56 969.892 6 973.59 6 986.362v42c0 18 3 18 30 18h18c27 0 30 0 30-18v-42c0-12.773-1.56-16.47-12.086-17.547v8.547c0 4.837-4.078 8.914-8.914 8.914-4.836 0-8.914-4.077-8.914-8.914v-9H35.914zm.086 24h18c24 0 24 0 24 12v24c0 12 0 12-24 12H36c-24 0-24 0-24-12v-24c0-12 0-12 24-12z" fill="%23aea79f"/><rect width="6" height="18" x="24" y="962.362" ry="3" color="%23000" fill="%23aea79f" stroke-width=".1" overflow="visible" enable-background="accumulate"/><rect ry="3" y="962.362" x="60" height="18" width="6" color="%23000" fill="%23aea79f" stroke-width=".1" overflow="visible" enable-background="accumulate"/><path style="text-align:center;line-height:125%;-inkscape-font-specification:Ubuntu Medium" d="M33.336 1001.364v.01c-1.8 0-3.5.348-5.087 1.043-1.548.663-2.913 1.553-4.08 2.664l-.352.337 3.06 4.335.474-.472c.158-.158.425-.388.787-.673l.01-.013.01-.012c.342-.295.74-.582 1.194-.86.467-.27 1.002-.507 1.607-.71.577-.19 1.206-.288 1.896-.288 1.048 0 1.885.26 2.58.768.626.46.964 1.222.964 2.497 0 .56-.114 1.1-.35 1.647-.246.538-.58 1.082-1.006 1.635h-.002c-.408.535-.896 1.088-1.466 1.658-.582.582-1.192 1.176-1.827 1.785h-.004c-.827.8-1.653 1.613-2.48 2.44-.846.845-1.61 1.748-2.292 2.704h-.002c-.692.967-1.26 2.02-1.702 3.15-.426 1.134-.635 2.372-.635 3.707v.72c0 .31.015.583.046.828l.064.493h18.65v-5.197H31.386c.072-.144.057-.21.18-.392l.006-.012h.002c.33-.507.727-1.034 1.192-1.576.47-.548.966-1.096 1.488-1.645l.008-.01c.527-.553.998-1.027 1.413-1.416h.007c.8-.775 1.6-1.56 2.4-2.36h.007c.813-.844 1.534-1.7 2.163-2.576h.002c.66-.906 1.197-1.83 1.613-2.773.428-.994.645-2.02.645-3.054 0-2.528-.756-4.605-2.28-6.102-1.524-1.55-3.862-2.28-6.9-2.28zm16.626.635v.01l-.024.537c-.106 2.31-.24 4.618-.4 6.927-.158 2.277-.384 4.688-.676 7.233l-.07.628h.632c2.187 0 3.982.12 5.37.353h.004c1.42.23 2.518.58 3.283 1.01h.01c.804.44 1.316.945 1.6 1.512.302.606.46 1.297.46 2.1 0 .514-.094.994-.278 1.457-.174.414-.456.79-.876 1.14h-.016c-.375.333-.9.615-1.582.836-.677.193-1.514.298-2.51.298-1.48 0-2.72-.144-3.718-.42-1.012-.31-1.79-.596-2.3-.84l-.638-.304-1.17 5.187.394.198c.32.16.74.313 1.287.477.553.167 1.168.315 1.847.45.703.163 1.43.3 2.184.407.77.11 1.527.163 2.273.163 1.826 0 3.44-.214 4.84-.66h.008c1.386-.473 2.56-1.12 3.502-1.948.94-.827 1.647-1.823 2.105-2.967.454-1.135.68-2.365.68-3.678 0-2.868-1.023-5.22-3.034-6.892-1.888-1.617-4.76-2.472-8.434-2.75.033-.27.064-.51.097-.834.055-.535.096-1.096.123-1.68l.002-.025c.052-.575.09-1.138.117-1.688l.003-.027c.035-.38.054-.693.077-1.02h10.055V1002H49.962z" font-size="35.345" font-weight="500" letter-spacing="0" word-spacing="0" text-anchor="middle" fill="%23aea79f" font-family="Ubuntu"/></g></svg>')}.p-media-object__meta-list-item--location{color:#111;font-size:.875em;margin-bottom:.4rem;padding-left:1.75rem;background-repeat:no-repeat;background-size:1.25rem 1.25rem;background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="90" height="90"><g color="%23000"><path d="M45 0C30.088 0 18 12.088 18 27c0 .562.03 1.103.063 1.656.013.248.012.497.03.75.02.23.07.46.095.688C20.22 51.854 41.922 90 45 90c3.078 0 24.78-38.146 26.813-59.906.02-.232.076-.46.093-.688.022-.248.016-.5.03-.75.032-.56.064-1.12.064-1.656C72 12.088 59.912 0 45 0zm0 18c4.97 0 9 4.03 9 9s-4.03 9-9 9-9-4.03-9-9 4.03-9 9-9z" fill="%23aea79f" stroke-width="3" overflow="visible" enable-background="accumulate"/><path fill="none" stroke-width="7.5" overflow="visible" enable-background="accumulate" d="M0 0h90v90H0z"/></g></svg>')}.p-media-object__meta-list-item--venue{color:#111;font-size:.875em;margin-bottom:.4rem;padding-left:1.75rem;background-repeat:no-repeat;background-size:1.25rem 1.25rem;background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="90" height="90" viewBox="0 0 90 90.000001"><g transform="translate(-111.967 -929.337)" color="%23000"><path fill="none" stroke-width="4" overflow="visible" enable-background="accumulate" d="M111.967 929.336h90v90h-90z"/><circle r="6.5" cy="24.5" cx="23.5" transform="matrix(1.846 0 0 1.846 113.583 929.105)" fill="%23aea79f" stroke-width="2" overflow="visible" enable-background="accumulate"/><circle r="21" cy="45" cx="45" transform="matrix(1.429 0 0 1.429 92.682 910.05)" fill="none" stroke="%23aea79f" stroke-width="4.2" stroke-linejoin="round" overflow="visible" enable-background="accumulate"/><path d="M152.967 931.736l8-2.4v15h-8zM160.967 1016.336h-8v-12h8zM198.967 970.336v8h-12v-8zM114.967 978.336v-8h12v8z" overflow="visible" fill="%23aea79f" stroke-width="6" enable-background="accumulate"/></g></svg>')}.p-media-object--large{display:flex}.p-media-object--large .p-media-object__image{max-height:4.5rem;max-width:4.5rem}@media (min-width: 768px){.p-media-object--large .p-media-object__image{max-height:6rem;max-width:6rem}}.p-media-object--large .p-media-object__title{max-width:20em;font-size:2rem;font-weight:300;line-height:1.3125}.u-align--center .p-media-object--large .p-media-object__title{margin-left:auto;margin-right:auto}.u-align--left .p-media-object--large .p-media-object__title{margin-right:auto}.u-align--right .p-media-object--large .p-media-object__title{margin-left:auto}@media only screen and (min-width: 1030px){.p-media-object--large .p-media-object__title{font-size:3rem;line-height:1.25}}.p-media-object--large .p-media-object__content{margin-top:.75rem}.p-modal{align-items:center;background:rgba(17,17,17,0.75);content:'';display:flex;height:100vh;justify-content:center;left:0;margin:0;overflow:scroll;padding:1.5rem;position:absolute;top:0;width:100%}.p-modal__dialog{bottom:1.5rem;left:1.5rem;max-width:1440px;overflow:scroll;position:absolute;right:1.5rem;top:1.5rem;width:auto}@media screen and (min-width: 768px){.p-modal__dialog{bottom:initial;left:initial;overflow:visible;position:relative;right:initial;top:initial}}.p-modal__header{display:flex;justify-content:space-between;margin:0}.p-modal__title{max-width:25em;font-size:1.375rem;font-weight:300;line-height:1.2727;align-self:flex-end;margin:0}.u-align--center .p-modal__title{margin-left:auto;margin-right:auto}.u-align--left .p-modal__title{margin-right:auto}.u-align--right .p-modal__title{margin-left:auto}@media only screen and (min-width: 1030px){.p-modal__title{font-size:1.5rem;line-height:1.333}}.p-modal__close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='90' width='90'%3E%3Cg color='%23000'%3E%3Cpath fill='none' d='M0 0h90v90H0z'/%3E%3Cpath d='M14.52 6L6 14.52 36.48 45 6 75.49 14.52 84 45 53.52 75.48 84 84 75.49 53.52 45 84 14.52 75.48 6 45 36.49z' fill='%23888'/%3E%3C/g%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;background-size:1rem;border:0;box-sizing:content-box;height:1rem;margin:-1rem -1rem 0 0;padding:1rem;text-indent:-999em;width:1rem}.p-modal__close:focus{outline:1px solid #007aa6;outline-offset:2px}.p-matrix{list-style:none;margin:0;padding:0}@media (min-width: 620px){.p-matrix{display:flex;flex-wrap:wrap}}.p-matrix__item{border-top:1px dotted #666;display:flex;flex-direction:row;margin-top:0;padding:1rem 0}.p-matrix__item:empty{display:none}.p-matrix__item:first-child{border-top:0}@media (min-width: 620px){.p-matrix__item{border-right:1px dotted #666;border-top:1px dotted #666;margin-bottom:0;padding:1rem;width:33.333%}.p-matrix__item:empty{display:block}.p-matrix__item:first-child,.p-matrix__item:nth-child(3n+1){padding-left:0}.p-matrix__item:last-child,.p-matrix__item:nth-child(3n){padding-right:0}.p-matrix__item:nth-child(-n+3){border-top:0}.p-matrix__item:nth-child(2n){border-right:1px dotted #666;padding-right:1rem}.p-matrix__item:nth-child(3n){border-right:0;padding-right:0}}.p-matrix__img,.p-matrix__content{align-self:flex-start;margin-top:0}.p-matrix__img{margin-right:1rem;max-width:3.75rem}.p-matrix__content{display:flex;flex-direction:column;justify-content:center}.p-matrix__title{margin-bottom:.5rem;margin-top:0}.p-matrix__desc{margin-top:0}.p-matrix__link{border-top:0}.p-muted-heading{font-size:.875rem;text-transform:uppercase}.p-navigation{background-color:#000;border-bottom:1px solid transparent;color:#f7f7f7;margin-top:0;position:relative;width:100%;height:3rem}.p-navigation .row{padding:0}@media (max-width: 870px){.p-navigation{height:auto}}@media (max-width: 870px){.p-navigation .p-navigation__banner{overflow:hidden;position:relative}}.p-navigation .p-navigation__toggle--open,.p-navigation .p-navigation__toggle--close,.p-navigation .p-navigation__link{color:#f7f7f7}.p-navigation .p-navigation__toggle--open:hover,.p-navigation .p-navigation__toggle--close:hover,.p-navigation .p-navigation__link:hover{border-bottom:0;text-decoration:underline}.p-navigation .p-navigation__toggle--open:visited,.p-navigation .p-navigation__toggle--close:visited,.p-navigation .p-navigation__link:visited{color:#f7f7f7}.p-navigation .p-navigation__toggle--close{display:none}.p-navigation .p-navigation__toggle--open,.p-navigation .p-navigation__toggle--close{margin:0;position:absolute;right:1rem;top:calc(50% - .75rem)}@media (min-width: 871px){.p-navigation .p-navigation__toggle--open,.p-navigation .p-navigation__toggle--close{display:none}}.p-navigation .p-navigation__logo{max-width:25em;font-size:1.375rem;font-weight:300;line-height:1.2727;align-items:center;display:flex;float:left;margin:.75rem .5rem}.u-align--center .p-navigation .p-navigation__logo{margin-left:auto;margin-right:auto}.u-align--left .p-navigation .p-navigation__logo{margin-right:auto}.u-align--right .p-navigation .p-navigation__logo{margin-left:auto}@media only screen and (min-width: 1030px){.p-navigation .p-navigation__logo{font-size:1.5rem;line-height:1.333}}@media (min-width: 871px){.p-navigation .p-navigation__logo{margin:.5rem 1.25rem}}.p-navigation .p-navigation__image{float:left;height:2rem}.p-navigation .p-navigation__link{border-bottom:0;display:block;margin-top:0}@media (min-width: 871px){.p-navigation .p-navigation__link{display:block;float:left;width:auto}}.p-navigation .p-navigation__link,.p-navigation .p-navigation__link>a{border-bottom:0;display:block}.p-navigation .p-navigation__link:hover,.p-navigation .p-navigation__link>a:hover{text-decoration:none}.p-navigation .p-navigation__link:last-child{margin-bottom:0}.p-navigation .p-navigation__links,.p-navigation .p-navigation__links--right{background-color:#cdcdcd;clear:both;margin:0;padding:0}@media (min-width: 871px){.p-navigation .p-navigation__links,.p-navigation .p-navigation__links--right{background-color:transparent;clear:none;flex-shrink:0;float:left}}.p-navigation .p-navigation__links .p-navigation__link,.p-navigation .p-navigation__links--right .p-navigation__link{border-left:1px solid #cdcdcd}.p-navigation .p-navigation__links .p-navigation__link:hover,.p-navigation .p-navigation__links--right .p-navigation__link:hover{background-color:#f7f7f7}@media (max-width: 870px){.p-navigation .p-navigation__links .p-navigation__link,.p-navigation .p-navigation__links--right .p-navigation__link{background-color:#fff;border-left:0;border-top:1px solid #cdcdcd;color:#111;text-align:left}}.p-navigation .p-navigation__links .p-navigation__link>a,.p-navigation .p-navigation__links--right .p-navigation__link>a{border-bottom:3px solid transparent}.p-navigation .p-navigation__links .p-navigation__link.is-selected>a,.p-navigation .p-navigation__links--right .p-navigation__link.is-selected>a{border-bottom-color:#666}.p-navigation .p-navigation__links .p-navigation__link>a,.p-navigation .p-navigation__links--right .p-navigation__link>a,.p-navigation .p-navigation__links>a,.p-navigation .p-navigation__links--right>a{color:#111;font-size:.875rem;padding:0.8125rem .5rem 0.625rem .5rem}@media (min-width: 871px){.p-navigation .p-navigation__links .p-navigation__link>a,.p-navigation .p-navigation__links--right .p-navigation__link>a,.p-navigation .p-navigation__links>a,.p-navigation .p-navigation__links--right>a{color:#f7f7f7;padding-left:1.25rem;padding-right:1.25rem}}.p-navigation .p-navigation__links:last-of-type,.p-navigation .p-navigation__links--right:last-of-type{border-right:1px solid #cdcdcd}@media (max-width: 870px){.p-navigation .p-navigation__links:last-of-type,.p-navigation .p-navigation__links--right:last-of-type{border-bottom:0;border-right:0}}.p-navigation .p-navigation__nav{display:none;margin-top:0}@media (min-width: 871px){.p-navigation .p-navigation__nav{display:flex}}.p-navigation .p-navigation__nav>.p-search-box{align-self:center;margin-left:auto;margin-top:0;max-width:20rem;order:1;width:100%}@media (max-width: 870px){.p-navigation .p-navigation__nav>.p-search-box{max-width:inherit;order:-1;top:0}}@media (max-width: 870px){.p-navigation .p-navigation__nav>.p-search-box>.p-search-box__input,.p-navigation .p-navigation__nav>.p-search-box .p-search-box__button,.p-navigation .p-navigation__nav>.p-search-box .p-search-box__reset{border-bottom:0}}.p-navigation:target .p-navigation__toggle--open{display:none}@media (max-width: 870px){.p-navigation:target .p-navigation__toggle--close{display:inline-block}}.p-navigation:target .p-navigation__nav{display:flex;flex-direction:row}@media (max-width: 870px){.p-navigation:target .p-navigation__nav{flex-direction:column}}.p-navigation--sidebar{background-color:#fff;border-bottom:1px solid #cdcdcd;color:#111;margin-top:0;position:relative;width:100%;border-bottom:0;height:auto}.p-navigation--sidebar .row{padding:0}@media (max-width: 870px){.p-navigation--sidebar{height:auto}}@media (max-width: 870px){.p-navigation--sidebar .p-navigation__banner{overflow:hidden;position:relative}}.p-navigation--sidebar .p-navigation__toggle--open,.p-navigation--sidebar .p-navigation__toggle--close,.p-navigation--sidebar .p-navigation__link{color:#111}.p-navigation--sidebar .p-navigation__toggle--open:hover,.p-navigation--sidebar .p-navigation__toggle--close:hover,.p-navigation--sidebar .p-navigation__link:hover{border-bottom:0;text-decoration:underline}.p-navigation--sidebar .p-navigation__toggle--open:visited,.p-navigation--sidebar .p-navigation__toggle--close:visited,.p-navigation--sidebar .p-navigation__link:visited{color:#111}.p-navigation--sidebar .p-navigation__toggle--close{display:none}.p-navigation--sidebar .p-navigation__toggle--open,.p-navigation--sidebar .p-navigation__toggle--close{margin:0;position:absolute;right:1rem;top:calc(50% - .75rem)}@media (min-width: 871px){.p-navigation--sidebar .p-navigation__toggle--open,.p-navigation--sidebar .p-navigation__toggle--close{display:none}}.p-navigation--sidebar .p-navigation__logo{max-width:25em;font-size:1.375rem;font-weight:300;line-height:1.2727;align-items:center;display:flex;float:left;margin:.75rem .5rem}.u-align--center .p-navigation--sidebar .p-navigation__logo{margin-left:auto;margin-right:auto}.u-align--left .p-navigation--sidebar .p-navigation__logo{margin-right:auto}.u-align--right .p-navigation--sidebar .p-navigation__logo{margin-left:auto}@media only screen and (min-width: 1030px){.p-navigation--sidebar .p-navigation__logo{font-size:1.5rem;line-height:1.333}}@media (min-width: 871px){.p-navigation--sidebar .p-navigation__logo{margin:.5rem 1.25rem}}.p-navigation--sidebar .p-navigation__image{float:left;height:2rem}.p-navigation--sidebar .p-navigation__link{border-bottom:0;display:block;margin-top:0}@media (min-width: 871px){.p-navigation--sidebar .p-navigation__link{display:block;float:left;width:auto}}.p-navigation--sidebar .p-navigation__link,.p-navigation--sidebar .p-navigation__link>a{border-bottom:0;display:block}.p-navigation--sidebar .p-navigation__link:hover,.p-navigation--sidebar .p-navigation__link>a:hover{text-decoration:none}.p-navigation--sidebar .p-navigation__link:last-child{margin-bottom:0}.p-navigation--sidebar .p-navigation__links,.p-navigation--sidebar .p-navigation .p-navigation__links--right,.p-navigation .p-navigation--sidebar .p-navigation__links--right{background-color:#cdcdcd;clear:both;margin:0;padding:0}@media (min-width: 871px){.p-navigation--sidebar .p-navigation__links,.p-navigation--sidebar .p-navigation .p-navigation__links--right,.p-navigation .p-navigation--sidebar .p-navigation__links--right{background-color:transparent;clear:none;flex-shrink:0;float:left}}.p-navigation--sidebar .p-navigation__links .p-navigation__link,.p-navigation--sidebar .p-navigation .p-navigation__links--right .p-navigation__link,.p-navigation .p-navigation--sidebar .p-navigation__links--right .p-navigation__link{border-left:1px solid #cdcdcd}.p-navigation--sidebar .p-navigation__links .p-navigation__link:hover,.p-navigation--sidebar .p-navigation .p-navigation__links--right .p-navigation__link:hover,.p-navigation .p-navigation--sidebar .p-navigation__links--right .p-navigation__link:hover{background-color:#f7f7f7}@media (max-width: 870px){.p-navigation--sidebar .p-navigation__links .p-navigation__link,.p-navigation--sidebar .p-navigation .p-navigation__links--right .p-navigation__link,.p-navigation .p-navigation--sidebar .p-navigation__links--right .p-navigation__link{background-color:#fff;border-left:0;border-top:1px solid #cdcdcd;color:#111;text-align:left}}.p-navigation--sidebar .p-navigation__links .p-navigation__link>a,.p-navigation--sidebar .p-navigation .p-navigation__links--right .p-navigation__link>a,.p-navigation .p-navigation--sidebar .p-navigation__links--right .p-navigation__link>a{border-bottom:3px solid transparent}.p-navigation--sidebar .p-navigation__links .p-navigation__link.is-selected>a,.p-navigation--sidebar .p-navigation .p-navigation__links--right .p-navigation__link.is-selected>a,.p-navigation .p-navigation--sidebar .p-navigation__links--right .p-navigation__link.is-selected>a{border-bottom-color:#666}.p-navigation--sidebar .p-navigation__links .p-navigation__link>a,.p-navigation--sidebar .p-navigation .p-navigation__links--right .p-navigation__link>a,.p-navigation .p-navigation--sidebar .p-navigation__links--right .p-navigation__link>a,.p-navigation--sidebar .p-navigation__links>a,.p-navigation--sidebar .p-navigation .p-navigation__links--right>a,.p-navigation .p-navigation--sidebar .p-navigation__links--right>a{color:#111;font-size:.875rem;padding:0.8125rem .5rem 0.625rem .5rem}@media (min-width: 871px){.p-navigation--sidebar .p-navigation__links .p-navigation__link>a,.p-navigation--sidebar .p-navigation .p-navigation__links--right .p-navigation__link>a,.p-navigation .p-navigation--sidebar .p-navigation__links--right .p-navigation__link>a,.p-navigation--sidebar .p-navigation__links>a,.p-navigation--sidebar .p-navigation .p-navigation__links--right>a,.p-navigation .p-navigation--sidebar .p-navigation__links--right>a{color:#111;padding-left:1.25rem;padding-right:1.25rem}}.p-navigation--sidebar .p-navigation__links:last-of-type,.p-navigation--sidebar .p-navigation .p-navigation__links--right:last-of-type,.p-navigation .p-navigation--sidebar .p-navigation__links--right:last-of-type{border-right:1px solid #cdcdcd}@media (max-width: 870px){.p-navigation--sidebar .p-navigation__links:last-of-type,.p-navigation--sidebar .p-navigation .p-navigation__links--right:last-of-type,.p-navigation .p-navigation--sidebar .p-navigation__links--right:last-of-type{border-bottom:0;border-right:0}}.p-navigation--sidebar .p-navigation__nav{display:none;margin-top:0}@media (min-width: 871px){.p-navigation--sidebar .p-navigation__nav{display:flex}}.p-navigation--sidebar .p-navigation__nav>.p-search-box{align-self:center;margin-left:auto;margin-top:0;max-width:20rem;order:1;width:100%}@media (max-width: 870px){.p-navigation--sidebar .p-navigation__nav>.p-search-box{max-width:inherit;order:-1;top:0}}@media (max-width: 870px){.p-navigation--sidebar .p-navigation__nav>.p-search-box>.p-search-box__input,.p-navigation--sidebar .p-navigation__nav>.p-search-box .p-search-box__button,.p-navigation--sidebar .p-navigation__nav>.p-search-box .p-search-box__reset{border-bottom:0}}.p-navigation--sidebar:target .p-navigation__toggle--open{display:none}@media (max-width: 870px){.p-navigation--sidebar:target .p-navigation__toggle--close{display:inline-block}}.p-navigation--sidebar:target .p-navigation__nav{display:flex;flex-direction:row}@media (max-width: 870px){.p-navigation--sidebar:target .p-navigation__nav{flex-direction:column}}.p-navigation--sidebar .p-navigation__logo{margin:0 1rem 0 0}.p-navigation--sidebar .p-navigation__tagline{color:#666;display:inline-block;margin-top:.2rem}.p-navigation--sidebar .sidebar__cta{margin-top:0}.p-navigation--sidebar .sidebar__cta .p-inline-list{display:inline-block}.p-navigation--sidebar .sidebar__cta [class^="p-icon"]{cursor:pointer}@media (min-width: 871px){.p-navigation--sidebar .sidebar__cta{display:none}}.p-navigation--sidebar .sidebar__content{background:#fff;margin-top:.75rem;padding-bottom:1rem;width:100%}@media (min-width: 871px){.p-navigation--sidebar .sidebar__content{display:block !important}}.p-navigation--sidebar .sidebar__link{color:#111;display:block;padding:.5rem 0;position:relative}.p-navigation--sidebar .sidebar__link:hover{color:#007aa6}.p-navigation--sidebar .sidebar__link:focus{outline:0}.p-navigation--sidebar .is-selected{font-weight:bold}.p-navigation--sidebar .sidebar__first-level{padding-left:0}.p-navigation--sidebar .sidebar__third-level{background-color:#666;margin-right:-4rem;padding-left:4rem;position:relative;right:3rem}.p-navigation--sidebar .sidebar__second-level,.p-navigation--sidebar .sidebar__third-level{display:none;list-style:none;margin-left:0;padding-bottom:.5rem;padding-top:.5rem}.p-icon--minus{display:none}.is-selected .p-icon--minus{display:block}.is-selected .p-icon--plus{display:none}.is-selected+.sidebar__second-level,.is-selected+.sidebar__third-level{display:block}.p-navigation--sidebar .sidebar__second-level .is-deepest-level,.p-navigation--sidebar .sidebar__third-level .is-deepest-level{background-color:#f7f7f7}.p-navigation--sidebar .p-icon--plus,.p-navigation--sidebar .p-icon--minus{perspective:800px;perspective-origin:50% 100px;position:absolute;right:1rem;top:.75rem;transition:all .5s ease-in-out}.p-link--soft{color:#111}.p-link--soft:visited{color:#111;text-decoration:none}.p-link--soft:hover{color:#007aa6}.p-link--soft.is-selected{font-weight:400}.p-link--strong{color:currentColor;font-weight:400}.p-link--strong:visited{color:currentColor}.p-link--strong:hover{color:#007aa6;text-decoration:underline}.p-link--inverted{color:#f7f7f7;font-weight:400}.p-link--inverted:hover{color:#f7f7f7}.p-link--inverted:visited{color:#dedede}@supports (mask-size: 1em) or (-webkit-mask-size: 1em){.p-link--external::after{-webkit-mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23111' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E") no-repeat 0 0/cover;background-color:currentColor;content:'';margin:0 0 0 .25em;mask:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23111' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E") no-repeat 0 0/cover;padding-right:.75em}.p-link--no-underline{border:0}}@supports not ((mask-size: 1em) or (-webkit-mask-size: 1em)){.p-link--external{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23007aa6' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E");background-position:top right;background-repeat:no-repeat;background-size:.75em;margin-top:-.25em;padding:.25em 1em 0 0}.p-link--external.p-link--strong,.p-link--external.p-link--soft,.p-link--external.sidebar__link{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23111' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-link--external.p-link--soft:hover,.p-link--external.sidebar__link:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23007aa6' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-link--external.p-link--inverted{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23f7f7f7' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23f7f7f7' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23f7f7f7' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-link--external.p-link--inverted:visited{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23dedede' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23dedede' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23dedede' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-link--external.sidebar__link{display:inline-block;padding:0 1em 1em 0}.p-link--no-underline{border:0}.p-button .p-link--external,.p-button--neutral .p-link--external,.p-button--base .p-link--external{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23111' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23111' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E");padding-top:0}.p-button--positive .p-link--external{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23fff' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E");padding-top:0}.p-button--negative .p-link--external{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23fff' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E");padding-top:0}.p-button--brand .p-link--external{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23fff' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E");padding-top:0}.p-strip--dark * .p-link--external.p-link--soft,.p-strip--accent * .p-link--external.p-link--soft,.p-strip--image.is-dark * .p-link--external.p-link--soft{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23fff' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-strip--dark * .p-link--external.p-link--soft:hover,.p-strip--accent * .p-link--external.p-link--soft:hover,.p-strip--image.is-dark * .p-link--external.p-link--soft:hover{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23007aa6' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23007aa6' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}.p-strip--dark * .p-link--external.p-link--strong,.p-strip--accent * .p-link--external.p-link--strong,.p-strip--image.is-dark * .p-link--external.p-link--strong{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='0.75em' height='0.75em' viewBox='0 0 16 16' %3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M4.867 1.313C.6 1.32.067 1.443.067 4.51v6.4c0 3.2.533 3.2 5.333 3.2h2.133c4.8 0 5.334 0 5.334-3.2v-1.6h-1.6v1.068c0 2.133 0 2.133-4.267 2.133H5.933c-4.266 0-4.266 0-4.266-2.132V5.044c0-1.93.034-2.112 3.2-2.13v-1.6z'/%3E%3Cpath d='M-1-1h16v16H-1'/%3E%3Cpath fill='%23fff' d='M6.435 2.16c.11-.446 7.113-2.196 7.448-1.86.335.334-1.416 7.335-1.863 7.447-.447.112-5.697-5.14-5.586-5.586z'/%3E%3Cpath fill='%23fff' d='M9.032 3.38L4.705 7.708l1.767 1.767L10.8 5.148'/%3E%3C/g%3E%3C/svg%3E")}}.p-top{border-bottom:1px dotted #cdcdcd;clear:both;margin:20px 0}.p-top__link{background:#fff;color:#111;float:right;margin-right:5px;padding:0 5px;position:relative;text-decoration:none;top:-.725rem}.p-list-tree__item--group::after,.p-list-tree .p-list-tree[aria-hidden="false"]::after{background-position:center;background-repeat:no-repeat;content:' ';display:block;height:.9375rem;left:-1rem;pointer-events:none;position:absolute;top:.4rem;width:.9375rem}.p-list-tree{border-left:1px solid #cdcdcd;list-style-type:none;margin-left:1rem;padding:0 0 0 .5rem}.p-list-tree__item{margin-top:.25rem;padding-left:.8rem;position:relative}.p-list-tree__item::before{background:#cdcdcd;content:' ';display:block;height:1px;left:-.5rem;pointer-events:none;position:absolute;top:.8rem;width:.625rem}.p-list-tree__item--group::after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='15' width='15' viewBox='0 0 15 15'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a' fill='%23FFF'/%3E%3Cpath stroke='%23888' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23888' d='M7 4h1v7H7z'/%3E%3Cpath fill='%23888' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-list-tree__toggle{background:transparent;border:0;font-weight:normal;margin:0 0 0 -1.75rem;padding:0 0 0 1.75rem;transition-duration:0s;width:auto}.p-list-tree__toggle:hover{background:transparent;color:#007aa6;text-decoration:underline}.p-list-tree__toggle:focus{background:transparent;outline:1px dotted #cdcdcd}.p-list-tree .p-list-tree{display:none;margin-left:0}.p-list-tree .p-list-tree[aria-hidden="false"]{display:block}.p-list-tree .p-list-tree[aria-hidden="false"]::after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='15' width='15' viewBox='0 0 15 15'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a' fill='%23FFF'/%3E%3Cpath stroke='%23888' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='%23888' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E");z-index:1}.p-list{list-style:none;margin-left:0;padding-left:0}.p-list__item{margin-top:.6667rem}.p-list--divided{list-style:none;margin-left:0;padding-left:0}.p-list--divided .p-list__item{margin-top:0;padding-bottom:.63rem;padding-top:.63rem;border-bottom:1px dotted #cdcdcd}.p-list--divided .p-list__item:last-of-type,.p-list--divided .p-list__item .last-item{border-bottom:0}.p-list--divided.is-split .p-list__item:last-of-type{border-bottom:1px dotted #cdcdcd}.is-ticked{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'%3E%3Ccircle fill='%23e95420' cx='7' cy='7' r='7'/%3E%3Cpath fill='%23fff' d='M6.1 10.813L2.41 8.105l1.184-1.613L5.9 8.187l4.393-4.394 1.414 1.414z' /%3E%3C/svg%3E");background-position:0 .3rem;background-repeat:no-repeat;padding-left:25px}.p-list--divided .is-ticked{background-position:0 1rem}.p-inline-list{margin-left:0;padding-left:0}.p-inline-list__item{display:inline;list-style:none;margin-right:1.25rem}.p-inline-list__item:last-of-type,.p-inline-list__item .last-item{margin-right:0}.p-inline-list--middot{margin-left:0;padding-left:0}.p-inline-list--middot .p-inline-list__item{display:inline;list-style:none;margin-right:1.25rem;margin-right:1.25em;position:relative}.p-inline-list--middot .p-inline-list__item:last-of-type,.p-inline-list--middot .p-inline-list__item .last-item{margin-right:0}.p-inline-list--middot .p-inline-list__item::after{color:#666;content:'\00b7';font-size:1.4em;line-height:0;position:absolute;right:-.5em;top:.4em}.p-inline-list--middot .p-inline-list__item:hover::after{color:#666}.p-inline-list--middot .p-inline-list__item:last-of-type::after,.p-inline-list--middot .p-inline-list__item .last-item::after{content:''}.p-list-step{list-style:none;margin-left:4rem;padding:0}.p-list-step__title{margin-top:0;position:relative}.p-list-step__item{clear:both;margin-left:0;margin-top:1.5rem;width:100%}.p-list-step__item:first-child{margin-top:.75rem}@media only screen and (min-width: 1030px){.p-list-step__item:first-child{margin-top:0}}.p-list-step__bullet{background-color:#666;border-radius:50%;color:#fff;display:inline-block;font-size:1.5rem;height:3rem;line-height:3rem;margin-left:-4rem;margin-top:-.4em;position:absolute;text-align:center;width:3rem}@media (min-width: 1030px){.p-list-step__bullet{margin-top:-.15em}}.p-stepped-list--detailed{list-style:none;margin-left:0;padding:0 2rem 0 4rem}@media (max-width: 1440px){.p-stepped-list--detailed{margin-top:2.5rem}}.p-stepped-list--detailed .p-list-step__item{margin-bottom:3rem}@media (min-width: 768px){.p-stepped-list--detailed .p-list-step__item{display:flex;margin:0}.p-stepped-list--detailed .p-list-step__item>:nth-child(2n){display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;width:48.35615%;margin-left:3.2877%}.p-stepped-list--detailed .p-list-step__item>:nth-child(2n+1){display:block;float:left;min-height:1px;position:relative;*margin-right:-1px;width:48.35615%}}@media (min-width: 768px){.p-stepped-list--detailed .p-list-step__title{padding-top:2.5rem}}@media only screen and (min-width: 1030px){.p-stepped-list--detailed .p-list-step__title+*{margin-top:0}}@media (min-width: 768px){.p-stepped-list--detailed .p-list-step__content{border-bottom:1px solid #f7f7f7;padding:2.5rem 0}}@media (min-width: 768px){@supports (columns: 1){[class*='p-list'].is-split{column-gap:2rem;columns:2}[class*='p-list'].is-split .p-list__item{display:inline-block;width:100%}}@supports not (columns: 1){[class*='p-list'].is-split{display:flex;flex-wrap:wrap}[class*='p-list'].is-split .p-list__item{width:calc(50% - .5rem)}}[class*='p-list'].is-split:nth-child(2n-1){margin-right:1rem}}.p-tooltip{position:relative}.p-tooltip__message{background-color:#111;border:0;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;min-width:155px;padding:.5rem .75rem;position:absolute;text-align:left;text-decoration:initial;top:100%;transform:translateX(0%) translateY(13px);white-space:pre;z-index:1}.p-tooltip__message::before{border-bottom:8px solid #111;border-left:8px solid transparent;border-right:8px solid transparent;bottom:100%;content:'';height:0;left:.75rem;pointer-events:none;position:absolute;width:0}.p-tooltip:focus .p-tooltip__message,.p-tooltip:hover .p-tooltip__message{display:inline;text-decoration:initial}.p-tooltip--btm-center .p-tooltip__message{bottom:inherit;left:50%;top:100%;transform:translateX(-50%) translateY(13px)}.p-tooltip--btm-center .p-tooltip__message::before{left:50%;transform:translateX(-50%)}.p-tooltip--btm-right .p-tooltip__message{bottom:inherit;left:initial;right:0;top:100%;transform:translateY(13px)}.p-tooltip--btm-right .p-tooltip__message::before{left:initial;right:.75rem}.p-tooltip--top-left .p-tooltip__message{bottom:100%;left:0;top:initial;transform:translateX(0%) translateY(-13px)}.p-tooltip--top-left .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:.75rem}.p-tooltip--top-center .p-tooltip__message{bottom:100%;left:50%;top:initial;transform:translateX(-50%) translateY(-13px)}.p-tooltip--top-center .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:50%;transform:translateX(-50%)}.p-tooltip--top-right .p-tooltip__message{bottom:100%;left:initial;right:0;top:initial;transform:translateX(0%) translateY(-13px)}.p-tooltip--top-right .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:initial;right:.75rem}.p-tooltip--right .p-tooltip__message{bottom:inherit;left:100%;top:50%;transform:translateX(14px) translateY(-50%)}.p-tooltip--right .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid #111;border-top:8px solid transparent;bottom:inherit;left:0;top:50%;transform:translateX(-16px) translateY(-50%)}.p-tooltip--left .p-tooltip__message{bottom:inherit;left:-16px;top:50%;transform:translateX(-100%) translateY(-50%)}.p-tooltip--left .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid #111;border-right:8px solid transparent;border-top:8px solid transparent;bottom:inherit;left:100%;top:50%;transform:translateX(0) translateY(-50%)}.p-icon,.p-icon--plus,.p-icon--minus,.p-icon--expand,.p-icon--collapse,.p-icon--chevron,.p-icon--close,.p-icon--help,.p-icon--information,.p-icon--info,.p-icon--delete,.p-icon--error,.p-icon--power-error,.p-icon--warning,.p-icon--external-link,.p-icon--contextual-menu,.p-icon--menu,.p-icon--code,.p-icon--copy,.p-icon--search,.p-icon--success,.p-icon--pass,.p-icon--share,.p-icon--user,.p-icon--question,.p-icon--spinner,.p-icon--facebook,.p-icon--google,.p-icon--twitter,.p-icon--instagram,.p-icon--linkedin,.p-icon--youtube,.p-icon--canonical,.p-icon--ubuntu,.p-icon--edit,.p-icon--status-failed,.p-icon--status-in-progress,.p-icon--status-queued,.p-icon--status-succeeded,.p-icon--status-waiting,.p-icon--timed-out,.p-icon--success-muted,.p-icon--locked,.p-icon--compose-machine,.p-icon--account,.p-icon--mount,.p-icon--unmount,.p-icon--partition,.p-icon--debug,.p-icon--remove,.p-icon--settings,.p-icon--sync,.p-icon--system-shutdown,.p-icon--tags,.p-icon--logical-volume,.p-icon--pending,.p-icon--running,.p-icon--power-on,.p-icon--power-off{height:1rem;width:1rem;background-position:center;background-repeat:no-repeat;background-size:contain;display:inline-block;margin:0;overflow:hidden;padding:0;position:relative;text-indent:999em;top:-2px;vertical-align:sub}.p-icon--plus{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9' viewBox='0 0 9 9'%3E%3Cg fill='rgba(102,102,102,0.999999)' fill-rule='evenodd'%3E%3Cpath d='M4 0h1v9H4z'/%3E%3Cpath d='M0 5V4h9v1z'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--plus{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9' viewBox='0 0 9 9'%3E%3Cg fill='rgba(205,205,205,0.999999)' fill-rule='evenodd'%3E%3Cpath d='M4 0h1v9H4z'/%3E%3Cpath d='M0 5V4h9v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--minus{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9' viewBox='0 0 9 9'%3E%3Cpath d='M0 5V4h9v1z' fill='rgba(102,102,102,0.999999)' fill-rule='evenodd'/%3E%3C/svg%3E")}[class$="--dark"] .p-icon--minus{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='9' width='9' viewBox='0 0 9 9'%3E%3Cpath d='M0 5V4h9v1z' fill='rgba(205,205,205,0.999999)' fill-rule='evenodd'/%3E%3C/svg%3E")}.p-icon--expand{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='15' width='15' viewBox='0 0 15 15'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='rgba(102,102,102,0.999999)' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='rgba(102,102,102,0.999999)' d='M7 4h1v7H7z'/%3E%3Cpath fill='rgba(102,102,102,0.999999)' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--expand{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='15' width='15' viewBox='0 0 15 15'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='rgba(205,205,205,0.999999)' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='rgba(205,205,205,0.999999)' d='M7 4h1v7H7z'/%3E%3Cpath fill='rgba(205,205,205,0.999999)' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--collapse{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='15' width='15' viewBox='0 0 15 15'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='rgba(102,102,102,0.999999)' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='rgba(102,102,102,0.999999)' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--collapse{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' height='15' width='15' viewBox='0 0 15 15'%3E%3Cdefs%3E%3Cpath id='a' d='M0 0h15v15H0z'/%3E%3C/defs%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cuse xlink:href='%23a'/%3E%3Cpath stroke='rgba(205,205,205,0.999999)' d='M.5.5h14v14H.5z'/%3E%3Cpath fill='rgba(205,205,205,0.999999)' d='M4 8V7h7v1z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--chevron{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='4' width='10' viewBox='0 0 10 4'%3E%3Cpath d='M3.637 3.1377c-.518-.365-1.052-.7781-1.601-1.238C1.487 1.4412.947.9479.415.4225.273.2821.134.1404 0 0h1.541c.304.2888.62.5709.947.8463.1379.1161.2768.2297.4168.3408.1636.1297.3286.2558.4954.3783.0852.0625.1708.1241.2568.1846.397.2821.935.6257 1.315.8476h.054c.38-.2219.918-.5655 1.315-.8476.398-.2807.788-.5829 1.169-.9037.327-.2754.643-.5575.947-.8463h1.541c-.135.1404-.273.2821-.415.4225-.532.5254-1.072 1.0187-1.621 1.4772-.55.4599-1.083.873-1.601 1.238-.519.36497-.973.6524-1.362.8623-.39-.2099-.844-.49733-1.362-.8623z' fill='rgba(102,102,102,0.999999)' fill-rule='evenodd'/%3E%3C/svg%3E")}[class$="--dark"] .p-icon--chevron{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='4' width='10' viewBox='0 0 10 4'%3E%3Cpath d='M3.637 3.1377c-.518-.365-1.052-.7781-1.601-1.238C1.487 1.4412.947.9479.415.4225.273.2821.134.1404 0 0h1.541c.304.2888.62.5709.947.8463.1379.1161.2768.2297.4168.3408.1636.1297.3286.2558.4954.3783.0852.0625.1708.1241.2568.1846.397.2821.935.6257 1.315.8476h.054c.38-.2219.918-.5655 1.315-.8476.398-.2807.788-.5829 1.169-.9037.327-.2754.643-.5575.947-.8463h1.541c-.135.1404-.273.2821-.415.4225-.532.5254-1.072 1.0187-1.621 1.4772-.55.4599-1.083.873-1.601 1.238-.519.36497-.973.6524-1.362.8623-.39-.2099-.844-.49733-1.362-.8623z' fill='rgba(205,205,205,0.999999)' fill-rule='evenodd'/%3E%3C/svg%3E")}.p-icon--close{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='90' width='90'%3E%3Cg color='%23%7B$color%7D'%3E%3Cpath fill='none' d='M0 0h90v90H0z'/%3E%3Cpath d='M14.52 6L6 14.52 36.48 45 6 75.49 14.52 84 45 53.52 75.48 84 84 75.49 53.52 45 84 14.52 75.48 6 45 36.49z' fill='rgba(102,102,102,0.999999)'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--close{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='90' width='90'%3E%3Cg color='%23%7B$color%7D'%3E%3Cpath fill='none' d='M0 0h90v90H0z'/%3E%3Cpath d='M14.52 6L6 14.52 36.48 45 6 75.49 14.52 84 45 53.52 75.48 84 84 75.49 53.52 45 84 14.52 75.48 6 45 36.49z' fill='rgba(205,205,205,0.999999)'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--help{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E%3Cpath fill='none' color='%23%7B$color%7D' d='M-.00296.00236h16.00008v16.00008H-.00296z'/%3E%3Cpath d='M8.00375 5.22905q-.4309 0-.82487.1108-.39397.0985-.82487.33243l-.4186-1.145q.4556-.25855 1.0342-.4063.59098-.16004 1.20657-.16004.73867 0 1.2188.2093.48016.19698.76334.50477.28317.3078.39397.6772.1108.36937.1108.7141 0 .4186-.16003.751-.14773.3324-.38165.61558t-.50477.5417q-.27086.24625-.5048.5171-.2339.25854-.39395.554-.14775.2955-.14775.66485v.14773q0 .07388.01233.14775H7.302q-.0246-.1231-.03695-.25852-.01234-.14774-.01234-.27085 0-.4063.1355-.7264.13543-.3201.3447-.59098t.4432-.50477q.24625-.23393.45555-.46785.2093-.2339.34473-.48014.13543-.24624.13543-.5417 0-.4063-.2832-.66485-.2709-.2709-.8249-.2709zm.98 6.78005q0 .4309-.28316.70172-.2832.27086-.7018.27086-.4063 0-.70176-.27086-.28317-.27085-.28317-.70173 0-.4309.28317-.7018.2955-.2832.70175-.2832.4186 0 .70173.28317.28313.27086.28313.70174z' fill='rgba(102,102,102,0.999999)'/%3E%3Cpath d='M2.06372 1.00237c-.59096 0-1.0664.47546-1.0664 1.0664v11.8674c0 .59095.47545 1.0664 1.0664 1.0664h11.8674c.59094 0 1.0664-.47546 1.0664-1.0664V2.06877c0-.59096-.47547-1.0664-1.0664-1.0664zm-.0664 1h12.00006v12.00006H1.99732z' fill='rgba(102,102,102,0.999999)' color='%23%7B$color%7D'/%3E%3C/svg%3E")}[class$="--dark"] .p-icon--help{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E%3Cpath fill='none' color='%23%7B$color%7D' d='M-.00296.00236h16.00008v16.00008H-.00296z'/%3E%3Cpath d='M8.00375 5.22905q-.4309 0-.82487.1108-.39397.0985-.82487.33243l-.4186-1.145q.4556-.25855 1.0342-.4063.59098-.16004 1.20657-.16004.73867 0 1.2188.2093.48016.19698.76334.50477.28317.3078.39397.6772.1108.36937.1108.7141 0 .4186-.16003.751-.14773.3324-.38165.61558t-.50477.5417q-.27086.24625-.5048.5171-.2339.25854-.39395.554-.14775.2955-.14775.66485v.14773q0 .07388.01233.14775H7.302q-.0246-.1231-.03695-.25852-.01234-.14774-.01234-.27085 0-.4063.1355-.7264.13543-.3201.3447-.59098t.4432-.50477q.24625-.23393.45555-.46785.2093-.2339.34473-.48014.13543-.24624.13543-.5417 0-.4063-.2832-.66485-.2709-.2709-.8249-.2709zm.98 6.78005q0 .4309-.28316.70172-.2832.27086-.7018.27086-.4063 0-.70176-.27086-.28317-.27085-.28317-.70173 0-.4309.28317-.7018.2955-.2832.70175-.2832.4186 0 .70173.28317.28313.27086.28313.70174z' fill='rgba(205,205,205,0.999999)'/%3E%3Cpath d='M2.06372 1.00237c-.59096 0-1.0664.47546-1.0664 1.0664v11.8674c0 .59095.47545 1.0664 1.0664 1.0664h11.8674c.59094 0 1.0664-.47546 1.0664-1.0664V2.06877c0-.59096-.47547-1.0664-1.0664-1.0664zm-.0664 1h12.00006v12.00006H1.99732z' fill='rgba(205,205,205,0.999999)' color='%23%7B$color%7D'/%3E%3C/svg%3E")}.p-icon--information,.p-icon--info{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E%3Cg color='%23000'%3E%3Cpath d='M2.07 1c-.59095 0-1.0664.47546-1.0664 1.0664v11.867c0 .59095.47546 1.0664 1.0664 1.0664h11.867c.59095 0 1.0664-.47546 1.0664-1.0664V2.0664C15.0034 1.47545 14.52794 1 13.937 1zm-.0664 1h12v12h-12z' fill='rgba(102,102,102,0.999999)'/%3E%3Cpath d='M7 4v2h2V4zm0 3v5h2V7z' fill='rgba(102,102,102,0.999999)'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--information,[class$="--dark"] .p-icon--info{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E%3Cg color='%23000'%3E%3Cpath d='M2.07 1c-.59095 0-1.0664.47546-1.0664 1.0664v11.867c0 .59095.47546 1.0664 1.0664 1.0664h11.867c.59095 0 1.0664-.47546 1.0664-1.0664V2.0664C15.0034 1.47545 14.52794 1 13.937 1zm-.0664 1h12v12h-12z' fill='rgba(205,205,205,0.999999)'/%3E%3Cpath d='M7 4v2h2V4zm0 3v5h2V7z' fill='rgba(205,205,205,0.999999)'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--delete{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E%3Cg color='%23000'%3E%3Cpath opacity='.114' fill='none' d='M0 0h16v16H0z'/%3E%3Cpath opacity='.114' fill='none' d='M0 0h16v16H0z'/%3E%3Cpath opacity='.114' fill='none' d='M0 0h16v16H0z'/%3E%3Cpath style='text-decoration-color:%23000000;isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none' d='M2 4v1h2V4H2zm11 0v1h2V4h-2zM2 6v8.5059c0 .82235.67765 1.5 1.5 1.5h10c.82235 0 1.5-.67765 1.5-1.5V6h-2v7.5059c0 .28565-.21435.5-.5.5h-8c-.28565 0-.5-.21435-.5-.5V6H2z' fill='rgba(102,102,102,0.999999)' solid-color='%23000000'/%3E%3Cpath d='M6 0v3h1V1h3v2h1V0H6zM5 6h1v6H5zm3 0h1v6H8zm3 0h1v6h-1z' fill='rgba(102,102,102,0.999999)'/%3E%3Cpath style='text-decoration-color:%23000000;isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none' d='M3.5 2C2.67765 2 2 2.67764 2 3.5V5h13V3.5c0-.82236-.67765-1.5-1.5-1.5h-10zM2 6v8.0059h2V6H2zm11 0v8.0059h2V6h-2z' fill='rgba(102,102,102,0.999999)' solid-color='%23000000'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--delete{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E%3Cg color='%23000'%3E%3Cpath opacity='.114' fill='none' d='M0 0h16v16H0z'/%3E%3Cpath opacity='.114' fill='none' d='M0 0h16v16H0z'/%3E%3Cpath opacity='.114' fill='none' d='M0 0h16v16H0z'/%3E%3Cpath style='text-decoration-color:%23000000;isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none' d='M2 4v1h2V4H2zm11 0v1h2V4h-2zM2 6v8.5059c0 .82235.67765 1.5 1.5 1.5h10c.82235 0 1.5-.67765 1.5-1.5V6h-2v7.5059c0 .28565-.21435.5-.5.5h-8c-.28565 0-.5-.21435-.5-.5V6H2z' fill='rgba(205,205,205,0.999999)' solid-color='%23000000'/%3E%3Cpath d='M6 0v3h1V1h3v2h1V0H6zM5 6h1v6H5zm3 0h1v6H8zm3 0h1v6h-1z' fill='rgba(205,205,205,0.999999)'/%3E%3Cpath style='text-decoration-color:%23000000;isolation:auto;mix-blend-mode:normal;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;text-indent:0;text-transform:none' d='M3.5 2C2.67765 2 2 2.67764 2 3.5V5h13V3.5c0-.82236-.67765-1.5-1.5-1.5h-10zM2 6v8.0059h2V6H2zm11 0v8.0059h2V6h-2z' fill='rgba(205,205,205,0.999999)' solid-color='%23000000'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--error,.p-icon--power-error{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16.000017 16.000017' width='16'%3E%3Cg stroke-width='1.5' color='%23000'%3E%3Cpath d='M8 0C3.5906 0 0 3.5906 0 8s3.5906 8 8 8 8-3.5906 8-8-3.5906-8-8-8z' fill='%23c7162b'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath d='M5 5l6 6m0-6l-6 6' stroke-dashoffset='.8' stroke='%23fff' fill='none'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--error,[class$="--dark"] .p-icon--power-error{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16.000017 16.000017' width='16'%3E%3Cg stroke-width='1.5' color='%23000'%3E%3Cpath d='M8 0C3.5906 0 0 3.5906 0 8s3.5906 8 8 8 8-3.5906 8-8-3.5906-8-8-8z' fill='%23c7162b'/%3E%3Cpath fill='none' d='M0 0h16v16H0z'/%3E%3Cpath d='M5 5l6 6m0-6l-6 6' stroke-dashoffset='.8' stroke='%23fff' fill='none'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--warning{background-image:url("data:image/svg+xml,%3Csvg xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns='http://www.w3.org/2000/svg' xmlns:cc='http://creativecommons.org/ns%23' xmlns:dc='http://purl.org/dc/elements/1.1/' id='svg5918' height='16' viewBox='0 0 16.000017 16.000017' width='16' version='1.1'%3E%3Cg id='layer1' transform='translate(-182.94 -560.72)'%3E%3Cg id='g6413' transform='translate(-769.06 364.36)'%3E%3Crect id='rect6415' style='color:%23000000' stroke-dashoffset='0.6' height='16' width='16' stroke-dasharray='1.5, 1.50000000000000000' y='196.36' x='952' stroke-width='1.5' fill='none'/%3E%3Cpath id='path4389' stroke-linejoin='round' style='color:%23000000' fill='%23f99b11' transform='matrix(2.28 0 0 2.437 -1228.8 -294.16)' stroke='%23f99b11' stroke-width='.84848' d='m963.07 207.03h-6.1498l3.08-5.33z'/%3E%3Cpath id='rect4391' stroke-linejoin='round' style='color:%23000000' d='m7 5v5h2v-5h-2zm0 6v2h2v-2h-2z' transform='translate(952 196.36)' stroke-width='2' fill='%23111'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--warning{background-image:url("data:image/svg+xml,%3Csvg xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns='http://www.w3.org/2000/svg' xmlns:cc='http://creativecommons.org/ns%23' xmlns:dc='http://purl.org/dc/elements/1.1/' id='svg5918' height='16' viewBox='0 0 16.000017 16.000017' width='16' version='1.1'%3E%3Cg id='layer1' transform='translate(-182.94 -560.72)'%3E%3Cg id='g6413' transform='translate(-769.06 364.36)'%3E%3Crect id='rect6415' style='color:%23000000' stroke-dashoffset='0.6' height='16' width='16' stroke-dasharray='1.5, 1.50000000000000000' y='196.36' x='952' stroke-width='1.5' fill='none'/%3E%3Cpath id='path4389' stroke-linejoin='round' style='color:%23000000' fill='%23f99b11' transform='matrix(2.28 0 0 2.437 -1228.8 -294.16)' stroke='%23f99b11' stroke-width='.84848' d='m963.07 207.03h-6.1498l3.08-5.33z'/%3E%3Cpath id='rect4391' stroke-linejoin='round' style='color:%23000000' d='m7 5v5h2v-5h-2zm0 6v2h2v-2h-2z' transform='translate(952 196.36)' stroke-width='2' fill='%23111'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}.p-icon--external-link{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 16' width='16'%3E%3Cpath fill='none' d='M.00344.00146h16.00008v16.00008H.00344z'/%3E%3Cpath d='M8.58148 2.06814S12.20818.6308 15.99952-.0052c.002.00066.002.00066.002.002v.00598h.002c-.70734 3.96468-2.08 7.40603-2.08 7.40603l-5.34205-5.34z' fill='rgba(102,102,102,0.999999)'/%3E%3Cpath stroke-linejoin='round' d='M7.8708 8.12817l4.44537-4.4447' stroke='rgba(102,102,102,0.999999)' stroke-width='2.00001' fill='none'/%3E%3Cpath d='M1.50345 2.00147c-.822 0-1.5.678-1.5 1.5v11.00006c0 .822.678 1.5 1.5 1.5H12.5035c.822 0 1.5-.678 1.5-1.5V9.0015h-2v4.50003c0 .286-.21467.5-.5.5H2.50345c-.28533 0-.5-.214-.5-.5V4.50148c0-.28533.21467-.5.5-.5h4.50002v-2H1.50345z' fill='rgba(102,102,102,0.999999)'/%3E%3C/svg%3E")}[class$="--dark"] .p-icon--external-link{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 16' width='16'%3E%3Cpath fill='none' d='M.00344.00146h16.00008v16.00008H.00344z'/%3E%3Cpath d='M8.58148 2.06814S12.20818.6308 15.99952-.0052c.002.00066.002.00066.002.002v.00598h.002c-.70734 3.96468-2.08 7.40603-2.08 7.40603l-5.34205-5.34z' fill='rgba(205,205,205,0.999999)'/%3E%3Cpath stroke-linejoin='round' d='M7.8708 8.12817l4.44537-4.4447' stroke='rgba(205,205,205,0.999999)' stroke-width='2.00001' fill='none'/%3E%3Cpath d='M1.50345 2.00147c-.822 0-1.5.678-1.5 1.5v11.00006c0 .822.678 1.5 1.5 1.5H12.5035c.822 0 1.5-.678 1.5-1.5V9.0015h-2v4.50003c0 .286-.21467.5-.5.5H2.50345c-.28533 0-.5-.214-.5-.5V4.50148c0-.28533.21467-.5.5-.5h4.50002v-2H1.50345z' fill='rgba(205,205,205,0.999999)'/%3E%3C/svg%3E")}.p-icon--contextual-menu{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='14' width='6' viewBox='0 0 6 14'%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cpath d='M-10-6h26v26h-26z'/%3E%3Cpath fill-rule='nonzero' fill='rgba(102,102,102,0.999999)' d='M0 0v2h6V0M0 6v2h6V6m-6 6v2h6v-2'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--contextual-menu{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='14' width='6' viewBox='0 0 6 14'%3E%3Cg fill-rule='evenodd' fill='none'%3E%3Cpath d='M-10-6h26v26h-26z'/%3E%3Cpath fill-rule='nonzero' fill='rgba(205,205,205,0.999999)' d='M0 0v2h6V0M0 6v2h6V6m-6 6v2h6v-2'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--menu{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='19' width='25' viewBox='0 0 79 60'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='rgba(102,102,102,0.999999)' d='M.995 0h78v12h-78zm0 24h78v12h-78zm0 24h78v12h-78z'/%3E%3Cpath d='M-5.005-15h90v90h-90z'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--menu{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='19' width='25' viewBox='0 0 79 60'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='rgba(205,205,205,0.999999)' d='M.995 0h78v12h-78zm0 24h78v12h-78zm0 24h78v12h-78z'/%3E%3Cpath d='M-5.005-15h90v90h-90z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--code{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E %3Cpath opacity='.21171' fill='none' d='M.00504.00156h16.00008v16.00008H.00504z'/%3E%3Cpath d='M2.67105 2.00157c-1.7778 0-2.666.0013-2.666 2.0684v8.86566c0 2.067.88823 2.066 2.666 2.066H13.3391c1.77802 0 2.66602.001 2.66602-2.066V4.13638c0-2.1334-.888-2.1348-2.666-2.1348H2.67104zm1.2793 1.8906h1.10162V5.0348c.3388.0282.6419.0778.9101.1484.2683.0636.4795.1279.6348.1914l-.2637 1.0469c-.2047-.0776-.4481-.152-.7304-.2226-.2754-.0706-.5931-.1055-.9532-.1055-.3812 0-.6687.0717-.8593.2129-.1906.1341-.2852.3205-.2852.5605 0 .1412.0275.2606.084.3594.0565.0918.1429.1763.2558.2539.113.0706.2498.1423.4122.2129.1623.0635.346.1306.5507.2012.2895.1129.5603.2323.8145.3594.2612.12.4871.2661.6777.4355.1906.1624.3394.3561.4453.582.113.2259.17.4941.17.8045 0 .466-.1442.86802-.4336 1.20702-.2895.339-.7661.558-1.4297.657v1.324h-1.1016v-1.293c-.5083-.036-.9225-.103-1.24022-.201-.3106-.106-.542-.201-.6973-.286l.3594-1.005c.2259.113.4968.214.8144.306.3248.092.6922.139 1.1016.139.4871 0 .82232-.072 1.00592-.213.1906-.148.2871-.342.2871-.582 0-.1624-.0396-.3039-.1172-.4239-.0777-.12-.1869-.2266-.3281-.3183-.1412-.0918-.3102-.1763-.5079-.2539-.1906-.0777-.4037-.1575-.6367-.2422-.2188-.0777-.4374-.16682-.6562-.26572-.2118-.0988-.40562-.2181-.58212-.3593-.1694-.1483-.3062-.3246-.4121-.5293s-.1601-.4555-.1601-.752c0-.4871.1461-.9014.4355-1.2402.2895-.3459.734-.5672 1.334-.666V3.89217zm4.05473 8.09545h3.99002v.996H8.00508v-.996z' fill='rgba(102,102,102,0.999999)'/%3E%3C/svg%3E")}[class$="--dark"] .p-icon--code{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E %3Cpath opacity='.21171' fill='none' d='M.00504.00156h16.00008v16.00008H.00504z'/%3E%3Cpath d='M2.67105 2.00157c-1.7778 0-2.666.0013-2.666 2.0684v8.86566c0 2.067.88823 2.066 2.666 2.066H13.3391c1.77802 0 2.66602.001 2.66602-2.066V4.13638c0-2.1334-.888-2.1348-2.666-2.1348H2.67104zm1.2793 1.8906h1.10162V5.0348c.3388.0282.6419.0778.9101.1484.2683.0636.4795.1279.6348.1914l-.2637 1.0469c-.2047-.0776-.4481-.152-.7304-.2226-.2754-.0706-.5931-.1055-.9532-.1055-.3812 0-.6687.0717-.8593.2129-.1906.1341-.2852.3205-.2852.5605 0 .1412.0275.2606.084.3594.0565.0918.1429.1763.2558.2539.113.0706.2498.1423.4122.2129.1623.0635.346.1306.5507.2012.2895.1129.5603.2323.8145.3594.2612.12.4871.2661.6777.4355.1906.1624.3394.3561.4453.582.113.2259.17.4941.17.8045 0 .466-.1442.86802-.4336 1.20702-.2895.339-.7661.558-1.4297.657v1.324h-1.1016v-1.293c-.5083-.036-.9225-.103-1.24022-.201-.3106-.106-.542-.201-.6973-.286l.3594-1.005c.2259.113.4968.214.8144.306.3248.092.6922.139 1.1016.139.4871 0 .82232-.072 1.00592-.213.1906-.148.2871-.342.2871-.582 0-.1624-.0396-.3039-.1172-.4239-.0777-.12-.1869-.2266-.3281-.3183-.1412-.0918-.3102-.1763-.5079-.2539-.1906-.0777-.4037-.1575-.6367-.2422-.2188-.0777-.4374-.16682-.6562-.26572-.2118-.0988-.40562-.2181-.58212-.3593-.1694-.1483-.3062-.3246-.4121-.5293s-.1601-.4555-.1601-.752c0-.4871.1461-.9014.4355-1.2402.2895-.3459.734-.5672 1.334-.666V3.89217zm4.05473 8.09545h3.99002v.996H8.00508v-.996z' fill='rgba(205,205,205,0.999999)'/%3E%3C/svg%3E")}.p-icon--copy{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='17' width='16' viewBox='0 0 16 17'%3E%3Cg fill='rgba(102,102,102,0.999999)' fill-rule='evenodd'%3E%3Cpath d='M10.587 1.8h3.259c.472 0 .846.053 1.161.1998s.567.4122.716.7478c.298.671.266 1.4917.277 2.6133V13.84c-.011 1.121.021 1.942-.277 2.613-.149.335-.401.6-.716.747s-.689.2-1.161.2H4.1537c-.4721 0-.8457-.053-1.1606-.2s-.5672-.412-.7163-.747c-.2461-.554-.2674-1.21-.2732-2.053h.8033c.0162.854.0576 1.428.1781 1.707.0717.166.1513.26.3355.348s.477.145.8967.145h9.5658c.42 0 .712-.057.897-.145.184-.088.263-.182.335-.348.143-.331.175-1.081.185-2.222V5.3093c-.01-1.1377-.042-1.8856-.185-2.2162-.072-.1657-.151-.2603-.335-.3484-.185-.0882-.477-.1447-.897-.1447h-3.538c.182-.2253.304-.5001.342-.8zm-3.1744 0c.038.2999.1601.5747.3417.8H4.2172c-.4197 0-.7125.0565-.8967.1447-.1842.0881-.2638.1828-.3355.3484-.1431.3307-.1746 1.0785-.185 2.2162V10.8H2V5.3609c.0104-1.1216-.0214-1.9423.2768-2.6133.1491-.3356.4014-.601.7163-.7478S3.6816 1.8 4.1537 1.8h3.2589z'/%3E%3Cpath fill-rule='nonzero' d='M11.3982 1.8v2.4009h-4.798V1.8h1.5997c0 .4469.353.8003.7992.8003.4463 0 .7997-.3534.7997-.8003h1.5994z'/%3E%3Cpath fill-rule='nonzero' d='M10.6 1.5996c0 .879-.7215 1.6-1.6002 1.6-.8788 0-1.5998-.721-1.5998-1.6C7.4.72063 8.121 0 8.9998 0 9.8785 0 10.6.72063 10.6 1.5996zm-.8002 0c0-.4464-.3533-.7996-.8-.7996-.4468 0-.8001.3532-.8001.7996 0 .4465.3533.8.8001.8.4467 0 .8-.3535.8-.8z'/%3E%3Cpath d='M8.4 7.2H14v1H8.4zm0 2.4H14v1H8.4zM10 12h4v1h-4z'/%3E%3Cpath fill-rule='nonzero' d='M4.40017 10s2.1338 1.0262 3.9998 2.5047h-.0029c-1.9683 1.5257-3.9971 2.4955-3.9971 2.4955L4.40014 10z'/%3E%3Cpath d='M0 11.6h4.4v2H0z'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--copy{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='17' width='16' viewBox='0 0 16 17'%3E%3Cg fill='rgba(205,205,205,0.999999)' fill-rule='evenodd'%3E%3Cpath d='M10.587 1.8h3.259c.472 0 .846.053 1.161.1998s.567.4122.716.7478c.298.671.266 1.4917.277 2.6133V13.84c-.011 1.121.021 1.942-.277 2.613-.149.335-.401.6-.716.747s-.689.2-1.161.2H4.1537c-.4721 0-.8457-.053-1.1606-.2s-.5672-.412-.7163-.747c-.2461-.554-.2674-1.21-.2732-2.053h.8033c.0162.854.0576 1.428.1781 1.707.0717.166.1513.26.3355.348s.477.145.8967.145h9.5658c.42 0 .712-.057.897-.145.184-.088.263-.182.335-.348.143-.331.175-1.081.185-2.222V5.3093c-.01-1.1377-.042-1.8856-.185-2.2162-.072-.1657-.151-.2603-.335-.3484-.185-.0882-.477-.1447-.897-.1447h-3.538c.182-.2253.304-.5001.342-.8zm-3.1744 0c.038.2999.1601.5747.3417.8H4.2172c-.4197 0-.7125.0565-.8967.1447-.1842.0881-.2638.1828-.3355.3484-.1431.3307-.1746 1.0785-.185 2.2162V10.8H2V5.3609c.0104-1.1216-.0214-1.9423.2768-2.6133.1491-.3356.4014-.601.7163-.7478S3.6816 1.8 4.1537 1.8h3.2589z'/%3E%3Cpath fill-rule='nonzero' d='M11.3982 1.8v2.4009h-4.798V1.8h1.5997c0 .4469.353.8003.7992.8003.4463 0 .7997-.3534.7997-.8003h1.5994z'/%3E%3Cpath fill-rule='nonzero' d='M10.6 1.5996c0 .879-.7215 1.6-1.6002 1.6-.8788 0-1.5998-.721-1.5998-1.6C7.4.72063 8.121 0 8.9998 0 9.8785 0 10.6.72063 10.6 1.5996zm-.8002 0c0-.4464-.3533-.7996-.8-.7996-.4468 0-.8001.3532-.8001.7996 0 .4465.3533.8.8001.8.4467 0 .8-.3535.8-.8z'/%3E%3Cpath d='M8.4 7.2H14v1H8.4zm0 2.4H14v1H8.4zM10 12h4v1h-4z'/%3E%3Cpath fill-rule='nonzero' d='M4.40017 10s2.1338 1.0262 3.9998 2.5047h-.0029c-1.9683 1.5257-3.9971 2.4955-3.9971 2.4955L4.40014 10z'/%3E%3Cpath d='M0 11.6h4.4v2H0z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--search{background-image:url("data:image/svg+xml,%3Csvg xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns='http://www.w3.org/2000/svg' xmlns:cc='http://creativecommons.org/ns%23' xmlns:dc='http://purl.org/dc/elements/1.1/' id='svg5918' height='16' viewBox='0 0 16 15.999999' width='16' version='1.1'%3E%3Cg id='layer1' transform='translate(-182.94 -560.72)'%3E%3Cg id='g5346' transform='translate(-769.06 404.36)'%3E%3Cg id='g4355' transform='matrix(.66667 0 0 .66667 877.33 -129.21)'%3E%3Crect id='rect4357' opacity='.05' style='color:%23000000' transform='scale(1,-1)' height='24' width='24' y='-452.36' x='112' fill='none'/%3E%3Cpath id='path4359' d='m129.93 444.03-2.2704 2.2732 6.07 6.0699l2.27-2.27z' fill='rgba(102,102,102,0.999999)'/%3E%3Cellipse id='ellipse4361' stroke-linejoin='round' stroke='rgba(102,102,102,0.999999)' d='m 131.97944,438.86221 a 9.4794664,9.4794722 0 0 1 -9.47946,9.47948 9.4794664,9.4794722 0 0 1 -9.47947,-9.47948 9.4794664,9.4794722 0 0 1 9.47947,-9.47947 9.4794664,9.4794722 0 0 1 9.47946,9.47947 z' rx='9.4795' ry='9.4795' cy='438.86' cx='122.5' stroke-linecap='round' stroke-width='2.041' fill='none'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--search{background-image:url("data:image/svg+xml,%3Csvg xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns='http://www.w3.org/2000/svg' xmlns:cc='http://creativecommons.org/ns%23' xmlns:dc='http://purl.org/dc/elements/1.1/' id='svg5918' height='16' viewBox='0 0 16 15.999999' width='16' version='1.1'%3E%3Cg id='layer1' transform='translate(-182.94 -560.72)'%3E%3Cg id='g5346' transform='translate(-769.06 404.36)'%3E%3Cg id='g4355' transform='matrix(.66667 0 0 .66667 877.33 -129.21)'%3E%3Crect id='rect4357' opacity='.05' style='color:%23000000' transform='scale(1,-1)' height='24' width='24' y='-452.36' x='112' fill='none'/%3E%3Cpath id='path4359' d='m129.93 444.03-2.2704 2.2732 6.07 6.0699l2.27-2.27z' fill='rgba(205,205,205,0.999999)'/%3E%3Cellipse id='ellipse4361' stroke-linejoin='round' stroke='rgba(205,205,205,0.999999)' d='m 131.97944,438.86221 a 9.4794664,9.4794722 0 0 1 -9.47946,9.47948 9.4794664,9.4794722 0 0 1 -9.47947,-9.47948 9.4794664,9.4794722 0 0 1 9.47947,-9.47947 9.4794664,9.4794722 0 0 1 9.47946,9.47947 z' rx='9.4795' ry='9.4795' cy='438.86' cx='122.5' stroke-linecap='round' stroke-width='2.041' fill='none'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}.p-icon--success,.p-icon--pass{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 17 17'%3E%3Cg transform='translate(1 1)' fill='none' fill-rule='evenodd'%3E%3Ccircle stroke='%230f8420' stroke-width='1.5' fill='%230f8420' cx='7.25001' cy='7.25001' r='7.25001'/%3E%3Cpath fill='%23fff' d='M11.0503 4.17345l-.0659.0577-4.73475 4.14722-2.77557-2.38094-.83906.94888 3.61532 3.80373L11.75 4.96278l-.6997-.7893'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--success,[class$="--dark"] .p-icon--pass{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 17 17'%3E%3Cg transform='translate(1 1)' fill='none' fill-rule='evenodd'%3E%3Ccircle stroke='%230f8420' stroke-width='1.5' fill='%230f8420' cx='7.25001' cy='7.25001' r='7.25001'/%3E%3Cpath fill='%23fff' d='M11.0503 4.17345l-.0659.0577-4.73475 4.14722-2.77557-2.38094-.83906.94888 3.61532 3.80373L11.75 4.96278l-.6997-.7893'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--share{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E %3Cg color='%23000'%3E%3Cpath style='block-progression:tb;text-decoration-line:none;text-indent:0;text-transform:none' d='M11.43043.01183c-.54808.024-1.08607.2379-1.50094.59685l-.9515.79772v.57328c0 .54444-.05096 1.03708-.15367 1.48908-.1027.452-.2868.83975-.54365 1.1582-.24655.32874-.57748.58174-.99868.7564-.4212.1849-.95268.27773-1.5896.27773-.6228 0-1.073-.0409-1.56896-.1123-.92847.5446-1.36282 1.3827-1.36282 2.4937s.52968 1.73186 1.36287 2.52913c.4423-.05295 1.0325-.07682 1.56895-.07682.6369 0 1.1684.09284 1.5896.27776.4212.1746.75213.42763.99866.7564.25683.3184.44093.70027.54365 1.15227.10274.452.15365.95054.15365 1.495v.41364l.9219.78c.48745.4409 1.15734.6736 1.8132.6298.65584-.0438 1.2888-.36366 1.7133-.86557.42444-.5019.63465-1.1792.56896-1.8332-.06566-.654-.4064-1.27594-.92213-1.6834l-.65002-.54956h-1.6959c-.4412 0-.8487-.06145-1.2291-.18316-.38035-.1141-.71126-.2985-.99273-.54956-.27386-.2434-.49027-.55332-.65002-.93368-.1597-.3728-.24224-.8182-.24224-1.3355 0-.51726.08256-.96694.2423-1.34734.15977-.38032.37618-.69027.65004-.9336.28146-.24346.6124-.42785.99274-.54956.38036-.1141.78787-.1713 1.22914-.17137h1.5364l.82144-.68547c.79765-.6458 1.11565-1.82208.75205-2.78188-.3637-.95974-1.38132-1.63-2.40665-1.58508z' fill='rgba(102,102,102,0.999999)'/%3E%3Cpath opacity='.1' fill='none' d='M-.00296.00516h16.00008v16.00008H-.00296z'/%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--share{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E %3Cg color='%23000'%3E%3Cpath style='block-progression:tb;text-decoration-line:none;text-indent:0;text-transform:none' d='M11.43043.01183c-.54808.024-1.08607.2379-1.50094.59685l-.9515.79772v.57328c0 .54444-.05096 1.03708-.15367 1.48908-.1027.452-.2868.83975-.54365 1.1582-.24655.32874-.57748.58174-.99868.7564-.4212.1849-.95268.27773-1.5896.27773-.6228 0-1.073-.0409-1.56896-.1123-.92847.5446-1.36282 1.3827-1.36282 2.4937s.52968 1.73186 1.36287 2.52913c.4423-.05295 1.0325-.07682 1.56895-.07682.6369 0 1.1684.09284 1.5896.27776.4212.1746.75213.42763.99866.7564.25683.3184.44093.70027.54365 1.15227.10274.452.15365.95054.15365 1.495v.41364l.9219.78c.48745.4409 1.15734.6736 1.8132.6298.65584-.0438 1.2888-.36366 1.7133-.86557.42444-.5019.63465-1.1792.56896-1.8332-.06566-.654-.4064-1.27594-.92213-1.6834l-.65002-.54956h-1.6959c-.4412 0-.8487-.06145-1.2291-.18316-.38035-.1141-.71126-.2985-.99273-.54956-.27386-.2434-.49027-.55332-.65002-.93368-.1597-.3728-.24224-.8182-.24224-1.3355 0-.51726.08256-.96694.2423-1.34734.15977-.38032.37618-.69027.65004-.9336.28146-.24346.6124-.42785.99274-.54956.38036-.1141.78787-.1713 1.22914-.17137h1.5364l.82144-.68547c.79765-.6458 1.11565-1.82208.75205-2.78188-.3637-.95974-1.38132-1.63-2.40665-1.58508z' fill='rgba(205,205,205,0.999999)'/%3E%3Cpath opacity='.1' fill='none' d='M-.00296.00516h16.00008v16.00008H-.00296z'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--user{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E%3Cpath opacity='.12' fill='none' color='%23000' d='M15.99712 15.99764V-.00244H-.00296v16.00008z'/%3E%3Cpath style='text-decoration-color:%23000000;font-variant-numeric:normal;text-decoration-line:none;font-variant-position:normal;mix-blend-mode:normal;block-progression:tb;font-feature-settings:normal;shape-padding:0;font-variant-alternates:normal;text-indent:0;font-variant-caps:normal;text-decoration-style:solid;font-variant-ligatures:normal;isolation:auto;text-transform:none' d='M8 0c-.58695 0-1.1418.10894-1.6514.3285-.5077.20905-.9549.5159-1.3285.9126h-.004c-.3639.39866-.64495.87812-.84373 1.426l-.0004.00078c-.201.54442-.2987 1.142-.2987 1.7858 0 .65375.0976 1.2568.2995 1.8026.1991.53846.4805 1.0121.84333 1.4094h.004c.24914.26457.53124.49022.84138.6767-.2581.0661-.70193.1437-.95618.2367-.87872.3216-1.6169.76604-2.1965 1.3342h-.004c-.57248.57683-1.0024 1.2577-1.2858 2.0294h-.00188c-.26293.76528-.39372 1.5885-.39372 2.4642v1.5719l13.956.022v-1.5719c0-.89103-.13914-1.7007-.41997-2.4673-.2675-.77566-.70083-1.4607-1.2918-2.0383-.57886-.56752-1.3161-1.0114-2.1935-1.3329h-.00085c-.24834-.0934-.68582-.1703-.93915-.2359.31-.18754.58985-.41474.83383-.68152.3734-.39722.66126-.87175.8608-1.4114.20188-.54586.2999-1.1489.2999-1.8026 0-.64467-.0984-1.243-.2999-1.7881-.19934-.54883-.48702-1.0289-.8616-1.4272-.36395-.3976-.8067-.70485-1.3138-.91377C9.14352.10993 8.58846.001 8.00116.001z' fill='rgba(102,102,102,0.999999)' color='%23000' solid-color='%23000000' white-space='normal'/%3E%3C/svg%3E")}[class$="--dark"] .p-icon--user{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='16' viewBox='0 0 16 15.999999' width='16'%3E%3Cpath opacity='.12' fill='none' color='%23000' d='M15.99712 15.99764V-.00244H-.00296v16.00008z'/%3E%3Cpath style='text-decoration-color:%23000000;font-variant-numeric:normal;text-decoration-line:none;font-variant-position:normal;mix-blend-mode:normal;block-progression:tb;font-feature-settings:normal;shape-padding:0;font-variant-alternates:normal;text-indent:0;font-variant-caps:normal;text-decoration-style:solid;font-variant-ligatures:normal;isolation:auto;text-transform:none' d='M8 0c-.58695 0-1.1418.10894-1.6514.3285-.5077.20905-.9549.5159-1.3285.9126h-.004c-.3639.39866-.64495.87812-.84373 1.426l-.0004.00078c-.201.54442-.2987 1.142-.2987 1.7858 0 .65375.0976 1.2568.2995 1.8026.1991.53846.4805 1.0121.84333 1.4094h.004c.24914.26457.53124.49022.84138.6767-.2581.0661-.70193.1437-.95618.2367-.87872.3216-1.6169.76604-2.1965 1.3342h-.004c-.57248.57683-1.0024 1.2577-1.2858 2.0294h-.00188c-.26293.76528-.39372 1.5885-.39372 2.4642v1.5719l13.956.022v-1.5719c0-.89103-.13914-1.7007-.41997-2.4673-.2675-.77566-.70083-1.4607-1.2918-2.0383-.57886-.56752-1.3161-1.0114-2.1935-1.3329h-.00085c-.24834-.0934-.68582-.1703-.93915-.2359.31-.18754.58985-.41474.83383-.68152.3734-.39722.66126-.87175.8608-1.4114.20188-.54586.2999-1.1489.2999-1.8026 0-.64467-.0984-1.243-.2999-1.7881-.19934-.54883-.48702-1.0289-.8616-1.4272-.36395-.3976-.8067-.70485-1.3138-.91377C9.14352.10993 8.58846.001 8.00116.001z' fill='rgba(205,205,205,0.999999)' color='%23000' solid-color='%23000000' white-space='normal'/%3E%3C/svg%3E")}.p-icon--question{background-image:url("data:image/svg+xml,%3Csvg xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns='http://www.w3.org/2000/svg' xmlns:cc='http://creativecommons.org/ns%23' xmlns:dc='http://purl.org/dc/elements/1.1/' id='svg5918' height='16' viewBox='0 0 16 15.999999' width='16' version='1.1'%3E%3Cg id='layer1' transform='translate(-182.94 -560.72)'%3E%3Cg id='g5346' transform='translate(-769.06 404.36)'%3E%3Cg id='g4401' transform='matrix(.66667 0 0 .66667 877.33 -315.88)'%3E%3Crect id='rect4403' style='color:%23000000' height='24' width='24' y='708.36' x='112' stroke-width='7.5' fill='none'/%3E%3Cpath id='path3229' stroke-linejoin='round' style='color:%23000000' d='m124 708.36c-6.6163 0-12 5.3837-12 12s5.3837 12 12 12 12-5.3837 12-12-5.3837-12-12-12z' stroke-linecap='round' stroke-width='1.875' fill='%23335280'/%3E%3Cpath id='path4405' d='m124.01 716.2q-0.64636 0-1.2373 0.16621-0.59095 0.14774-1.2373 0.49862l-0.62789-1.7175q0.68329-0.38781 1.5512-0.60942 0.88643-0.24007 1.8098-0.24007 1.108 0 1.8282 0.31394 0.72023 0.29548 1.145 0.75716 0.42475 0.46168 0.59095 1.0157 0.16621 0.55401 0.16621 1.0711 0 0.62788-0.24007 1.1265-0.22161 0.49861-0.57249 0.92336t-0.75715 0.81256q-0.40628 0.36934-0.75716 0.77562-0.35088 0.38781-0.59095 0.83103-0.22161 0.44321-0.22161 0.99723 0 0.0923 0 0.2216 0 0.11081 0.0185 0.22161h-1.9206q-0.0369-0.18467-0.0554-0.38781-0.0185-0.22161-0.0185-0.40628 0-0.60942 0.20314-1.0896 0.20314-0.48014 0.51708-0.88642t0.66482-0.75716q0.36934-0.35088 0.68329-0.70176 0.31394-0.35087 0.51708-0.72022 0.20314-0.36934 0.20314-0.81256 0-0.60941-0.42475-0.99723-0.40628-0.40628-1.2373-0.40628z' fill='%23fff'/%3E%3Cpath id='path4407' d='m125.48 726.37q0 0.64635-0.42474 1.0526-0.42475 0.40628-1.0526 0.40628-0.60942 0-1.0526-0.40628-0.42475-0.40628-0.42475-1.0526 0-0.64635 0.42475-1.0526 0.44321-0.42475 1.0526-0.42475 0.62789 0 1.0526 0.42475 0.42474 0.40628 0.42474 1.0526z' fill='%23fff'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}[class$="--dark"] .p-icon--question{background-image:url("data:image/svg+xml,%3Csvg xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns='http://www.w3.org/2000/svg' xmlns:cc='http://creativecommons.org/ns%23' xmlns:dc='http://purl.org/dc/elements/1.1/' id='svg5918' height='16' viewBox='0 0 16 15.999999' width='16' version='1.1'%3E%3Cg id='layer1' transform='translate(-182.94 -560.72)'%3E%3Cg id='g5346' transform='translate(-769.06 404.36)'%3E%3Cg id='g4401' transform='matrix(.66667 0 0 .66667 877.33 -315.88)'%3E%3Crect id='rect4403' style='color:%23000000' height='24' width='24' y='708.36' x='112' stroke-width='7.5' fill='none'/%3E%3Cpath id='path3229' stroke-linejoin='round' style='color:%23000000' d='m124 708.36c-6.6163 0-12 5.3837-12 12s5.3837 12 12 12 12-5.3837 12-12-5.3837-12-12-12z' stroke-linecap='round' stroke-width='1.875' fill='%23335280'/%3E%3Cpath id='path4405' d='m124.01 716.2q-0.64636 0-1.2373 0.16621-0.59095 0.14774-1.2373 0.49862l-0.62789-1.7175q0.68329-0.38781 1.5512-0.60942 0.88643-0.24007 1.8098-0.24007 1.108 0 1.8282 0.31394 0.72023 0.29548 1.145 0.75716 0.42475 0.46168 0.59095 1.0157 0.16621 0.55401 0.16621 1.0711 0 0.62788-0.24007 1.1265-0.22161 0.49861-0.57249 0.92336t-0.75715 0.81256q-0.40628 0.36934-0.75716 0.77562-0.35088 0.38781-0.59095 0.83103-0.22161 0.44321-0.22161 0.99723 0 0.0923 0 0.2216 0 0.11081 0.0185 0.22161h-1.9206q-0.0369-0.18467-0.0554-0.38781-0.0185-0.22161-0.0185-0.40628 0-0.60942 0.20314-1.0896 0.20314-0.48014 0.51708-0.88642t0.66482-0.75716q0.36934-0.35088 0.68329-0.70176 0.31394-0.35087 0.51708-0.72022 0.20314-0.36934 0.20314-0.81256 0-0.60941-0.42475-0.99723-0.40628-0.40628-1.2373-0.40628z' fill='%23fff'/%3E%3Cpath id='path4407' d='m125.48 726.37q0 0.64635-0.42474 1.0526-0.42475 0.40628-1.0526 0.40628-0.60942 0-1.0526-0.40628-0.42475-0.40628-0.42475-1.0526 0-0.64635 0.42475-1.0526 0.44321-0.42475 1.0526-0.42475 0.62789 0 1.0526 0.42475 0.42474 0.40628 0.42474 1.0526z' fill='%23fff'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}.p-icon--spinner{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' width='24' viewBox='0 0 24 24'%3E%3Ctitle%3Espinner-dark-grey%3C/title%3E%3Cpath d='M7.49 23.123c2.78 1.125 5.978 1.213 8.975 0 4.247-1.72 6.972-5.603 7.424-9.87l-1.136-.118c-.408 3.86-2.875 7.374-6.717 8.93-2.71 1.098-5.605 1.018-8.118 0l-.43 1.058zm-2.21-1.176c-1.913-1.29-3.475-3.148-4.404-5.45C-1.284 11.146.686 5.15 5.28 2.05l.638.946C1.76 5.802-.02 11.228 1.934 16.068c.84 2.086 2.254 3.766 3.985 4.933l-.64.947zm18.61-11.2c-.115-1.088-.38-2.178-.81-3.242-2.478-6.142-9.457-9.11-15.59-6.628l.43 1.057c5.546-2.245 11.86.44 14.103 5.998.388.963.63 1.95.733 2.933l1.134-.12z' fill='rgba(102,102,102,0.999999)' fill-rule='nonzero'/%3E%3C/svg%3E")}[class$="--dark"] .p-icon--spinner{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' width='24' viewBox='0 0 24 24'%3E%3Ctitle%3Espinner-dark-grey%3C/title%3E%3Cpath d='M7.49 23.123c2.78 1.125 5.978 1.213 8.975 0 4.247-1.72 6.972-5.603 7.424-9.87l-1.136-.118c-.408 3.86-2.875 7.374-6.717 8.93-2.71 1.098-5.605 1.018-8.118 0l-.43 1.058zm-2.21-1.176c-1.913-1.29-3.475-3.148-4.404-5.45C-1.284 11.146.686 5.15 5.28 2.05l.638.946C1.76 5.802-.02 11.228 1.934 16.068c.84 2.086 2.254 3.766 3.985 4.933l-.64.947zm18.61-11.2c-.115-1.088-.38-2.178-.81-3.242-2.478-6.142-9.457-9.11-15.59-6.628l.43 1.057c5.546-2.245 11.86.44 14.103 5.998.388.963.63 1.95.733 2.933l1.134-.12z' fill='rgba(205,205,205,0.999999)' fill-rule='nonzero'/%3E%3C/svg%3E")}.p-icon--facebook{background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9Ijk2cHgiIHdpZHRoPSI0MzJweCIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQzMiA5NiI+PCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ni4yICg0NDQ5NikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiA8dGl0bGU+dmFuaWxsYS1zb2NpYWwtc3ByaXRlPC90aXRsZT4KIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogPGRlZnM+CiAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICA8cG9seWdvbiBpZD0icGF0aC0zIiBwb2ludHM9IjAuMDA4ODg3MSAxOC4zNjcgMC4wMDg4ODcxIDAuMDA1OTI0OCAyNi4wNjkgMC4wMDU5MjQ4IDI2LjA2OSAxOC4zNjciLz4KICA8cG9seWdvbiBpZD0icGF0aC01IiBwb2ludHM9IjAgMjguNDc5IDI4LjQ3MyAyOC40NzkgMjguNDczIDAuMDA4OTg1NCAwIDAuMDA4OTg1NCIvPgogIDxjaXJjbGUgaWQ9InBhdGgtNyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgPHBvbHlnb24gaWQ9InBhdGgtOSIgcG9pbnRzPSIwLjAwODg4NzEgMTguMzY3IDAuMDA4ODg3MSAwLjAwNTkyNDggMjYuMDY5IDAuMDA1OTI0OCAyNi4wNjkgMTguMzY3Ii8+CiAgPHBvbHlnb24gaWQ9InBhdGgtMTEiIHBvaW50cz0iMCAyOC40NzkgMjguNDczIDI4LjQ3OSAyOC40NzMgMC4wMDg5ODU0IDAgMC4wMDg5ODU0Ii8+CiA8L2RlZnM+CiA8ZyBpZD0iUGFnZS0xIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9Im5vbmUiPgogIDxnIGlkPSJ2YW5pbGxhLXNvY2lhbC1zcHJpdGUiPgogICA8ZyBpZD0iZmFjZWJvay1jb3B5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDU2KSI+CiAgICA8ZyBpZD0icGF0aDQyNDEiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiLz4KICAgICA8L21hc2s+CiAgICAgPHVzZSBpZD0iTWFzayIgeGxpbms6aHJlZj0iI3BhdGgtMSIgZmlsbD0iIzNCNTk5OCIvPgogICAgIDxwYXRoIG1hc2s9InVybCgjbWFzay0yKSIgZD0ibTMwLjAzNyAxMC4wMDFjLTMuOTIgMC02LjYwMyAyLjQ0OS02LjYwMyA2Ljk0NXYzLjUyNmgtNC40MzR2NS4yNTVoNC40MzR2MTQuMjczYzEuODItMC4yNDYgMy42LTAuNzI4IDUuMjk5LTEuNDM4di0xMi44MzVoNC40MjRsMC42Ni01LjI1NWgtNS4wODR2LTMuMDAyYzAtMS41MjIgMC40NzktMy4wODUgMi41NS0yLjU2M2gyLjcxN3YtNC43Yy0wLjQ2OS0wLjA2NC0yLjA4NS0wLjIwNy0zLjk2My0wLjIwN3YwLjAwMXoiIGZpbGw9IiNmZmYiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM3NzI5NTMiIGQ9Im0zNTYgODguNzM1Yy03LjA0IDAtMTIuNzQtNS43LTEyLjc0LTEyLjczNiAwLTcuMDM0IDUuNy0xMi43MzQgMTIuNzQtMTIuNzM0czEyLjc0IDUuNyAxMi43NCAxMi43MzRjMCA3LjAzNi01LjcgMTIuNzM2LTEyLjc0IDEyLjczNnptMjAtMTIuNzM1YzAgMTEuMDQ1LTguOTUgMjAtMjAgMjBzLTIwLTguOTU1LTIwLTIwYzAtMTEuMDQ2IDguOTUtMjAgMjAtMjBzMjAgOC45NTQgMjAgMjB6bS0yMC0xNS4xMzVjLTguMzYgMC0xNS4xNCA2Ljc3Ny0xNS4xNCAxNS4xMzUgMCA4LjM2IDYuNzggMTUuMTM1IDE1LjE0IDE1LjEzNXMxNS4xNC02Ljc3NSAxNS4xNC0xNS4xMzVjMC04LjM1OC02Ljc4LTE1LjEzNS0xNS4xNC0xNS4xMzV6Ii8+CiAgIDxnIGlkPSJjb2Zfb3JhbmdlX2hleC1jb3B5LTIiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzkyIDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNFOTU0MjAiIGQ9Im0zOS45MDYgMjAuMDEzYzAgMTAuOTg3LTguOTA1IDE5Ljg5My0xOS44OTIgMTkuODkzLTEwLjk4NiAwLTE5Ljg5Mi04LjkwNi0xOS44OTItMTkuODkzLTAuMDAwMzItMTAuOTg2IDguOTA1OS0xOS44OTEgMTkuODkyLTE5Ljg5MSAxMC45ODctMC4wMDAzMiAxOS44OTIgOC45MDU0IDE5Ljg5MiAxOS44OTF6Ii8+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiIGQ9Im05LjY5MDIgMjAuMDEzYzAgMS40MTMtMS4xNDUxIDIuNTU4LTIuNTU4NiAyLjU1OC0xLjQxMTcgMC0yLjU1NjktMS4xNDUtMi41NTY5LTIuNTU4IDAtMS40MTIgMS4xNDUyLTIuNTU3IDIuNTU2OS0yLjU1NyAxLjQxMzUgMCAyLjU1ODYgMS4xNDUgMi41NTg2IDIuNTU3em0xNC41NTEgMTIuNDM2YzAuNzA2IDEuMjIzIDIuMjcgMS42NDIgMy40OTMgMC45MzZzMS42NDItMi4yNyAwLjkzNi0zLjQ5NGMtMC43MDYtMS4yMjMtMi4yNy0xLjY0MS0zLjQ5My0wLjkzNS0xLjIyMyAwLjcwNy0xLjY0MiAyLjI3LTAuOTM2IDMuNDkzem00LjQyOS0yMi4zMTNjMC43MDYtMS4yMjM0IDAuMjg4LTIuNzg3NC0wLjkzNi0zLjQ5MjktMS4yMjItMC43MDYzLTIuNzg3LTAuMjg3Mi0zLjQ5MyAwLjkzNTctMC43MDYgMS4yMjMyLTAuMjg3IDIuNzg3MiAwLjkzNiAzLjQ5MzJzMi43ODggMC4yODcgMy40OTMtMC45MzZ6bS04LjY1NiAyLjU4NGMzLjgxMSAwIDYuOTM4IDIuOTIyIDcuMjY1IDYuNjQ4bDMuNzAxLTAuMDU5Yy0wLjE3NS0yLjc2OC0xLjM3Ni01LjI1OC0zLjIyNy03LjA5NC0wLjk4IDAuMzc4LTIuMTE2IDAuMzI2LTMuMDk3LTAuMjQtMC45ODEtMC41NjctMS41OTQtMS41MjYtMS43NTYtMi41NjUzLTAuOTItMC4yNDk4LTEuODg4LTAuMzgzNi0yLjg4Ni0wLjM4MzYtMS43NSAwLTMuNDA0IDAuNDA5My00Ljg3NCAxLjEzNjlsMS44MDEgMy4yMzRjMC45MzQtMC40MzMgMS45NzYtMC42NzcgMy4wNzMtMC42Nzd6bS03LjI5NCA3LjI5M2MwLTIuNDY3IDEuMjI2LTQuNjQ4IDMuMTAyLTUuOTY3bC0xLjkwMS0zLjE3N2MtMi4yMDEgMS40Ny0zLjg0MSAzLjcxMi00LjUzMjQgNi4zNDEgMC44MTg0IDAuNjYgMS4zNDM0IDEuNjcgMS4zNDM0IDIuODAzIDAgMS4xMzUtMC41MjUgMi4xNDUtMS4zNDM0IDIuODA0IDAuNjkxNCAyLjYyOSAyLjMzMTQgNC44NzIgNC41MzI0IDYuMzQzbDEuOTAxLTMuMTc3Yy0xLjg3Ni0xLjMyLTMuMTAyLTMuNTAxLTMuMTAyLTUuOTd6bTcuMjk0IDcuMjk1Yy0xLjA5NyAwLTIuMTM5LTAuMjQ0LTMuMDczLTAuNjc4bC0xLjgwMSAzLjIzNGMxLjQ3IDAuNzI5IDMuMTI0IDEuMTM3IDQuODc0IDEuMTM3IDAuOTk4IDAgMS45NjYtMC4xMzIgMi44ODYtMC4zODMgMC4xNjItMS4wMzkgMC43NzUtMS45OTkgMS43NTYtMi41NjQgMC45ODEtMC41NjcgMi4xMTctMC42MTggMy4wOTctMC4yNCAxLjg1MS0xLjgzNyAzLjA1Mi00LjMyNyAzLjIyNy03LjA5NmwtMy43MDEtMC4wNThjLTAuMzI3IDMuNzI2LTMuNDU0IDYuNjQ4LTcuMjY1IDYuNjQ4eiIvPgogICA8L2c+CiAgIDxnIGlkPSJsaW5rZWRpbi1jb3B5LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNCA1NikiPgogICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiIGZpbGw9IiMwMDcxQTEiLz4KICAgIDxnIGlkPSJHcm91cC0yIiBmaWxsPSIjRkZGRkZFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4IDgpIj4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBkPSJtMy4wNjk2IDAuNDA1NzhjMS41MDY4IDAgMi43MzE3IDEuMjMzMSAyLjczMTcgMi43NTA5IDAgMS41MTkzLTEuMjI0OSAyLjc1MjQtMi43MzE3IDIuNzUyNC0xLjUxMDkgMC0yLjczMzUtMS4yMzMxLTIuNzMzNS0yLjc1MjQgMC4wMDAwMS0xLjUxNzggMS4yMjI2LTIuNzUwOSAyLjczMzUtMi43NTA5di0wLjAwMDAyem0tMi4zNTc5IDIyLjg2Mmg0LjcxMzd2LTE1LjI3MWwtNC43MTM3LTAuMDAwMyAwLjAwMDAyIDE1LjI3MXoiLz4KICAgICA8cGF0aCBpZD0iRmlsbC01IiBkPSJtOC4zODIgNy45OTY3aDQuNTIxdjIuMDg3M2gwLjA2M2MwLjYyOS0xLjIwMTEgMi4xNjctMi40NjY5IDQuNDYtMi40NjY5IDQuNzczIDAgNS42NTQgMy4xNjI5IDUuNjU0IDcuMjczOXY4LjM3N2gtNC43MXYtNy40MjZjMC0xLjc3MS0wLjAzMi00LjA0OS0yLjQ0OS00LjA0OS0yLjQ1MyAwLTIuODI5IDEuOTI5LTIuODI5IDMuOTJ2Ny41NTVoLTQuNzF2LTE1LjI3MSIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJ5b3V0dWJlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAgNTYpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjRDkyNTJBIi8+CiAgICA8ZyBpZD0ieXRfaWNvbl9yZ2IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgMTEpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTQiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMyIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay00KSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWdvbiBpZD0iRmlsbC00IiBwb2ludHM9IjE3LjE4MiA5LjE4MzUgMTAuMzY4IDUuMzA3MyAxMC4zNjggMTMuMDYiIGZpbGw9IiNEOTI1MkEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iZ29vZ2xlLXBsdXMtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNERDRCMzkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyLWNvcHkiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEyIDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjMURBMUYyIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJMb2dvX194MjAxNF9fRklYRUQiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguOSAxMS40KSI+CiAgICAgPHBhdGggaWQ9IlNoYXBlIiBkPSJtNy40NCAxOS4xNWM4Ljg3IDAgMTMuNzItNy4zNSAxMy43Mi0xMy43MiAwLTAuMjEgMC0wLjQyLTAuMDEtMC42MiAwLjk0LTAuNjggMS43Ni0xLjUzIDIuNDEtMi41LTAuODYgMC4zOC0xLjc5IDAuNjQtMi43NyAwLjc2IDEtMC42IDEuNzYtMS41NCAyLjEyLTIuNjctMC45MyAwLjU1LTEuOTYgMC45NS0zLjA2IDEuMTctMC44OC0wLjk0LTIuMTMtMS41Mi0zLjUyLTEuNTItMi42NiAwLTQuODIgMi4xNi00LjgyIDQuODIgMCAwLjM4IDAuMDQgMC43NSAwLjEzIDEuMS00LjAxLTAuMi03LjU2LTIuMTItOS45NC01LjA0LTAuNDEgMC43MS0wLjY1IDEuNTQtMC42NSAyLjQyIDAgMS42NyAwLjg1IDMuMTUgMi4xNSA0LjAxLTAuNzktMC4wMi0xLjUzLTAuMjQtMi4xOC0wLjZ2MC4wNmMwIDIuMzQgMS42NiA0LjI4IDMuODcgNC43My0wLjQgMC4xMS0wLjgzIDAuMTctMS4yNyAwLjE3LTAuMzEgMC0wLjYxLTAuMDMtMC45MS0wLjA5IDAuNjEgMS45MiAyLjM5IDMuMzEgNC41IDMuMzUtMS42NSAxLjI5LTMuNzMgMi4wNi01Ljk5IDIuMDYtMC4zOSAwLTAuNzctMC4wMi0xLjE1LTAuMDcgMi4xMSAxLjM4IDQuNjUgMi4xOCA3LjM3IDIuMTgiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iaW5zdGFncmFtLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjRkIzOTU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIvPgogICAgPC9nPgogICAgPGcgaWQ9Ikdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2IDYpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTYiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtNSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay02KSIgZD0ibTE0LjIzNyAwLjAwODk4NTRjLTMuODY3IDAtNC4zNTE3IDAuMDE2Mzg5LTUuODcwMSAwLjA4NTY3My0xLjUxNTQgMC4wNjkxMTItMi41NTAzIDAuMzA5OC0zLjQ1NTggMC42NjE3Ni0wLjkzNjIgMC4zNjM3OC0xLjczMDEgMC44NTA1OC0yLjUyMTcgMS42NDItMC43OTE0IDAuNzkxNS0xLjI3ODIgMS41ODU1LTEuNjQyIDIuNTIxNy0wLjM1MTkzIDAuOTA1NS0wLjU5MjYxIDEuOTQwNC0wLjY2MTczIDMuNDU1Ny0wLjA2OTI4MSAxLjUxODUtMC4wODU2NyAyLjAwMzItMC4wODU2NyA1Ljg3MDIgMCAzLjg2NiAwLjAxNjM4OSA0LjM1MSAwLjA4NTY3MiA1Ljg2OSAwLjA2OTExOCAxLjUxNiAwLjMwOTggMi41NTEgMC42NjE3NiAzLjQ1NiAwLjM2Mzc3IDAuOTM2IDAuODUwNTcgMS43MyAxLjY0MiAyLjUyMiAwLjc5MTYgMC43OTEgMS41ODU1IDEuMjc4IDIuNTIxNyAxLjY0MiAwLjkwNTUgMC4zNTIgMS45NDA0IDAuNTkyIDMuNDU1OCAwLjY2MSAxLjUxODQgMC4wNyAyLjAwMzEgMC4wODYgNS44NzAxIDAuMDg2IDMuODY2IDAgNC4zNTEtMC4wMTYgNS44NjktMC4wODYgMS41MTYtMC4wNjkgMi41NTEtMC4zMDkgMy40NTYtMC42NjEgMC45MzYtMC4zNjQgMS43My0wLjg1MSAyLjUyMi0xLjY0MiAwLjc5MS0wLjc5MiAxLjI3OC0xLjU4NiAxLjY0Mi0yLjUyMiAwLjM1Mi0wLjkwNSAwLjU5Mi0xLjk0IDAuNjYxLTMuNDU2IDAuMDctMS41MTggMC4wODYtMi4wMDMgMC4wODYtNS44NjkgMC0zLjg2Ny0wLjAxNi00LjM1MTctMC4wODYtNS44NzAyLTAuMDY5LTEuNTE1My0wLjMwOS0yLjU1MDItMC42NjEtMy40NTU3LTAuMzY0LTAuOTM2Mi0wLjg1MS0xLjczMDItMS42NDItMi41MjE3LTAuNzkyLTAuNzkxNC0xLjU4Ni0xLjI3ODItMi41MjItMS42NDItMC45MDUtMC4zNTE5NC0xLjk0LTAuNTkyNjMtMy40NTYtMC42NjE3NC0xLjUxOC0wLjA2OTI4Ni0yLjAwMy0wLjA4NTY3NS01Ljg2OS0wLjA4NTY3NXptMCAyLjU2NTFjMy44MDEgMCA0LjI1MSAwLjAxNDYgNS43NTIgMC4wODMgMS4zODggMC4wNjMzIDIuMTQyIDAuMjk1MyAyLjY0NCAwLjQ5MDIgMC42NjQgMC4yNTgzIDEuMTM5IDAuNTY2OCAxLjYzNyAxLjA2NXMwLjgwNyAwLjk3MjQgMS4wNjUgMS42MzY5YzAuMTk1IDAuNTAxNyAwLjQyNyAxLjI1NTUgMC40OSAyLjY0MzYgMC4wNjggMS41MDEyIDAuMDgzIDEuOTUxMiAwLjA4MyA1Ljc1MzIgMCAzLjgwMS0wLjAxNSA0LjI1MS0wLjA4MyA1Ljc1Mi0wLjA2MyAxLjM4OC0wLjI5NSAyLjE0Mi0wLjQ5IDIuNjQ0LTAuMjU4IDAuNjY0LTAuNTY3IDEuMTM5LTEuMDY1IDEuNjM3cy0wLjk3MyAwLjgwNy0xLjYzNyAxLjA2NWMtMC41MDIgMC4xOTUtMS4yNTYgMC40MjctMi42NDQgMC40OS0xLjUwMSAwLjA2OC0xLjk1MSAwLjA4My01Ljc1MiAwLjA4My0zLjgwMiAwLTQuMjUyMi0wLjAxNS01Ljc1MzItMC4wODMtMS4zODgxLTAuMDYzLTIuMTQxOS0wLjI5NS0yLjY0MzUtMC40OS0wLjY2NDYtMC4yNTgtMS4xMzg4LTAuNTY3LTEuNjM3LTEuMDY1LTAuNDk4MS0wLjQ5OC0wLjgwNjctMC45NzMtMS4wNjUtMS42MzctMC4xOTQ5LTAuNTAyLTAuNDI2OC0xLjI1Ni0wLjQ5MDEtMi42NDQtMC4wNjg1LTEuNTAxLTAuMDgzMS0xLjk1MS0wLjA4MzEtNS43NTIgMC0zLjgwMiAwLjAxNDYtNC4yNTIgMC4wODMxLTUuNzUzMiAwLjA2MzMtMS4zODgxIDAuMjk1Mi0yLjE0MTkgMC40OTAxLTIuNjQzNiAwLjI1ODMtMC42NjQ1IDAuNTY2OC0xLjEzODcgMS4wNjUtMS42MzY5czAuOTcyNC0wLjgwNjcgMS42MzctMS4wNjVjMC41MDE2LTAuMTk0OSAxLjI1NTQtMC40MjY5IDIuNjQzNS0wLjQ5MDIgMS41MDEyLTAuMDY4NCAxLjk1MTItMC4wODMgNS43NTMyLTAuMDgzeiIvPgogICAgIDwvZz4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBmaWxsPSIjZmZmIiBkPSJtMTQuMjQgMTguOTkxYy0yLjYyMSAwLTQuNzQ1OS0yLjEyNS00Ljc0NTktNC43NDUgMC0yLjYyMSAyLjEyNDktNC43NDYgNC43NDU5LTQuNzQ2IDIuNjIgMCA0Ljc0NSAyLjEyNSA0Ljc0NSA0Ljc0NiAwIDIuNjItMi4xMjUgNC43NDUtNC43NDUgNC43NDV6bTAtMTIuMDU2Yy00LjAzOCAwLTcuMzExMSAzLjI3MzEtNy4zMTExIDcuMzExMSAwIDQuMDM3IDMuMjczMSA3LjMxIDcuMzExMSA3LjMxIDQuMDM3IDAgNy4zMS0zLjI3MyA3LjMxLTcuMzEgMC00LjAzOC0zLjI3My03LjMxMTEtNy4zMS03LjMxMTF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZmlsbD0iI2ZmZiIgZD0ibTIzLjU0MSA2LjY0NjFjMCAwLjk0MzUtMC43NjUgMS43MDgzLTEuNzA5IDEuNzA4My0wLjk0MyAwLTEuNzA4LTAuNzY0OC0xLjcwOC0xLjcwODMgMC0wLjk0MzYgMC43NjUtMS43MDg1IDEuNzA4LTEuNzA4NSAwLjk0NCAwIDEuNzA5IDAuNzY0OSAxLjcwOSAxLjcwODUiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQiIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iIzY2NiIgZD0ibTM1NiAzMi43MzVjLTcuMDQgMC0xMi43NC01LjctMTIuNzQtMTIuNzM2IDAtNy4wMzQgNS43LTEyLjczNCAxMi43NC0xMi43MzQgNy4wNC0wLjAwMDUgMTIuNzQgNS43IDEyLjc0IDEyLjczNCAwIDcuMDM2LTUuNyAxMi43MzYtMTIuNzQgMTIuNzM2em0yMC0xMi43MzVjMCAxMS4wNDUtOC45NSAyMC0yMCAyMHMtMjAtOC45NTUtMjAtMjBjMC0xMS4wNDYgOC45NS0yMCAyMC0yMHMyMCA4Ljk1MzYgMjAgMjB6bS0yMC0xNS4xMzRjLTguMzYgMC0xNS4xNCA2Ljc3NjUtMTUuMTQgMTUuMTM0IDAgOC4zNiA2Ljc4IDE1LjEzNSAxNS4xNCAxNS4xMzVzMTUuMTQtNi43NzUgMTUuMTQtMTUuMTM1YzAtOC4zNTgtNi43OC0xNS4xMzQtMTUuMTQtMTUuMTM0eiIvPgogICA8ZyBpZD0iY29mX29yYW5nZV9oZXgtY29weSIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTIpIj4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iIzY2NiIgZD0ibTM5LjkwNiAyMC4wMTNjMCAxMC45ODctOC45MDUgMTkuODkzLTE5Ljg5MiAxOS44OTMtMTAuOTg2IDAtMTkuODkyLTguOTA2LTE5Ljg5Mi0xOS44OTMtMC4wMDAzMi0xMC45ODYgOC45MDU5LTE5Ljg5MSAxOS44OTItMTkuODkxIDEwLjk4Ny0wLjAwMDMyIDE5Ljg5MiA4LjkwNTQgMTkuODkyIDE5Ljg5MXoiLz4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iI2ZmZiIgZD0ibTkuNjkwMiAyMC4wMTNjMCAxLjQxMy0xLjE0NTEgMi41NTgtMi41NTg2IDIuNTU4LTEuNDExNyAwLTIuNTU2OS0xLjE0NS0yLjU1NjktMi41NTggMC0xLjQxMiAxLjE0NTItMi41NTcgMi41NTY5LTIuNTU3IDEuNDEzNSAwIDIuNTU4NiAxLjE0NSAyLjU1ODYgMi41NTd6bTE0LjU1MSAxMi40MzZjMC43MDYgMS4yMjMgMi4yNyAxLjY0MiAzLjQ5MyAwLjkzNnMxLjY0Mi0yLjI3IDAuOTM2LTMuNDk0Yy0wLjcwNi0xLjIyMy0yLjI3LTEuNjQxLTMuNDkzLTAuOTM1LTEuMjIzIDAuNzA3LTEuNjQyIDIuMjctMC45MzYgMy40OTN6bTQuNDI5LTIyLjMxM2MwLjcwNi0xLjIyMzQgMC4yODgtMi43ODc0LTAuOTM2LTMuNDkyOS0xLjIyMi0wLjcwNjMtMi43ODctMC4yODcyLTMuNDkzIDAuOTM1Ny0wLjcwNiAxLjIyMzItMC4yODcgMi43ODcyIDAuOTM2IDMuNDkzMnMyLjc4OCAwLjI4NyAzLjQ5My0wLjkzNnptLTguNjU2IDIuNTg0YzMuODExIDAgNi45MzggMi45MjIgNy4yNjUgNi42NDhsMy43MDEtMC4wNTljLTAuMTc1LTIuNzY4LTEuMzc2LTUuMjU4LTMuMjI3LTcuMDk0LTAuOTggMC4zNzgtMi4xMTYgMC4zMjYtMy4wOTctMC4yNC0wLjk4MS0wLjU2Ny0xLjU5NC0xLjUyNi0xLjc1Ni0yLjU2NTMtMC45Mi0wLjI0OTgtMS44ODgtMC4zODM2LTIuODg2LTAuMzgzNi0xLjc1IDAtMy40MDQgMC40MDkzLTQuODc0IDEuMTM2OWwxLjgwMSAzLjIzNGMwLjkzNC0wLjQzMyAxLjk3Ni0wLjY3NyAzLjA3My0wLjY3N3ptLTcuMjk0IDcuMjkzYzAtMi40NjcgMS4yMjYtNC42NDggMy4xMDItNS45NjdsLTEuOTAxLTMuMTc3Yy0yLjIwMSAxLjQ3LTMuODQxIDMuNzEyLTQuNTMyNCA2LjM0MSAwLjgxODQgMC42NiAxLjM0MzQgMS42NyAxLjM0MzQgMi44MDMgMCAxLjEzNS0wLjUyNSAyLjE0NS0xLjM0MzQgMi44MDQgMC42OTE0IDIuNjI5IDIuMzMxNCA0Ljg3MiA0LjUzMjQgNi4zNDNsMS45MDEtMy4xNzdjLTEuODc2LTEuMzItMy4xMDItMy41MDEtMy4xMDItNS45N3ptNy4yOTQgNy4yOTVjLTEuMDk3IDAtMi4xMzktMC4yNDQtMy4wNzMtMC42NzhsLTEuODAxIDMuMjM0YzEuNDcgMC43MjkgMy4xMjQgMS4xMzcgNC44NzQgMS4xMzcgMC45OTggMCAxLjk2Ni0wLjEzMiAyLjg4Ni0wLjM4MyAwLjE2Mi0xLjAzOSAwLjc3NS0xLjk5OSAxLjc1Ni0yLjU2NCAwLjk4MS0wLjU2NyAyLjExNy0wLjYxOCAzLjA5Ny0wLjI0IDEuODUxLTEuODM3IDMuMDUyLTQuMzI3IDMuMjI3LTcuMDk2bC0zLjcwMS0wLjA1OGMtMC4zMjcgMy43MjYtMy40NTQgNi42NDgtNy4yNjUgNi42NDh6Ii8+CiAgIDwvZz4KICAgPGcgaWQ9Imdvb2dsZS1wbHVzIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM2NjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMikiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiI+CiAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0iTG9nb19feDIwMTRfX0ZJWEVEIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjkgMTEuNCkiPgogICAgIDxwYXRoIGlkPSJTaGFwZSIgZD0ibTcuNDQgMTkuMTVjOC44NyAwIDEzLjcyLTcuMzUgMTMuNzItMTMuNzIgMC0wLjIxIDAtMC40Mi0wLjAxLTAuNjIgMC45NC0wLjY4IDEuNzYtMS41MyAyLjQxLTIuNS0wLjg2IDAuMzgtMS43OSAwLjY0LTIuNzcgMC43NiAxLTAuNiAxLjc2LTEuNTQgMi4xMi0yLjY3LTAuOTMgMC41NS0xLjk2IDAuOTUtMy4wNiAxLjE3LTAuODgtMC45NC0yLjEzLTEuNTItMy41Mi0xLjUyLTIuNjYgMC00LjgyIDIuMTYtNC44MiA0LjgyIDAgMC4zOCAwLjA0IDAuNzUgMC4xMyAxLjEtNC4wMS0wLjItNy41Ni0yLjEyLTkuOTQtNS4wNC0wLjQxIDAuNzEtMC42NSAxLjU0LTAuNjUgMi40MiAwIDEuNjcgMC44NSAzLjE1IDIuMTUgNC4wMS0wLjc5LTAuMDItMS41My0wLjI0LTIuMTgtMC42djAuMDZjMCAyLjM0IDEuNjYgNC4yOCAzLjg3IDQuNzMtMC40IDAuMTEtMC44MyAwLjE3LTEuMjcgMC4xNy0wLjMxIDAtMC42MS0wLjAzLTAuOTEtMC4wOSAwLjYxIDEuOTIgMi4zOSAzLjMxIDQuNSAzLjM1LTEuNjUgMS4yOS0zLjczIDIuMDYtNS45OSAyLjA2LTAuMzkgMC0wLjc3LTAuMDItMS4xNS0wLjA3IDIuMTEgMS4zOCA0LjY1IDIuMTggNy4zNyAyLjE4Ii8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImZhY2Vib2siPgogICAgPGcgaWQ9InBhdGg0MjQxIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxtYXNrIGlkPSJtYXNrLTgiIGZpbGw9IndoaXRlIj4KICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC03Ii8+CiAgICAgPC9tYXNrPgogICAgIDx1c2UgaWQ9Ik1hc2siIHhsaW5rOmhyZWY9IiNwYXRoLTciIGZpbGw9IiM2NjY2NjYiLz4KICAgICA8cGF0aCBtYXNrPSJ1cmwoI21hc2stOCkiIGQ9Im0zMC4wMzcgMTAuMDAxYy0zLjkyIDAtNi42MDMgMi40NDktNi42MDMgNi45NDV2My41MjZoLTQuNDM0djUuMjU1aDQuNDM0djE0LjI3M2MxLjgyLTAuMjQ2IDMuNi0wLjcyOCA1LjI5OS0xLjQzOHYtMTIuODM1aDQuNDI0bDAuNjYtNS4yNTVoLTUuMDg0di0zLjAwMmMwLTEuNTIyIDAuNDc5LTMuMDg1IDIuNTUtMi41NjNoMi43MTd2LTQuN2MtMC40NjktMC4wNjQtMi4wODUtMC4yMDctMy45NjMtMC4yMDd2MC4wMDF6IiBmaWxsPSIjZmZmIi8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImxpbmtlZGluIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjQpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjNjY2Ii8+CiAgICA8ZyBpZD0iR3JvdXAtMiIgZmlsbD0iI0ZGRkZGRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSI+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZD0ibTMuMDY5NiAwLjQwNTc4YzEuNTA2OCAwIDIuNzMxNyAxLjIzMzEgMi43MzE3IDIuNzUwOSAwIDEuNTE5My0xLjIyNDkgMi43NTI0LTIuNzMxNyAyLjc1MjQtMS41MTA5IDAtMi43MzM1LTEuMjMzMS0yLjczMzUtMi43NTI0IDAuMDAwMDEtMS41MTc4IDEuMjIyNi0yLjc1MDkgMi43MzM1LTIuNzUwOXYtMC4wMDAwMnptLTIuMzU3OSAyMi44NjJoNC43MTM3di0xNS4yNzFsLTQuNzEzNy0wLjAwMDMgMC4wMDAwMiAxNS4yNzF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZD0ibTguMzgyIDcuOTk2N2g0LjUyMXYyLjA4NzNoMC4wNjNjMC42MjktMS4yMDExIDIuMTY3LTIuNDY2OSA0LjQ2LTIuNDY2OSA0Ljc3MyAwIDUuNjU0IDMuMTYyOSA1LjY1NCA3LjI3Mzl2OC4zNzdoLTQuNzF2LTcuNDI2YzAtMS43NzEtMC4wMzItNC4wNDktMi40NDktNC4wNDktMi40NTMgMC0yLjgyOSAxLjkyOS0yLjgyOSAzLjkydjcuNTU1aC00Ljcxdi0xNS4yNzEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0ieW91dHViZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwKSI+CiAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIgZmlsbD0iIzY2NiIvPgogICAgPGcgaWQ9Inl0X2ljb25fcmdiIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3IDExKSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMCIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC05Ii8+CiAgICAgIDwvbWFzaz4KICAgICAgPHBhdGggaWQ9IkZpbGwtMSIgZmlsbD0iI2ZmZiIgbWFzaz0idXJsKCNtYXNrLTEwKSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWxpbmUgaWQ9IkZpbGwtNCIgcG9pbnRzPSIxMC4zNjggMTMuMDYgMTcuMTgyIDkuMTgzNSAxMC4zNjggNS4zMDczIDEwLjM2OCAxMy4wNiIgZmlsbD0iIzY2NiIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJpbnN0YWdyYW0iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OCkiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMiIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xMSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay0xMikiIGQ9Im0xNC4yMzcgMC4wMDg5ODU0Yy0zLjg2NyAwLTQuMzUxNyAwLjAxNjM4OS01Ljg3MDEgMC4wODU2NzMtMS41MTU0IDAuMDY5MTEyLTIuNTUwMyAwLjMwOTgtMy40NTU4IDAuNjYxNzYtMC45MzYyIDAuMzYzNzgtMS43MzAxIDAuODUwNTgtMi41MjE3IDEuNjQyLTAuNzkxNCAwLjc5MTUtMS4yNzgyIDEuNTg1NS0xLjY0MiAyLjUyMTctMC4zNTE5MyAwLjkwNTUtMC41OTI2MSAxLjk0MDQtMC42NjE3MyAzLjQ1NTctMC4wNjkyODEgMS41MTg1LTAuMDg1NjcgMi4wMDMyLTAuMDg1NjcgNS44NzAyIDAgMy44NjYgMC4wMTYzODkgNC4zNTEgMC4wODU2NzIgNS44NjkgMC4wNjkxMTggMS41MTYgMC4zMDk4IDIuNTUxIDAuNjYxNzYgMy40NTYgMC4zNjM3NyAwLjkzNiAwLjg1MDU3IDEuNzMgMS42NDIgMi41MjIgMC43OTE2IDAuNzkxIDEuNTg1NSAxLjI3OCAyLjUyMTcgMS42NDIgMC45MDU1IDAuMzUyIDEuOTQwNCAwLjU5MiAzLjQ1NTggMC42NjEgMS41MTg0IDAuMDcgMi4wMDMxIDAuMDg2IDUuODcwMSAwLjA4NiAzLjg2NiAwIDQuMzUxLTAuMDE2IDUuODY5LTAuMDg2IDEuNTE2LTAuMDY5IDIuNTUxLTAuMzA5IDMuNDU2LTAuNjYxIDAuOTM2LTAuMzY0IDEuNzMtMC44NTEgMi41MjItMS42NDIgMC43OTEtMC43OTIgMS4yNzgtMS41ODYgMS42NDItMi41MjIgMC4zNTItMC45MDUgMC41OTItMS45NCAwLjY2MS0zLjQ1NiAwLjA3LTEuNTE4IDAuMDg2LTIuMDAzIDAuMDg2LTUuODY5IDAtMy44NjctMC4wMTYtNC4zNTE3LTAuMDg2LTUuODcwMi0wLjA2OS0xLjUxNTMtMC4zMDktMi41NTAyLTAuNjYxLTMuNDU1Ny0wLjM2NC0wLjkzNjItMC44NTEtMS43MzAyLTEuNjQyLTIuNTIxNy0wLjc5Mi0wLjc5MTQtMS41ODYtMS4yNzgyLTIuNTIyLTEuNjQyLTAuOTA1LTAuMzUxOTQtMS45NC0wLjU5MjYzLTMuNDU2LTAuNjYxNzQtMS41MTgtMC4wNjkyODYtMi4wMDMtMC4wODU2NzUtNS44NjktMC4wODU2NzV6bTAgMi41NjUxYzMuODAxIDAgNC4yNTEgMC4wMTQ2IDUuNzUyIDAuMDgzIDEuMzg4IDAuMDYzMyAyLjE0MiAwLjI5NTMgMi42NDQgMC40OTAyIDAuNjY0IDAuMjU4MyAxLjEzOSAwLjU2NjggMS42MzcgMS4wNjVzMC44MDcgMC45NzI0IDEuMDY1IDEuNjM2OWMwLjE5NSAwLjUwMTcgMC40MjcgMS4yNTU1IDAuNDkgMi42NDM2IDAuMDY4IDEuNTAxMiAwLjA4MyAxLjk1MTIgMC4wODMgNS43NTMyIDAgMy44MDEtMC4wMTUgNC4yNTEtMC4wODMgNS43NTItMC4wNjMgMS4zODgtMC4yOTUgMi4xNDItMC40OSAyLjY0NC0wLjI1OCAwLjY2NC0wLjU2NyAxLjEzOS0xLjA2NSAxLjYzN3MtMC45NzMgMC44MDctMS42MzcgMS4wNjVjLTAuNTAyIDAuMTk1LTEuMjU2IDAuNDI3LTIuNjQ0IDAuNDktMS41MDEgMC4wNjgtMS45NTEgMC4wODMtNS43NTIgMC4wODMtMy44MDIgMC00LjI1MjItMC4wMTUtNS43NTMyLTAuMDgzLTEuMzg4MS0wLjA2My0yLjE0MTktMC4yOTUtMi42NDM1LTAuNDktMC42NjQ2LTAuMjU4LTEuMTM4OC0wLjU2Ny0xLjYzNy0xLjA2NS0wLjQ5ODEtMC40OTgtMC44MDY3LTAuOTczLTEuMDY1LTEuNjM3LTAuMTk0OS0wLjUwMi0wLjQyNjgtMS4yNTYtMC40OTAxLTIuNjQ0LTAuMDY4NS0xLjUwMS0wLjA4MzEtMS45NTEtMC4wODMxLTUuNzUyIDAtMy44MDIgMC4wMTQ2LTQuMjUyIDAuMDgzMS01Ljc1MzIgMC4wNjMzLTEuMzg4MSAwLjI5NTItMi4xNDE5IDAuNDkwMS0yLjY0MzYgMC4yNTgzLTAuNjY0NSAwLjU2NjgtMS4xMzg3IDEuMDY1LTEuNjM2OXMwLjk3MjQtMC44MDY3IDEuNjM3LTEuMDY1YzAuNTAxNi0wLjE5NDkgMS4yNTU0LTAuNDI2OSAyLjY0MzUtMC40OTAyIDEuNTAxMi0wLjA2ODQgMS45NTEyLTAuMDgzIDUuNzUzMi0wLjA4M3oiLz4KICAgICA8L2c+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZmlsbD0iI2ZmZiIgZD0ibTE0LjI0IDE4Ljk5MWMtMi42MjEgMC00Ljc0NTktMi4xMjUtNC43NDU5LTQuNzQ1IDAtMi42MjEgMi4xMjQ5LTQuNzQ2IDQuNzQ1OS00Ljc0NiAyLjYyIDAgNC43NDUgMi4xMjUgNC43NDUgNC43NDYgMCAyLjYyLTIuMTI1IDQuNzQ1LTQuNzQ1IDQuNzQ1em0wLTEyLjA1NmMtNC4wMzggMC03LjMxMTEgMy4yNzMxLTcuMzExMSA3LjMxMTEgMCA0LjAzNyAzLjI3MzEgNy4zMSA3LjMxMTEgNy4zMSA0LjAzNyAwIDcuMzEtMy4yNzMgNy4zMS03LjMxIDAtNC4wMzgtMy4yNzMtNy4zMTExLTcuMzEtNy4zMTExeiIvPgogICAgIDxwYXRoIGlkPSJGaWxsLTUiIGZpbGw9IiNmZmYiIGQ9Im0yMy41NDEgNi42NDYxYzAgMC45NDM1LTAuNzY1IDEuNzA4My0xLjcwOSAxLjcwODMtMC45NDMgMC0xLjcwOC0wLjc2NDgtMS43MDgtMS43MDgzIDAtMC45NDM2IDAuNzY1LTEuNzA4NSAxLjcwOC0xLjcwODUgMC45NDQgMCAxLjcwOSAwLjc2NDkgMS43MDkgMS43MDg1Ii8+CiAgICA8L2c+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=");background-size:430px 96px;height:42px;width:42px;background-position:0 0}.p-icon--facebook:hover{background-position-y:-56px}.p-icon--google{background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9Ijk2cHgiIHdpZHRoPSI0MzJweCIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQzMiA5NiI+PCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ni4yICg0NDQ5NikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiA8dGl0bGU+dmFuaWxsYS1zb2NpYWwtc3ByaXRlPC90aXRsZT4KIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogPGRlZnM+CiAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICA8cG9seWdvbiBpZD0icGF0aC0zIiBwb2ludHM9IjAuMDA4ODg3MSAxOC4zNjcgMC4wMDg4ODcxIDAuMDA1OTI0OCAyNi4wNjkgMC4wMDU5MjQ4IDI2LjA2OSAxOC4zNjciLz4KICA8cG9seWdvbiBpZD0icGF0aC01IiBwb2ludHM9IjAgMjguNDc5IDI4LjQ3MyAyOC40NzkgMjguNDczIDAuMDA4OTg1NCAwIDAuMDA4OTg1NCIvPgogIDxjaXJjbGUgaWQ9InBhdGgtNyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgPHBvbHlnb24gaWQ9InBhdGgtOSIgcG9pbnRzPSIwLjAwODg4NzEgMTguMzY3IDAuMDA4ODg3MSAwLjAwNTkyNDggMjYuMDY5IDAuMDA1OTI0OCAyNi4wNjkgMTguMzY3Ii8+CiAgPHBvbHlnb24gaWQ9InBhdGgtMTEiIHBvaW50cz0iMCAyOC40NzkgMjguNDczIDI4LjQ3OSAyOC40NzMgMC4wMDg5ODU0IDAgMC4wMDg5ODU0Ii8+CiA8L2RlZnM+CiA8ZyBpZD0iUGFnZS0xIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9Im5vbmUiPgogIDxnIGlkPSJ2YW5pbGxhLXNvY2lhbC1zcHJpdGUiPgogICA8ZyBpZD0iZmFjZWJvay1jb3B5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDU2KSI+CiAgICA8ZyBpZD0icGF0aDQyNDEiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiLz4KICAgICA8L21hc2s+CiAgICAgPHVzZSBpZD0iTWFzayIgeGxpbms6aHJlZj0iI3BhdGgtMSIgZmlsbD0iIzNCNTk5OCIvPgogICAgIDxwYXRoIG1hc2s9InVybCgjbWFzay0yKSIgZD0ibTMwLjAzNyAxMC4wMDFjLTMuOTIgMC02LjYwMyAyLjQ0OS02LjYwMyA2Ljk0NXYzLjUyNmgtNC40MzR2NS4yNTVoNC40MzR2MTQuMjczYzEuODItMC4yNDYgMy42LTAuNzI4IDUuMjk5LTEuNDM4di0xMi44MzVoNC40MjRsMC42Ni01LjI1NWgtNS4wODR2LTMuMDAyYzAtMS41MjIgMC40NzktMy4wODUgMi41NS0yLjU2M2gyLjcxN3YtNC43Yy0wLjQ2OS0wLjA2NC0yLjA4NS0wLjIwNy0zLjk2My0wLjIwN3YwLjAwMXoiIGZpbGw9IiNmZmYiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM3NzI5NTMiIGQ9Im0zNTYgODguNzM1Yy03LjA0IDAtMTIuNzQtNS43LTEyLjc0LTEyLjczNiAwLTcuMDM0IDUuNy0xMi43MzQgMTIuNzQtMTIuNzM0czEyLjc0IDUuNyAxMi43NCAxMi43MzRjMCA3LjAzNi01LjcgMTIuNzM2LTEyLjc0IDEyLjczNnptMjAtMTIuNzM1YzAgMTEuMDQ1LTguOTUgMjAtMjAgMjBzLTIwLTguOTU1LTIwLTIwYzAtMTEuMDQ2IDguOTUtMjAgMjAtMjBzMjAgOC45NTQgMjAgMjB6bS0yMC0xNS4xMzVjLTguMzYgMC0xNS4xNCA2Ljc3Ny0xNS4xNCAxNS4xMzUgMCA4LjM2IDYuNzggMTUuMTM1IDE1LjE0IDE1LjEzNXMxNS4xNC02Ljc3NSAxNS4xNC0xNS4xMzVjMC04LjM1OC02Ljc4LTE1LjEzNS0xNS4xNC0xNS4xMzV6Ii8+CiAgIDxnIGlkPSJjb2Zfb3JhbmdlX2hleC1jb3B5LTIiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzkyIDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNFOTU0MjAiIGQ9Im0zOS45MDYgMjAuMDEzYzAgMTAuOTg3LTguOTA1IDE5Ljg5My0xOS44OTIgMTkuODkzLTEwLjk4NiAwLTE5Ljg5Mi04LjkwNi0xOS44OTItMTkuODkzLTAuMDAwMzItMTAuOTg2IDguOTA1OS0xOS44OTEgMTkuODkyLTE5Ljg5MSAxMC45ODctMC4wMDAzMiAxOS44OTIgOC45MDU0IDE5Ljg5MiAxOS44OTF6Ii8+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiIGQ9Im05LjY5MDIgMjAuMDEzYzAgMS40MTMtMS4xNDUxIDIuNTU4LTIuNTU4NiAyLjU1OC0xLjQxMTcgMC0yLjU1NjktMS4xNDUtMi41NTY5LTIuNTU4IDAtMS40MTIgMS4xNDUyLTIuNTU3IDIuNTU2OS0yLjU1NyAxLjQxMzUgMCAyLjU1ODYgMS4xNDUgMi41NTg2IDIuNTU3em0xNC41NTEgMTIuNDM2YzAuNzA2IDEuMjIzIDIuMjcgMS42NDIgMy40OTMgMC45MzZzMS42NDItMi4yNyAwLjkzNi0zLjQ5NGMtMC43MDYtMS4yMjMtMi4yNy0xLjY0MS0zLjQ5My0wLjkzNS0xLjIyMyAwLjcwNy0xLjY0MiAyLjI3LTAuOTM2IDMuNDkzem00LjQyOS0yMi4zMTNjMC43MDYtMS4yMjM0IDAuMjg4LTIuNzg3NC0wLjkzNi0zLjQ5MjktMS4yMjItMC43MDYzLTIuNzg3LTAuMjg3Mi0zLjQ5MyAwLjkzNTctMC43MDYgMS4yMjMyLTAuMjg3IDIuNzg3MiAwLjkzNiAzLjQ5MzJzMi43ODggMC4yODcgMy40OTMtMC45MzZ6bS04LjY1NiAyLjU4NGMzLjgxMSAwIDYuOTM4IDIuOTIyIDcuMjY1IDYuNjQ4bDMuNzAxLTAuMDU5Yy0wLjE3NS0yLjc2OC0xLjM3Ni01LjI1OC0zLjIyNy03LjA5NC0wLjk4IDAuMzc4LTIuMTE2IDAuMzI2LTMuMDk3LTAuMjQtMC45ODEtMC41NjctMS41OTQtMS41MjYtMS43NTYtMi41NjUzLTAuOTItMC4yNDk4LTEuODg4LTAuMzgzNi0yLjg4Ni0wLjM4MzYtMS43NSAwLTMuNDA0IDAuNDA5My00Ljg3NCAxLjEzNjlsMS44MDEgMy4yMzRjMC45MzQtMC40MzMgMS45NzYtMC42NzcgMy4wNzMtMC42Nzd6bS03LjI5NCA3LjI5M2MwLTIuNDY3IDEuMjI2LTQuNjQ4IDMuMTAyLTUuOTY3bC0xLjkwMS0zLjE3N2MtMi4yMDEgMS40Ny0zLjg0MSAzLjcxMi00LjUzMjQgNi4zNDEgMC44MTg0IDAuNjYgMS4zNDM0IDEuNjcgMS4zNDM0IDIuODAzIDAgMS4xMzUtMC41MjUgMi4xNDUtMS4zNDM0IDIuODA0IDAuNjkxNCAyLjYyOSAyLjMzMTQgNC44NzIgNC41MzI0IDYuMzQzbDEuOTAxLTMuMTc3Yy0xLjg3Ni0xLjMyLTMuMTAyLTMuNTAxLTMuMTAyLTUuOTd6bTcuMjk0IDcuMjk1Yy0xLjA5NyAwLTIuMTM5LTAuMjQ0LTMuMDczLTAuNjc4bC0xLjgwMSAzLjIzNGMxLjQ3IDAuNzI5IDMuMTI0IDEuMTM3IDQuODc0IDEuMTM3IDAuOTk4IDAgMS45NjYtMC4xMzIgMi44ODYtMC4zODMgMC4xNjItMS4wMzkgMC43NzUtMS45OTkgMS43NTYtMi41NjQgMC45ODEtMC41NjcgMi4xMTctMC42MTggMy4wOTctMC4yNCAxLjg1MS0xLjgzNyAzLjA1Mi00LjMyNyAzLjIyNy03LjA5NmwtMy43MDEtMC4wNThjLTAuMzI3IDMuNzI2LTMuNDU0IDYuNjQ4LTcuMjY1IDYuNjQ4eiIvPgogICA8L2c+CiAgIDxnIGlkPSJsaW5rZWRpbi1jb3B5LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNCA1NikiPgogICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiIGZpbGw9IiMwMDcxQTEiLz4KICAgIDxnIGlkPSJHcm91cC0yIiBmaWxsPSIjRkZGRkZFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4IDgpIj4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBkPSJtMy4wNjk2IDAuNDA1NzhjMS41MDY4IDAgMi43MzE3IDEuMjMzMSAyLjczMTcgMi43NTA5IDAgMS41MTkzLTEuMjI0OSAyLjc1MjQtMi43MzE3IDIuNzUyNC0xLjUxMDkgMC0yLjczMzUtMS4yMzMxLTIuNzMzNS0yLjc1MjQgMC4wMDAwMS0xLjUxNzggMS4yMjI2LTIuNzUwOSAyLjczMzUtMi43NTA5di0wLjAwMDAyem0tMi4zNTc5IDIyLjg2Mmg0LjcxMzd2LTE1LjI3MWwtNC43MTM3LTAuMDAwMyAwLjAwMDAyIDE1LjI3MXoiLz4KICAgICA8cGF0aCBpZD0iRmlsbC01IiBkPSJtOC4zODIgNy45OTY3aDQuNTIxdjIuMDg3M2gwLjA2M2MwLjYyOS0xLjIwMTEgMi4xNjctMi40NjY5IDQuNDYtMi40NjY5IDQuNzczIDAgNS42NTQgMy4xNjI5IDUuNjU0IDcuMjczOXY4LjM3N2gtNC43MXYtNy40MjZjMC0xLjc3MS0wLjAzMi00LjA0OS0yLjQ0OS00LjA0OS0yLjQ1MyAwLTIuODI5IDEuOTI5LTIuODI5IDMuOTJ2Ny41NTVoLTQuNzF2LTE1LjI3MSIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJ5b3V0dWJlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAgNTYpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjRDkyNTJBIi8+CiAgICA8ZyBpZD0ieXRfaWNvbl9yZ2IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgMTEpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTQiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMyIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay00KSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWdvbiBpZD0iRmlsbC00IiBwb2ludHM9IjE3LjE4MiA5LjE4MzUgMTAuMzY4IDUuMzA3MyAxMC4zNjggMTMuMDYiIGZpbGw9IiNEOTI1MkEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iZ29vZ2xlLXBsdXMtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNERDRCMzkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyLWNvcHkiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEyIDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjMURBMUYyIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJMb2dvX194MjAxNF9fRklYRUQiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguOSAxMS40KSI+CiAgICAgPHBhdGggaWQ9IlNoYXBlIiBkPSJtNy40NCAxOS4xNWM4Ljg3IDAgMTMuNzItNy4zNSAxMy43Mi0xMy43MiAwLTAuMjEgMC0wLjQyLTAuMDEtMC42MiAwLjk0LTAuNjggMS43Ni0xLjUzIDIuNDEtMi41LTAuODYgMC4zOC0xLjc5IDAuNjQtMi43NyAwLjc2IDEtMC42IDEuNzYtMS41NCAyLjEyLTIuNjctMC45MyAwLjU1LTEuOTYgMC45NS0zLjA2IDEuMTctMC44OC0wLjk0LTIuMTMtMS41Mi0zLjUyLTEuNTItMi42NiAwLTQuODIgMi4xNi00LjgyIDQuODIgMCAwLjM4IDAuMDQgMC43NSAwLjEzIDEuMS00LjAxLTAuMi03LjU2LTIuMTItOS45NC01LjA0LTAuNDEgMC43MS0wLjY1IDEuNTQtMC42NSAyLjQyIDAgMS42NyAwLjg1IDMuMTUgMi4xNSA0LjAxLTAuNzktMC4wMi0xLjUzLTAuMjQtMi4xOC0wLjZ2MC4wNmMwIDIuMzQgMS42NiA0LjI4IDMuODcgNC43My0wLjQgMC4xMS0wLjgzIDAuMTctMS4yNyAwLjE3LTAuMzEgMC0wLjYxLTAuMDMtMC45MS0wLjA5IDAuNjEgMS45MiAyLjM5IDMuMzEgNC41IDMuMzUtMS42NSAxLjI5LTMuNzMgMi4wNi01Ljk5IDIuMDYtMC4zOSAwLTAuNzctMC4wMi0xLjE1LTAuMDcgMi4xMSAxLjM4IDQuNjUgMi4xOCA3LjM3IDIuMTgiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iaW5zdGFncmFtLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjRkIzOTU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIvPgogICAgPC9nPgogICAgPGcgaWQ9Ikdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2IDYpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTYiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtNSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay02KSIgZD0ibTE0LjIzNyAwLjAwODk4NTRjLTMuODY3IDAtNC4zNTE3IDAuMDE2Mzg5LTUuODcwMSAwLjA4NTY3My0xLjUxNTQgMC4wNjkxMTItMi41NTAzIDAuMzA5OC0zLjQ1NTggMC42NjE3Ni0wLjkzNjIgMC4zNjM3OC0xLjczMDEgMC44NTA1OC0yLjUyMTcgMS42NDItMC43OTE0IDAuNzkxNS0xLjI3ODIgMS41ODU1LTEuNjQyIDIuNTIxNy0wLjM1MTkzIDAuOTA1NS0wLjU5MjYxIDEuOTQwNC0wLjY2MTczIDMuNDU1Ny0wLjA2OTI4MSAxLjUxODUtMC4wODU2NyAyLjAwMzItMC4wODU2NyA1Ljg3MDIgMCAzLjg2NiAwLjAxNjM4OSA0LjM1MSAwLjA4NTY3MiA1Ljg2OSAwLjA2OTExOCAxLjUxNiAwLjMwOTggMi41NTEgMC42NjE3NiAzLjQ1NiAwLjM2Mzc3IDAuOTM2IDAuODUwNTcgMS43MyAxLjY0MiAyLjUyMiAwLjc5MTYgMC43OTEgMS41ODU1IDEuMjc4IDIuNTIxNyAxLjY0MiAwLjkwNTUgMC4zNTIgMS45NDA0IDAuNTkyIDMuNDU1OCAwLjY2MSAxLjUxODQgMC4wNyAyLjAwMzEgMC4wODYgNS44NzAxIDAuMDg2IDMuODY2IDAgNC4zNTEtMC4wMTYgNS44NjktMC4wODYgMS41MTYtMC4wNjkgMi41NTEtMC4zMDkgMy40NTYtMC42NjEgMC45MzYtMC4zNjQgMS43My0wLjg1MSAyLjUyMi0xLjY0MiAwLjc5MS0wLjc5MiAxLjI3OC0xLjU4NiAxLjY0Mi0yLjUyMiAwLjM1Mi0wLjkwNSAwLjU5Mi0xLjk0IDAuNjYxLTMuNDU2IDAuMDctMS41MTggMC4wODYtMi4wMDMgMC4wODYtNS44NjkgMC0zLjg2Ny0wLjAxNi00LjM1MTctMC4wODYtNS44NzAyLTAuMDY5LTEuNTE1My0wLjMwOS0yLjU1MDItMC42NjEtMy40NTU3LTAuMzY0LTAuOTM2Mi0wLjg1MS0xLjczMDItMS42NDItMi41MjE3LTAuNzkyLTAuNzkxNC0xLjU4Ni0xLjI3ODItMi41MjItMS42NDItMC45MDUtMC4zNTE5NC0xLjk0LTAuNTkyNjMtMy40NTYtMC42NjE3NC0xLjUxOC0wLjA2OTI4Ni0yLjAwMy0wLjA4NTY3NS01Ljg2OS0wLjA4NTY3NXptMCAyLjU2NTFjMy44MDEgMCA0LjI1MSAwLjAxNDYgNS43NTIgMC4wODMgMS4zODggMC4wNjMzIDIuMTQyIDAuMjk1MyAyLjY0NCAwLjQ5MDIgMC42NjQgMC4yNTgzIDEuMTM5IDAuNTY2OCAxLjYzNyAxLjA2NXMwLjgwNyAwLjk3MjQgMS4wNjUgMS42MzY5YzAuMTk1IDAuNTAxNyAwLjQyNyAxLjI1NTUgMC40OSAyLjY0MzYgMC4wNjggMS41MDEyIDAuMDgzIDEuOTUxMiAwLjA4MyA1Ljc1MzIgMCAzLjgwMS0wLjAxNSA0LjI1MS0wLjA4MyA1Ljc1Mi0wLjA2MyAxLjM4OC0wLjI5NSAyLjE0Mi0wLjQ5IDIuNjQ0LTAuMjU4IDAuNjY0LTAuNTY3IDEuMTM5LTEuMDY1IDEuNjM3cy0wLjk3MyAwLjgwNy0xLjYzNyAxLjA2NWMtMC41MDIgMC4xOTUtMS4yNTYgMC40MjctMi42NDQgMC40OS0xLjUwMSAwLjA2OC0xLjk1MSAwLjA4My01Ljc1MiAwLjA4My0zLjgwMiAwLTQuMjUyMi0wLjAxNS01Ljc1MzItMC4wODMtMS4zODgxLTAuMDYzLTIuMTQxOS0wLjI5NS0yLjY0MzUtMC40OS0wLjY2NDYtMC4yNTgtMS4xMzg4LTAuNTY3LTEuNjM3LTEuMDY1LTAuNDk4MS0wLjQ5OC0wLjgwNjctMC45NzMtMS4wNjUtMS42MzctMC4xOTQ5LTAuNTAyLTAuNDI2OC0xLjI1Ni0wLjQ5MDEtMi42NDQtMC4wNjg1LTEuNTAxLTAuMDgzMS0xLjk1MS0wLjA4MzEtNS43NTIgMC0zLjgwMiAwLjAxNDYtNC4yNTIgMC4wODMxLTUuNzUzMiAwLjA2MzMtMS4zODgxIDAuMjk1Mi0yLjE0MTkgMC40OTAxLTIuNjQzNiAwLjI1ODMtMC42NjQ1IDAuNTY2OC0xLjEzODcgMS4wNjUtMS42MzY5czAuOTcyNC0wLjgwNjcgMS42MzctMS4wNjVjMC41MDE2LTAuMTk0OSAxLjI1NTQtMC40MjY5IDIuNjQzNS0wLjQ5MDIgMS41MDEyLTAuMDY4NCAxLjk1MTItMC4wODMgNS43NTMyLTAuMDgzeiIvPgogICAgIDwvZz4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBmaWxsPSIjZmZmIiBkPSJtMTQuMjQgMTguOTkxYy0yLjYyMSAwLTQuNzQ1OS0yLjEyNS00Ljc0NTktNC43NDUgMC0yLjYyMSAyLjEyNDktNC43NDYgNC43NDU5LTQuNzQ2IDIuNjIgMCA0Ljc0NSAyLjEyNSA0Ljc0NSA0Ljc0NiAwIDIuNjItMi4xMjUgNC43NDUtNC43NDUgNC43NDV6bTAtMTIuMDU2Yy00LjAzOCAwLTcuMzExMSAzLjI3MzEtNy4zMTExIDcuMzExMSAwIDQuMDM3IDMuMjczMSA3LjMxIDcuMzExMSA3LjMxIDQuMDM3IDAgNy4zMS0zLjI3MyA3LjMxLTcuMzEgMC00LjAzOC0zLjI3My03LjMxMTEtNy4zMS03LjMxMTF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZmlsbD0iI2ZmZiIgZD0ibTIzLjU0MSA2LjY0NjFjMCAwLjk0MzUtMC43NjUgMS43MDgzLTEuNzA5IDEuNzA4My0wLjk0MyAwLTEuNzA4LTAuNzY0OC0xLjcwOC0xLjcwODMgMC0wLjk0MzYgMC43NjUtMS43MDg1IDEuNzA4LTEuNzA4NSAwLjk0NCAwIDEuNzA5IDAuNzY0OSAxLjcwOSAxLjcwODUiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQiIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iIzY2NiIgZD0ibTM1NiAzMi43MzVjLTcuMDQgMC0xMi43NC01LjctMTIuNzQtMTIuNzM2IDAtNy4wMzQgNS43LTEyLjczNCAxMi43NC0xMi43MzQgNy4wNC0wLjAwMDUgMTIuNzQgNS43IDEyLjc0IDEyLjczNCAwIDcuMDM2LTUuNyAxMi43MzYtMTIuNzQgMTIuNzM2em0yMC0xMi43MzVjMCAxMS4wNDUtOC45NSAyMC0yMCAyMHMtMjAtOC45NTUtMjAtMjBjMC0xMS4wNDYgOC45NS0yMCAyMC0yMHMyMCA4Ljk1MzYgMjAgMjB6bS0yMC0xNS4xMzRjLTguMzYgMC0xNS4xNCA2Ljc3NjUtMTUuMTQgMTUuMTM0IDAgOC4zNiA2Ljc4IDE1LjEzNSAxNS4xNCAxNS4xMzVzMTUuMTQtNi43NzUgMTUuMTQtMTUuMTM1YzAtOC4zNTgtNi43OC0xNS4xMzQtMTUuMTQtMTUuMTM0eiIvPgogICA8ZyBpZD0iY29mX29yYW5nZV9oZXgtY29weSIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTIpIj4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iIzY2NiIgZD0ibTM5LjkwNiAyMC4wMTNjMCAxMC45ODctOC45MDUgMTkuODkzLTE5Ljg5MiAxOS44OTMtMTAuOTg2IDAtMTkuODkyLTguOTA2LTE5Ljg5Mi0xOS44OTMtMC4wMDAzMi0xMC45ODYgOC45MDU5LTE5Ljg5MSAxOS44OTItMTkuODkxIDEwLjk4Ny0wLjAwMDMyIDE5Ljg5MiA4LjkwNTQgMTkuODkyIDE5Ljg5MXoiLz4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iI2ZmZiIgZD0ibTkuNjkwMiAyMC4wMTNjMCAxLjQxMy0xLjE0NTEgMi41NTgtMi41NTg2IDIuNTU4LTEuNDExNyAwLTIuNTU2OS0xLjE0NS0yLjU1NjktMi41NTggMC0xLjQxMiAxLjE0NTItMi41NTcgMi41NTY5LTIuNTU3IDEuNDEzNSAwIDIuNTU4NiAxLjE0NSAyLjU1ODYgMi41NTd6bTE0LjU1MSAxMi40MzZjMC43MDYgMS4yMjMgMi4yNyAxLjY0MiAzLjQ5MyAwLjkzNnMxLjY0Mi0yLjI3IDAuOTM2LTMuNDk0Yy0wLjcwNi0xLjIyMy0yLjI3LTEuNjQxLTMuNDkzLTAuOTM1LTEuMjIzIDAuNzA3LTEuNjQyIDIuMjctMC45MzYgMy40OTN6bTQuNDI5LTIyLjMxM2MwLjcwNi0xLjIyMzQgMC4yODgtMi43ODc0LTAuOTM2LTMuNDkyOS0xLjIyMi0wLjcwNjMtMi43ODctMC4yODcyLTMuNDkzIDAuOTM1Ny0wLjcwNiAxLjIyMzItMC4yODcgMi43ODcyIDAuOTM2IDMuNDkzMnMyLjc4OCAwLjI4NyAzLjQ5My0wLjkzNnptLTguNjU2IDIuNTg0YzMuODExIDAgNi45MzggMi45MjIgNy4yNjUgNi42NDhsMy43MDEtMC4wNTljLTAuMTc1LTIuNzY4LTEuMzc2LTUuMjU4LTMuMjI3LTcuMDk0LTAuOTggMC4zNzgtMi4xMTYgMC4zMjYtMy4wOTctMC4yNC0wLjk4MS0wLjU2Ny0xLjU5NC0xLjUyNi0xLjc1Ni0yLjU2NTMtMC45Mi0wLjI0OTgtMS44ODgtMC4zODM2LTIuODg2LTAuMzgzNi0xLjc1IDAtMy40MDQgMC40MDkzLTQuODc0IDEuMTM2OWwxLjgwMSAzLjIzNGMwLjkzNC0wLjQzMyAxLjk3Ni0wLjY3NyAzLjA3My0wLjY3N3ptLTcuMjk0IDcuMjkzYzAtMi40NjcgMS4yMjYtNC42NDggMy4xMDItNS45NjdsLTEuOTAxLTMuMTc3Yy0yLjIwMSAxLjQ3LTMuODQxIDMuNzEyLTQuNTMyNCA2LjM0MSAwLjgxODQgMC42NiAxLjM0MzQgMS42NyAxLjM0MzQgMi44MDMgMCAxLjEzNS0wLjUyNSAyLjE0NS0xLjM0MzQgMi44MDQgMC42OTE0IDIuNjI5IDIuMzMxNCA0Ljg3MiA0LjUzMjQgNi4zNDNsMS45MDEtMy4xNzdjLTEuODc2LTEuMzItMy4xMDItMy41MDEtMy4xMDItNS45N3ptNy4yOTQgNy4yOTVjLTEuMDk3IDAtMi4xMzktMC4yNDQtMy4wNzMtMC42NzhsLTEuODAxIDMuMjM0YzEuNDcgMC43MjkgMy4xMjQgMS4xMzcgNC44NzQgMS4xMzcgMC45OTggMCAxLjk2Ni0wLjEzMiAyLjg4Ni0wLjM4MyAwLjE2Mi0xLjAzOSAwLjc3NS0xLjk5OSAxLjc1Ni0yLjU2NCAwLjk4MS0wLjU2NyAyLjExNy0wLjYxOCAzLjA5Ny0wLjI0IDEuODUxLTEuODM3IDMuMDUyLTQuMzI3IDMuMjI3LTcuMDk2bC0zLjcwMS0wLjA1OGMtMC4zMjcgMy43MjYtMy40NTQgNi42NDgtNy4yNjUgNi42NDh6Ii8+CiAgIDwvZz4KICAgPGcgaWQ9Imdvb2dsZS1wbHVzIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM2NjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMikiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiI+CiAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0iTG9nb19feDIwMTRfX0ZJWEVEIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjkgMTEuNCkiPgogICAgIDxwYXRoIGlkPSJTaGFwZSIgZD0ibTcuNDQgMTkuMTVjOC44NyAwIDEzLjcyLTcuMzUgMTMuNzItMTMuNzIgMC0wLjIxIDAtMC40Mi0wLjAxLTAuNjIgMC45NC0wLjY4IDEuNzYtMS41MyAyLjQxLTIuNS0wLjg2IDAuMzgtMS43OSAwLjY0LTIuNzcgMC43NiAxLTAuNiAxLjc2LTEuNTQgMi4xMi0yLjY3LTAuOTMgMC41NS0xLjk2IDAuOTUtMy4wNiAxLjE3LTAuODgtMC45NC0yLjEzLTEuNTItMy41Mi0xLjUyLTIuNjYgMC00LjgyIDIuMTYtNC44MiA0LjgyIDAgMC4zOCAwLjA0IDAuNzUgMC4xMyAxLjEtNC4wMS0wLjItNy41Ni0yLjEyLTkuOTQtNS4wNC0wLjQxIDAuNzEtMC42NSAxLjU0LTAuNjUgMi40MiAwIDEuNjcgMC44NSAzLjE1IDIuMTUgNC4wMS0wLjc5LTAuMDItMS41My0wLjI0LTIuMTgtMC42djAuMDZjMCAyLjM0IDEuNjYgNC4yOCAzLjg3IDQuNzMtMC40IDAuMTEtMC44MyAwLjE3LTEuMjcgMC4xNy0wLjMxIDAtMC42MS0wLjAzLTAuOTEtMC4wOSAwLjYxIDEuOTIgMi4zOSAzLjMxIDQuNSAzLjM1LTEuNjUgMS4yOS0zLjczIDIuMDYtNS45OSAyLjA2LTAuMzkgMC0wLjc3LTAuMDItMS4xNS0wLjA3IDIuMTEgMS4zOCA0LjY1IDIuMTggNy4zNyAyLjE4Ii8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImZhY2Vib2siPgogICAgPGcgaWQ9InBhdGg0MjQxIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxtYXNrIGlkPSJtYXNrLTgiIGZpbGw9IndoaXRlIj4KICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC03Ii8+CiAgICAgPC9tYXNrPgogICAgIDx1c2UgaWQ9Ik1hc2siIHhsaW5rOmhyZWY9IiNwYXRoLTciIGZpbGw9IiM2NjY2NjYiLz4KICAgICA8cGF0aCBtYXNrPSJ1cmwoI21hc2stOCkiIGQ9Im0zMC4wMzcgMTAuMDAxYy0zLjkyIDAtNi42MDMgMi40NDktNi42MDMgNi45NDV2My41MjZoLTQuNDM0djUuMjU1aDQuNDM0djE0LjI3M2MxLjgyLTAuMjQ2IDMuNi0wLjcyOCA1LjI5OS0xLjQzOHYtMTIuODM1aDQuNDI0bDAuNjYtNS4yNTVoLTUuMDg0di0zLjAwMmMwLTEuNTIyIDAuNDc5LTMuMDg1IDIuNTUtMi41NjNoMi43MTd2LTQuN2MtMC40NjktMC4wNjQtMi4wODUtMC4yMDctMy45NjMtMC4yMDd2MC4wMDF6IiBmaWxsPSIjZmZmIi8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImxpbmtlZGluIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjQpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjNjY2Ii8+CiAgICA8ZyBpZD0iR3JvdXAtMiIgZmlsbD0iI0ZGRkZGRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSI+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZD0ibTMuMDY5NiAwLjQwNTc4YzEuNTA2OCAwIDIuNzMxNyAxLjIzMzEgMi43MzE3IDIuNzUwOSAwIDEuNTE5My0xLjIyNDkgMi43NTI0LTIuNzMxNyAyLjc1MjQtMS41MTA5IDAtMi43MzM1LTEuMjMzMS0yLjczMzUtMi43NTI0IDAuMDAwMDEtMS41MTc4IDEuMjIyNi0yLjc1MDkgMi43MzM1LTIuNzUwOXYtMC4wMDAwMnptLTIuMzU3OSAyMi44NjJoNC43MTM3di0xNS4yNzFsLTQuNzEzNy0wLjAwMDMgMC4wMDAwMiAxNS4yNzF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZD0ibTguMzgyIDcuOTk2N2g0LjUyMXYyLjA4NzNoMC4wNjNjMC42MjktMS4yMDExIDIuMTY3LTIuNDY2OSA0LjQ2LTIuNDY2OSA0Ljc3MyAwIDUuNjU0IDMuMTYyOSA1LjY1NCA3LjI3Mzl2OC4zNzdoLTQuNzF2LTcuNDI2YzAtMS43NzEtMC4wMzItNC4wNDktMi40NDktNC4wNDktMi40NTMgMC0yLjgyOSAxLjkyOS0yLjgyOSAzLjkydjcuNTU1aC00Ljcxdi0xNS4yNzEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0ieW91dHViZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwKSI+CiAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIgZmlsbD0iIzY2NiIvPgogICAgPGcgaWQ9Inl0X2ljb25fcmdiIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3IDExKSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMCIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC05Ii8+CiAgICAgIDwvbWFzaz4KICAgICAgPHBhdGggaWQ9IkZpbGwtMSIgZmlsbD0iI2ZmZiIgbWFzaz0idXJsKCNtYXNrLTEwKSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWxpbmUgaWQ9IkZpbGwtNCIgcG9pbnRzPSIxMC4zNjggMTMuMDYgMTcuMTgyIDkuMTgzNSAxMC4zNjggNS4zMDczIDEwLjM2OCAxMy4wNiIgZmlsbD0iIzY2NiIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJpbnN0YWdyYW0iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OCkiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMiIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xMSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay0xMikiIGQ9Im0xNC4yMzcgMC4wMDg5ODU0Yy0zLjg2NyAwLTQuMzUxNyAwLjAxNjM4OS01Ljg3MDEgMC4wODU2NzMtMS41MTU0IDAuMDY5MTEyLTIuNTUwMyAwLjMwOTgtMy40NTU4IDAuNjYxNzYtMC45MzYyIDAuMzYzNzgtMS43MzAxIDAuODUwNTgtMi41MjE3IDEuNjQyLTAuNzkxNCAwLjc5MTUtMS4yNzgyIDEuNTg1NS0xLjY0MiAyLjUyMTctMC4zNTE5MyAwLjkwNTUtMC41OTI2MSAxLjk0MDQtMC42NjE3MyAzLjQ1NTctMC4wNjkyODEgMS41MTg1LTAuMDg1NjcgMi4wMDMyLTAuMDg1NjcgNS44NzAyIDAgMy44NjYgMC4wMTYzODkgNC4zNTEgMC4wODU2NzIgNS44NjkgMC4wNjkxMTggMS41MTYgMC4zMDk4IDIuNTUxIDAuNjYxNzYgMy40NTYgMC4zNjM3NyAwLjkzNiAwLjg1MDU3IDEuNzMgMS42NDIgMi41MjIgMC43OTE2IDAuNzkxIDEuNTg1NSAxLjI3OCAyLjUyMTcgMS42NDIgMC45MDU1IDAuMzUyIDEuOTQwNCAwLjU5MiAzLjQ1NTggMC42NjEgMS41MTg0IDAuMDcgMi4wMDMxIDAuMDg2IDUuODcwMSAwLjA4NiAzLjg2NiAwIDQuMzUxLTAuMDE2IDUuODY5LTAuMDg2IDEuNTE2LTAuMDY5IDIuNTUxLTAuMzA5IDMuNDU2LTAuNjYxIDAuOTM2LTAuMzY0IDEuNzMtMC44NTEgMi41MjItMS42NDIgMC43OTEtMC43OTIgMS4yNzgtMS41ODYgMS42NDItMi41MjIgMC4zNTItMC45MDUgMC41OTItMS45NCAwLjY2MS0zLjQ1NiAwLjA3LTEuNTE4IDAuMDg2LTIuMDAzIDAuMDg2LTUuODY5IDAtMy44NjctMC4wMTYtNC4zNTE3LTAuMDg2LTUuODcwMi0wLjA2OS0xLjUxNTMtMC4zMDktMi41NTAyLTAuNjYxLTMuNDU1Ny0wLjM2NC0wLjkzNjItMC44NTEtMS43MzAyLTEuNjQyLTIuNTIxNy0wLjc5Mi0wLjc5MTQtMS41ODYtMS4yNzgyLTIuNTIyLTEuNjQyLTAuOTA1LTAuMzUxOTQtMS45NC0wLjU5MjYzLTMuNDU2LTAuNjYxNzQtMS41MTgtMC4wNjkyODYtMi4wMDMtMC4wODU2NzUtNS44NjktMC4wODU2NzV6bTAgMi41NjUxYzMuODAxIDAgNC4yNTEgMC4wMTQ2IDUuNzUyIDAuMDgzIDEuMzg4IDAuMDYzMyAyLjE0MiAwLjI5NTMgMi42NDQgMC40OTAyIDAuNjY0IDAuMjU4MyAxLjEzOSAwLjU2NjggMS42MzcgMS4wNjVzMC44MDcgMC45NzI0IDEuMDY1IDEuNjM2OWMwLjE5NSAwLjUwMTcgMC40MjcgMS4yNTU1IDAuNDkgMi42NDM2IDAuMDY4IDEuNTAxMiAwLjA4MyAxLjk1MTIgMC4wODMgNS43NTMyIDAgMy44MDEtMC4wMTUgNC4yNTEtMC4wODMgNS43NTItMC4wNjMgMS4zODgtMC4yOTUgMi4xNDItMC40OSAyLjY0NC0wLjI1OCAwLjY2NC0wLjU2NyAxLjEzOS0xLjA2NSAxLjYzN3MtMC45NzMgMC44MDctMS42MzcgMS4wNjVjLTAuNTAyIDAuMTk1LTEuMjU2IDAuNDI3LTIuNjQ0IDAuNDktMS41MDEgMC4wNjgtMS45NTEgMC4wODMtNS43NTIgMC4wODMtMy44MDIgMC00LjI1MjItMC4wMTUtNS43NTMyLTAuMDgzLTEuMzg4MS0wLjA2My0yLjE0MTktMC4yOTUtMi42NDM1LTAuNDktMC42NjQ2LTAuMjU4LTEuMTM4OC0wLjU2Ny0xLjYzNy0xLjA2NS0wLjQ5ODEtMC40OTgtMC44MDY3LTAuOTczLTEuMDY1LTEuNjM3LTAuMTk0OS0wLjUwMi0wLjQyNjgtMS4yNTYtMC40OTAxLTIuNjQ0LTAuMDY4NS0xLjUwMS0wLjA4MzEtMS45NTEtMC4wODMxLTUuNzUyIDAtMy44MDIgMC4wMTQ2LTQuMjUyIDAuMDgzMS01Ljc1MzIgMC4wNjMzLTEuMzg4MSAwLjI5NTItMi4xNDE5IDAuNDkwMS0yLjY0MzYgMC4yNTgzLTAuNjY0NSAwLjU2NjgtMS4xMzg3IDEuMDY1LTEuNjM2OXMwLjk3MjQtMC44MDY3IDEuNjM3LTEuMDY1YzAuNTAxNi0wLjE5NDkgMS4yNTU0LTAuNDI2OSAyLjY0MzUtMC40OTAyIDEuNTAxMi0wLjA2ODQgMS45NTEyLTAuMDgzIDUuNzUzMi0wLjA4M3oiLz4KICAgICA8L2c+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZmlsbD0iI2ZmZiIgZD0ibTE0LjI0IDE4Ljk5MWMtMi42MjEgMC00Ljc0NTktMi4xMjUtNC43NDU5LTQuNzQ1IDAtMi42MjEgMi4xMjQ5LTQuNzQ2IDQuNzQ1OS00Ljc0NiAyLjYyIDAgNC43NDUgMi4xMjUgNC43NDUgNC43NDYgMCAyLjYyLTIuMTI1IDQuNzQ1LTQuNzQ1IDQuNzQ1em0wLTEyLjA1NmMtNC4wMzggMC03LjMxMTEgMy4yNzMxLTcuMzExMSA3LjMxMTEgMCA0LjAzNyAzLjI3MzEgNy4zMSA3LjMxMTEgNy4zMSA0LjAzNyAwIDcuMzEtMy4yNzMgNy4zMS03LjMxIDAtNC4wMzgtMy4yNzMtNy4zMTExLTcuMzEtNy4zMTExeiIvPgogICAgIDxwYXRoIGlkPSJGaWxsLTUiIGZpbGw9IiNmZmYiIGQ9Im0yMy41NDEgNi42NDYxYzAgMC45NDM1LTAuNzY1IDEuNzA4My0xLjcwOSAxLjcwODMtMC45NDMgMC0xLjcwOC0wLjc2NDgtMS43MDgtMS43MDgzIDAtMC45NDM2IDAuNzY1LTEuNzA4NSAxLjcwOC0xLjcwODUgMC45NDQgMCAxLjcwOSAwLjc2NDkgMS43MDkgMS43MDg1Ii8+CiAgICA8L2c+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=");background-size:430px 96px;height:42px;width:42px;background-position:-55px 0}.p-icon--google:hover{background-position-y:-56px}.p-icon--twitter{background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9Ijk2cHgiIHdpZHRoPSI0MzJweCIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQzMiA5NiI+PCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ni4yICg0NDQ5NikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiA8dGl0bGU+dmFuaWxsYS1zb2NpYWwtc3ByaXRlPC90aXRsZT4KIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogPGRlZnM+CiAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICA8cG9seWdvbiBpZD0icGF0aC0zIiBwb2ludHM9IjAuMDA4ODg3MSAxOC4zNjcgMC4wMDg4ODcxIDAuMDA1OTI0OCAyNi4wNjkgMC4wMDU5MjQ4IDI2LjA2OSAxOC4zNjciLz4KICA8cG9seWdvbiBpZD0icGF0aC01IiBwb2ludHM9IjAgMjguNDc5IDI4LjQ3MyAyOC40NzkgMjguNDczIDAuMDA4OTg1NCAwIDAuMDA4OTg1NCIvPgogIDxjaXJjbGUgaWQ9InBhdGgtNyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgPHBvbHlnb24gaWQ9InBhdGgtOSIgcG9pbnRzPSIwLjAwODg4NzEgMTguMzY3IDAuMDA4ODg3MSAwLjAwNTkyNDggMjYuMDY5IDAuMDA1OTI0OCAyNi4wNjkgMTguMzY3Ii8+CiAgPHBvbHlnb24gaWQ9InBhdGgtMTEiIHBvaW50cz0iMCAyOC40NzkgMjguNDczIDI4LjQ3OSAyOC40NzMgMC4wMDg5ODU0IDAgMC4wMDg5ODU0Ii8+CiA8L2RlZnM+CiA8ZyBpZD0iUGFnZS0xIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9Im5vbmUiPgogIDxnIGlkPSJ2YW5pbGxhLXNvY2lhbC1zcHJpdGUiPgogICA8ZyBpZD0iZmFjZWJvay1jb3B5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDU2KSI+CiAgICA8ZyBpZD0icGF0aDQyNDEiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiLz4KICAgICA8L21hc2s+CiAgICAgPHVzZSBpZD0iTWFzayIgeGxpbms6aHJlZj0iI3BhdGgtMSIgZmlsbD0iIzNCNTk5OCIvPgogICAgIDxwYXRoIG1hc2s9InVybCgjbWFzay0yKSIgZD0ibTMwLjAzNyAxMC4wMDFjLTMuOTIgMC02LjYwMyAyLjQ0OS02LjYwMyA2Ljk0NXYzLjUyNmgtNC40MzR2NS4yNTVoNC40MzR2MTQuMjczYzEuODItMC4yNDYgMy42LTAuNzI4IDUuMjk5LTEuNDM4di0xMi44MzVoNC40MjRsMC42Ni01LjI1NWgtNS4wODR2LTMuMDAyYzAtMS41MjIgMC40NzktMy4wODUgMi41NS0yLjU2M2gyLjcxN3YtNC43Yy0wLjQ2OS0wLjA2NC0yLjA4NS0wLjIwNy0zLjk2My0wLjIwN3YwLjAwMXoiIGZpbGw9IiNmZmYiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM3NzI5NTMiIGQ9Im0zNTYgODguNzM1Yy03LjA0IDAtMTIuNzQtNS43LTEyLjc0LTEyLjczNiAwLTcuMDM0IDUuNy0xMi43MzQgMTIuNzQtMTIuNzM0czEyLjc0IDUuNyAxMi43NCAxMi43MzRjMCA3LjAzNi01LjcgMTIuNzM2LTEyLjc0IDEyLjczNnptMjAtMTIuNzM1YzAgMTEuMDQ1LTguOTUgMjAtMjAgMjBzLTIwLTguOTU1LTIwLTIwYzAtMTEuMDQ2IDguOTUtMjAgMjAtMjBzMjAgOC45NTQgMjAgMjB6bS0yMC0xNS4xMzVjLTguMzYgMC0xNS4xNCA2Ljc3Ny0xNS4xNCAxNS4xMzUgMCA4LjM2IDYuNzggMTUuMTM1IDE1LjE0IDE1LjEzNXMxNS4xNC02Ljc3NSAxNS4xNC0xNS4xMzVjMC04LjM1OC02Ljc4LTE1LjEzNS0xNS4xNC0xNS4xMzV6Ii8+CiAgIDxnIGlkPSJjb2Zfb3JhbmdlX2hleC1jb3B5LTIiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzkyIDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNFOTU0MjAiIGQ9Im0zOS45MDYgMjAuMDEzYzAgMTAuOTg3LTguOTA1IDE5Ljg5My0xOS44OTIgMTkuODkzLTEwLjk4NiAwLTE5Ljg5Mi04LjkwNi0xOS44OTItMTkuODkzLTAuMDAwMzItMTAuOTg2IDguOTA1OS0xOS44OTEgMTkuODkyLTE5Ljg5MSAxMC45ODctMC4wMDAzMiAxOS44OTIgOC45MDU0IDE5Ljg5MiAxOS44OTF6Ii8+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiIGQ9Im05LjY5MDIgMjAuMDEzYzAgMS40MTMtMS4xNDUxIDIuNTU4LTIuNTU4NiAyLjU1OC0xLjQxMTcgMC0yLjU1NjktMS4xNDUtMi41NTY5LTIuNTU4IDAtMS40MTIgMS4xNDUyLTIuNTU3IDIuNTU2OS0yLjU1NyAxLjQxMzUgMCAyLjU1ODYgMS4xNDUgMi41NTg2IDIuNTU3em0xNC41NTEgMTIuNDM2YzAuNzA2IDEuMjIzIDIuMjcgMS42NDIgMy40OTMgMC45MzZzMS42NDItMi4yNyAwLjkzNi0zLjQ5NGMtMC43MDYtMS4yMjMtMi4yNy0xLjY0MS0zLjQ5My0wLjkzNS0xLjIyMyAwLjcwNy0xLjY0MiAyLjI3LTAuOTM2IDMuNDkzem00LjQyOS0yMi4zMTNjMC43MDYtMS4yMjM0IDAuMjg4LTIuNzg3NC0wLjkzNi0zLjQ5MjktMS4yMjItMC43MDYzLTIuNzg3LTAuMjg3Mi0zLjQ5MyAwLjkzNTctMC43MDYgMS4yMjMyLTAuMjg3IDIuNzg3MiAwLjkzNiAzLjQ5MzJzMi43ODggMC4yODcgMy40OTMtMC45MzZ6bS04LjY1NiAyLjU4NGMzLjgxMSAwIDYuOTM4IDIuOTIyIDcuMjY1IDYuNjQ4bDMuNzAxLTAuMDU5Yy0wLjE3NS0yLjc2OC0xLjM3Ni01LjI1OC0zLjIyNy03LjA5NC0wLjk4IDAuMzc4LTIuMTE2IDAuMzI2LTMuMDk3LTAuMjQtMC45ODEtMC41NjctMS41OTQtMS41MjYtMS43NTYtMi41NjUzLTAuOTItMC4yNDk4LTEuODg4LTAuMzgzNi0yLjg4Ni0wLjM4MzYtMS43NSAwLTMuNDA0IDAuNDA5My00Ljg3NCAxLjEzNjlsMS44MDEgMy4yMzRjMC45MzQtMC40MzMgMS45NzYtMC42NzcgMy4wNzMtMC42Nzd6bS03LjI5NCA3LjI5M2MwLTIuNDY3IDEuMjI2LTQuNjQ4IDMuMTAyLTUuOTY3bC0xLjkwMS0zLjE3N2MtMi4yMDEgMS40Ny0zLjg0MSAzLjcxMi00LjUzMjQgNi4zNDEgMC44MTg0IDAuNjYgMS4zNDM0IDEuNjcgMS4zNDM0IDIuODAzIDAgMS4xMzUtMC41MjUgMi4xNDUtMS4zNDM0IDIuODA0IDAuNjkxNCAyLjYyOSAyLjMzMTQgNC44NzIgNC41MzI0IDYuMzQzbDEuOTAxLTMuMTc3Yy0xLjg3Ni0xLjMyLTMuMTAyLTMuNTAxLTMuMTAyLTUuOTd6bTcuMjk0IDcuMjk1Yy0xLjA5NyAwLTIuMTM5LTAuMjQ0LTMuMDczLTAuNjc4bC0xLjgwMSAzLjIzNGMxLjQ3IDAuNzI5IDMuMTI0IDEuMTM3IDQuODc0IDEuMTM3IDAuOTk4IDAgMS45NjYtMC4xMzIgMi44ODYtMC4zODMgMC4xNjItMS4wMzkgMC43NzUtMS45OTkgMS43NTYtMi41NjQgMC45ODEtMC41NjcgMi4xMTctMC42MTggMy4wOTctMC4yNCAxLjg1MS0xLjgzNyAzLjA1Mi00LjMyNyAzLjIyNy03LjA5NmwtMy43MDEtMC4wNThjLTAuMzI3IDMuNzI2LTMuNDU0IDYuNjQ4LTcuMjY1IDYuNjQ4eiIvPgogICA8L2c+CiAgIDxnIGlkPSJsaW5rZWRpbi1jb3B5LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNCA1NikiPgogICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiIGZpbGw9IiMwMDcxQTEiLz4KICAgIDxnIGlkPSJHcm91cC0yIiBmaWxsPSIjRkZGRkZFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4IDgpIj4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBkPSJtMy4wNjk2IDAuNDA1NzhjMS41MDY4IDAgMi43MzE3IDEuMjMzMSAyLjczMTcgMi43NTA5IDAgMS41MTkzLTEuMjI0OSAyLjc1MjQtMi43MzE3IDIuNzUyNC0xLjUxMDkgMC0yLjczMzUtMS4yMzMxLTIuNzMzNS0yLjc1MjQgMC4wMDAwMS0xLjUxNzggMS4yMjI2LTIuNzUwOSAyLjczMzUtMi43NTA5di0wLjAwMDAyem0tMi4zNTc5IDIyLjg2Mmg0LjcxMzd2LTE1LjI3MWwtNC43MTM3LTAuMDAwMyAwLjAwMDAyIDE1LjI3MXoiLz4KICAgICA8cGF0aCBpZD0iRmlsbC01IiBkPSJtOC4zODIgNy45OTY3aDQuNTIxdjIuMDg3M2gwLjA2M2MwLjYyOS0xLjIwMTEgMi4xNjctMi40NjY5IDQuNDYtMi40NjY5IDQuNzczIDAgNS42NTQgMy4xNjI5IDUuNjU0IDcuMjczOXY4LjM3N2gtNC43MXYtNy40MjZjMC0xLjc3MS0wLjAzMi00LjA0OS0yLjQ0OS00LjA0OS0yLjQ1MyAwLTIuODI5IDEuOTI5LTIuODI5IDMuOTJ2Ny41NTVoLTQuNzF2LTE1LjI3MSIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJ5b3V0dWJlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAgNTYpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjRDkyNTJBIi8+CiAgICA8ZyBpZD0ieXRfaWNvbl9yZ2IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgMTEpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTQiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMyIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay00KSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWdvbiBpZD0iRmlsbC00IiBwb2ludHM9IjE3LjE4MiA5LjE4MzUgMTAuMzY4IDUuMzA3MyAxMC4zNjggMTMuMDYiIGZpbGw9IiNEOTI1MkEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iZ29vZ2xlLXBsdXMtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNERDRCMzkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyLWNvcHkiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEyIDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjMURBMUYyIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJMb2dvX194MjAxNF9fRklYRUQiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguOSAxMS40KSI+CiAgICAgPHBhdGggaWQ9IlNoYXBlIiBkPSJtNy40NCAxOS4xNWM4Ljg3IDAgMTMuNzItNy4zNSAxMy43Mi0xMy43MiAwLTAuMjEgMC0wLjQyLTAuMDEtMC42MiAwLjk0LTAuNjggMS43Ni0xLjUzIDIuNDEtMi41LTAuODYgMC4zOC0xLjc5IDAuNjQtMi43NyAwLjc2IDEtMC42IDEuNzYtMS41NCAyLjEyLTIuNjctMC45MyAwLjU1LTEuOTYgMC45NS0zLjA2IDEuMTctMC44OC0wLjk0LTIuMTMtMS41Mi0zLjUyLTEuNTItMi42NiAwLTQuODIgMi4xNi00LjgyIDQuODIgMCAwLjM4IDAuMDQgMC43NSAwLjEzIDEuMS00LjAxLTAuMi03LjU2LTIuMTItOS45NC01LjA0LTAuNDEgMC43MS0wLjY1IDEuNTQtMC42NSAyLjQyIDAgMS42NyAwLjg1IDMuMTUgMi4xNSA0LjAxLTAuNzktMC4wMi0xLjUzLTAuMjQtMi4xOC0wLjZ2MC4wNmMwIDIuMzQgMS42NiA0LjI4IDMuODcgNC43My0wLjQgMC4xMS0wLjgzIDAuMTctMS4yNyAwLjE3LTAuMzEgMC0wLjYxLTAuMDMtMC45MS0wLjA5IDAuNjEgMS45MiAyLjM5IDMuMzEgNC41IDMuMzUtMS42NSAxLjI5LTMuNzMgMi4wNi01Ljk5IDIuMDYtMC4zOSAwLTAuNzctMC4wMi0xLjE1LTAuMDcgMi4xMSAxLjM4IDQuNjUgMi4xOCA3LjM3IDIuMTgiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iaW5zdGFncmFtLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjRkIzOTU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIvPgogICAgPC9nPgogICAgPGcgaWQ9Ikdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2IDYpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTYiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtNSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay02KSIgZD0ibTE0LjIzNyAwLjAwODk4NTRjLTMuODY3IDAtNC4zNTE3IDAuMDE2Mzg5LTUuODcwMSAwLjA4NTY3My0xLjUxNTQgMC4wNjkxMTItMi41NTAzIDAuMzA5OC0zLjQ1NTggMC42NjE3Ni0wLjkzNjIgMC4zNjM3OC0xLjczMDEgMC44NTA1OC0yLjUyMTcgMS42NDItMC43OTE0IDAuNzkxNS0xLjI3ODIgMS41ODU1LTEuNjQyIDIuNTIxNy0wLjM1MTkzIDAuOTA1NS0wLjU5MjYxIDEuOTQwNC0wLjY2MTczIDMuNDU1Ny0wLjA2OTI4MSAxLjUxODUtMC4wODU2NyAyLjAwMzItMC4wODU2NyA1Ljg3MDIgMCAzLjg2NiAwLjAxNjM4OSA0LjM1MSAwLjA4NTY3MiA1Ljg2OSAwLjA2OTExOCAxLjUxNiAwLjMwOTggMi41NTEgMC42NjE3NiAzLjQ1NiAwLjM2Mzc3IDAuOTM2IDAuODUwNTcgMS43MyAxLjY0MiAyLjUyMiAwLjc5MTYgMC43OTEgMS41ODU1IDEuMjc4IDIuNTIxNyAxLjY0MiAwLjkwNTUgMC4zNTIgMS45NDA0IDAuNTkyIDMuNDU1OCAwLjY2MSAxLjUxODQgMC4wNyAyLjAwMzEgMC4wODYgNS44NzAxIDAuMDg2IDMuODY2IDAgNC4zNTEtMC4wMTYgNS44NjktMC4wODYgMS41MTYtMC4wNjkgMi41NTEtMC4zMDkgMy40NTYtMC42NjEgMC45MzYtMC4zNjQgMS43My0wLjg1MSAyLjUyMi0xLjY0MiAwLjc5MS0wLjc5MiAxLjI3OC0xLjU4NiAxLjY0Mi0yLjUyMiAwLjM1Mi0wLjkwNSAwLjU5Mi0xLjk0IDAuNjYxLTMuNDU2IDAuMDctMS41MTggMC4wODYtMi4wMDMgMC4wODYtNS44NjkgMC0zLjg2Ny0wLjAxNi00LjM1MTctMC4wODYtNS44NzAyLTAuMDY5LTEuNTE1My0wLjMwOS0yLjU1MDItMC42NjEtMy40NTU3LTAuMzY0LTAuOTM2Mi0wLjg1MS0xLjczMDItMS42NDItMi41MjE3LTAuNzkyLTAuNzkxNC0xLjU4Ni0xLjI3ODItMi41MjItMS42NDItMC45MDUtMC4zNTE5NC0xLjk0LTAuNTkyNjMtMy40NTYtMC42NjE3NC0xLjUxOC0wLjA2OTI4Ni0yLjAwMy0wLjA4NTY3NS01Ljg2OS0wLjA4NTY3NXptMCAyLjU2NTFjMy44MDEgMCA0LjI1MSAwLjAxNDYgNS43NTIgMC4wODMgMS4zODggMC4wNjMzIDIuMTQyIDAuMjk1MyAyLjY0NCAwLjQ5MDIgMC42NjQgMC4yNTgzIDEuMTM5IDAuNTY2OCAxLjYzNyAxLjA2NXMwLjgwNyAwLjk3MjQgMS4wNjUgMS42MzY5YzAuMTk1IDAuNTAxNyAwLjQyNyAxLjI1NTUgMC40OSAyLjY0MzYgMC4wNjggMS41MDEyIDAuMDgzIDEuOTUxMiAwLjA4MyA1Ljc1MzIgMCAzLjgwMS0wLjAxNSA0LjI1MS0wLjA4MyA1Ljc1Mi0wLjA2MyAxLjM4OC0wLjI5NSAyLjE0Mi0wLjQ5IDIuNjQ0LTAuMjU4IDAuNjY0LTAuNTY3IDEuMTM5LTEuMDY1IDEuNjM3cy0wLjk3MyAwLjgwNy0xLjYzNyAxLjA2NWMtMC41MDIgMC4xOTUtMS4yNTYgMC40MjctMi42NDQgMC40OS0xLjUwMSAwLjA2OC0xLjk1MSAwLjA4My01Ljc1MiAwLjA4My0zLjgwMiAwLTQuMjUyMi0wLjAxNS01Ljc1MzItMC4wODMtMS4zODgxLTAuMDYzLTIuMTQxOS0wLjI5NS0yLjY0MzUtMC40OS0wLjY2NDYtMC4yNTgtMS4xMzg4LTAuNTY3LTEuNjM3LTEuMDY1LTAuNDk4MS0wLjQ5OC0wLjgwNjctMC45NzMtMS4wNjUtMS42MzctMC4xOTQ5LTAuNTAyLTAuNDI2OC0xLjI1Ni0wLjQ5MDEtMi42NDQtMC4wNjg1LTEuNTAxLTAuMDgzMS0xLjk1MS0wLjA4MzEtNS43NTIgMC0zLjgwMiAwLjAxNDYtNC4yNTIgMC4wODMxLTUuNzUzMiAwLjA2MzMtMS4zODgxIDAuMjk1Mi0yLjE0MTkgMC40OTAxLTIuNjQzNiAwLjI1ODMtMC42NjQ1IDAuNTY2OC0xLjEzODcgMS4wNjUtMS42MzY5czAuOTcyNC0wLjgwNjcgMS42MzctMS4wNjVjMC41MDE2LTAuMTk0OSAxLjI1NTQtMC40MjY5IDIuNjQzNS0wLjQ5MDIgMS41MDEyLTAuMDY4NCAxLjk1MTItMC4wODMgNS43NTMyLTAuMDgzeiIvPgogICAgIDwvZz4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBmaWxsPSIjZmZmIiBkPSJtMTQuMjQgMTguOTkxYy0yLjYyMSAwLTQuNzQ1OS0yLjEyNS00Ljc0NTktNC43NDUgMC0yLjYyMSAyLjEyNDktNC43NDYgNC43NDU5LTQuNzQ2IDIuNjIgMCA0Ljc0NSAyLjEyNSA0Ljc0NSA0Ljc0NiAwIDIuNjItMi4xMjUgNC43NDUtNC43NDUgNC43NDV6bTAtMTIuMDU2Yy00LjAzOCAwLTcuMzExMSAzLjI3MzEtNy4zMTExIDcuMzExMSAwIDQuMDM3IDMuMjczMSA3LjMxIDcuMzExMSA3LjMxIDQuMDM3IDAgNy4zMS0zLjI3MyA3LjMxLTcuMzEgMC00LjAzOC0zLjI3My03LjMxMTEtNy4zMS03LjMxMTF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZmlsbD0iI2ZmZiIgZD0ibTIzLjU0MSA2LjY0NjFjMCAwLjk0MzUtMC43NjUgMS43MDgzLTEuNzA5IDEuNzA4My0wLjk0MyAwLTEuNzA4LTAuNzY0OC0xLjcwOC0xLjcwODMgMC0wLjk0MzYgMC43NjUtMS43MDg1IDEuNzA4LTEuNzA4NSAwLjk0NCAwIDEuNzA5IDAuNzY0OSAxLjcwOSAxLjcwODUiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQiIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iIzY2NiIgZD0ibTM1NiAzMi43MzVjLTcuMDQgMC0xMi43NC01LjctMTIuNzQtMTIuNzM2IDAtNy4wMzQgNS43LTEyLjczNCAxMi43NC0xMi43MzQgNy4wNC0wLjAwMDUgMTIuNzQgNS43IDEyLjc0IDEyLjczNCAwIDcuMDM2LTUuNyAxMi43MzYtMTIuNzQgMTIuNzM2em0yMC0xMi43MzVjMCAxMS4wNDUtOC45NSAyMC0yMCAyMHMtMjAtOC45NTUtMjAtMjBjMC0xMS4wNDYgOC45NS0yMCAyMC0yMHMyMCA4Ljk1MzYgMjAgMjB6bS0yMC0xNS4xMzRjLTguMzYgMC0xNS4xNCA2Ljc3NjUtMTUuMTQgMTUuMTM0IDAgOC4zNiA2Ljc4IDE1LjEzNSAxNS4xNCAxNS4xMzVzMTUuMTQtNi43NzUgMTUuMTQtMTUuMTM1YzAtOC4zNTgtNi43OC0xNS4xMzQtMTUuMTQtMTUuMTM0eiIvPgogICA8ZyBpZD0iY29mX29yYW5nZV9oZXgtY29weSIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTIpIj4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iIzY2NiIgZD0ibTM5LjkwNiAyMC4wMTNjMCAxMC45ODctOC45MDUgMTkuODkzLTE5Ljg5MiAxOS44OTMtMTAuOTg2IDAtMTkuODkyLTguOTA2LTE5Ljg5Mi0xOS44OTMtMC4wMDAzMi0xMC45ODYgOC45MDU5LTE5Ljg5MSAxOS44OTItMTkuODkxIDEwLjk4Ny0wLjAwMDMyIDE5Ljg5MiA4LjkwNTQgMTkuODkyIDE5Ljg5MXoiLz4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iI2ZmZiIgZD0ibTkuNjkwMiAyMC4wMTNjMCAxLjQxMy0xLjE0NTEgMi41NTgtMi41NTg2IDIuNTU4LTEuNDExNyAwLTIuNTU2OS0xLjE0NS0yLjU1NjktMi41NTggMC0xLjQxMiAxLjE0NTItMi41NTcgMi41NTY5LTIuNTU3IDEuNDEzNSAwIDIuNTU4NiAxLjE0NSAyLjU1ODYgMi41NTd6bTE0LjU1MSAxMi40MzZjMC43MDYgMS4yMjMgMi4yNyAxLjY0MiAzLjQ5MyAwLjkzNnMxLjY0Mi0yLjI3IDAuOTM2LTMuNDk0Yy0wLjcwNi0xLjIyMy0yLjI3LTEuNjQxLTMuNDkzLTAuOTM1LTEuMjIzIDAuNzA3LTEuNjQyIDIuMjctMC45MzYgMy40OTN6bTQuNDI5LTIyLjMxM2MwLjcwNi0xLjIyMzQgMC4yODgtMi43ODc0LTAuOTM2LTMuNDkyOS0xLjIyMi0wLjcwNjMtMi43ODctMC4yODcyLTMuNDkzIDAuOTM1Ny0wLjcwNiAxLjIyMzItMC4yODcgMi43ODcyIDAuOTM2IDMuNDkzMnMyLjc4OCAwLjI4NyAzLjQ5My0wLjkzNnptLTguNjU2IDIuNTg0YzMuODExIDAgNi45MzggMi45MjIgNy4yNjUgNi42NDhsMy43MDEtMC4wNTljLTAuMTc1LTIuNzY4LTEuMzc2LTUuMjU4LTMuMjI3LTcuMDk0LTAuOTggMC4zNzgtMi4xMTYgMC4zMjYtMy4wOTctMC4yNC0wLjk4MS0wLjU2Ny0xLjU5NC0xLjUyNi0xLjc1Ni0yLjU2NTMtMC45Mi0wLjI0OTgtMS44ODgtMC4zODM2LTIuODg2LTAuMzgzNi0xLjc1IDAtMy40MDQgMC40MDkzLTQuODc0IDEuMTM2OWwxLjgwMSAzLjIzNGMwLjkzNC0wLjQzMyAxLjk3Ni0wLjY3NyAzLjA3My0wLjY3N3ptLTcuMjk0IDcuMjkzYzAtMi40NjcgMS4yMjYtNC42NDggMy4xMDItNS45NjdsLTEuOTAxLTMuMTc3Yy0yLjIwMSAxLjQ3LTMuODQxIDMuNzEyLTQuNTMyNCA2LjM0MSAwLjgxODQgMC42NiAxLjM0MzQgMS42NyAxLjM0MzQgMi44MDMgMCAxLjEzNS0wLjUyNSAyLjE0NS0xLjM0MzQgMi44MDQgMC42OTE0IDIuNjI5IDIuMzMxNCA0Ljg3MiA0LjUzMjQgNi4zNDNsMS45MDEtMy4xNzdjLTEuODc2LTEuMzItMy4xMDItMy41MDEtMy4xMDItNS45N3ptNy4yOTQgNy4yOTVjLTEuMDk3IDAtMi4xMzktMC4yNDQtMy4wNzMtMC42NzhsLTEuODAxIDMuMjM0YzEuNDcgMC43MjkgMy4xMjQgMS4xMzcgNC44NzQgMS4xMzcgMC45OTggMCAxLjk2Ni0wLjEzMiAyLjg4Ni0wLjM4MyAwLjE2Mi0xLjAzOSAwLjc3NS0xLjk5OSAxLjc1Ni0yLjU2NCAwLjk4MS0wLjU2NyAyLjExNy0wLjYxOCAzLjA5Ny0wLjI0IDEuODUxLTEuODM3IDMuMDUyLTQuMzI3IDMuMjI3LTcuMDk2bC0zLjcwMS0wLjA1OGMtMC4zMjcgMy43MjYtMy40NTQgNi42NDgtNy4yNjUgNi42NDh6Ii8+CiAgIDwvZz4KICAgPGcgaWQ9Imdvb2dsZS1wbHVzIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM2NjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMikiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiI+CiAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0iTG9nb19feDIwMTRfX0ZJWEVEIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjkgMTEuNCkiPgogICAgIDxwYXRoIGlkPSJTaGFwZSIgZD0ibTcuNDQgMTkuMTVjOC44NyAwIDEzLjcyLTcuMzUgMTMuNzItMTMuNzIgMC0wLjIxIDAtMC40Mi0wLjAxLTAuNjIgMC45NC0wLjY4IDEuNzYtMS41MyAyLjQxLTIuNS0wLjg2IDAuMzgtMS43OSAwLjY0LTIuNzcgMC43NiAxLTAuNiAxLjc2LTEuNTQgMi4xMi0yLjY3LTAuOTMgMC41NS0xLjk2IDAuOTUtMy4wNiAxLjE3LTAuODgtMC45NC0yLjEzLTEuNTItMy41Mi0xLjUyLTIuNjYgMC00LjgyIDIuMTYtNC44MiA0LjgyIDAgMC4zOCAwLjA0IDAuNzUgMC4xMyAxLjEtNC4wMS0wLjItNy41Ni0yLjEyLTkuOTQtNS4wNC0wLjQxIDAuNzEtMC42NSAxLjU0LTAuNjUgMi40MiAwIDEuNjcgMC44NSAzLjE1IDIuMTUgNC4wMS0wLjc5LTAuMDItMS41My0wLjI0LTIuMTgtMC42djAuMDZjMCAyLjM0IDEuNjYgNC4yOCAzLjg3IDQuNzMtMC40IDAuMTEtMC44MyAwLjE3LTEuMjcgMC4xNy0wLjMxIDAtMC42MS0wLjAzLTAuOTEtMC4wOSAwLjYxIDEuOTIgMi4zOSAzLjMxIDQuNSAzLjM1LTEuNjUgMS4yOS0zLjczIDIuMDYtNS45OSAyLjA2LTAuMzkgMC0wLjc3LTAuMDItMS4xNS0wLjA3IDIuMTEgMS4zOCA0LjY1IDIuMTggNy4zNyAyLjE4Ii8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImZhY2Vib2siPgogICAgPGcgaWQ9InBhdGg0MjQxIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxtYXNrIGlkPSJtYXNrLTgiIGZpbGw9IndoaXRlIj4KICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC03Ii8+CiAgICAgPC9tYXNrPgogICAgIDx1c2UgaWQ9Ik1hc2siIHhsaW5rOmhyZWY9IiNwYXRoLTciIGZpbGw9IiM2NjY2NjYiLz4KICAgICA8cGF0aCBtYXNrPSJ1cmwoI21hc2stOCkiIGQ9Im0zMC4wMzcgMTAuMDAxYy0zLjkyIDAtNi42MDMgMi40NDktNi42MDMgNi45NDV2My41MjZoLTQuNDM0djUuMjU1aDQuNDM0djE0LjI3M2MxLjgyLTAuMjQ2IDMuNi0wLjcyOCA1LjI5OS0xLjQzOHYtMTIuODM1aDQuNDI0bDAuNjYtNS4yNTVoLTUuMDg0di0zLjAwMmMwLTEuNTIyIDAuNDc5LTMuMDg1IDIuNTUtMi41NjNoMi43MTd2LTQuN2MtMC40NjktMC4wNjQtMi4wODUtMC4yMDctMy45NjMtMC4yMDd2MC4wMDF6IiBmaWxsPSIjZmZmIi8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImxpbmtlZGluIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjQpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjNjY2Ii8+CiAgICA8ZyBpZD0iR3JvdXAtMiIgZmlsbD0iI0ZGRkZGRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSI+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZD0ibTMuMDY5NiAwLjQwNTc4YzEuNTA2OCAwIDIuNzMxNyAxLjIzMzEgMi43MzE3IDIuNzUwOSAwIDEuNTE5My0xLjIyNDkgMi43NTI0LTIuNzMxNyAyLjc1MjQtMS41MTA5IDAtMi43MzM1LTEuMjMzMS0yLjczMzUtMi43NTI0IDAuMDAwMDEtMS41MTc4IDEuMjIyNi0yLjc1MDkgMi43MzM1LTIuNzUwOXYtMC4wMDAwMnptLTIuMzU3OSAyMi44NjJoNC43MTM3di0xNS4yNzFsLTQuNzEzNy0wLjAwMDMgMC4wMDAwMiAxNS4yNzF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZD0ibTguMzgyIDcuOTk2N2g0LjUyMXYyLjA4NzNoMC4wNjNjMC42MjktMS4yMDExIDIuMTY3LTIuNDY2OSA0LjQ2LTIuNDY2OSA0Ljc3MyAwIDUuNjU0IDMuMTYyOSA1LjY1NCA3LjI3Mzl2OC4zNzdoLTQuNzF2LTcuNDI2YzAtMS43NzEtMC4wMzItNC4wNDktMi40NDktNC4wNDktMi40NTMgMC0yLjgyOSAxLjkyOS0yLjgyOSAzLjkydjcuNTU1aC00Ljcxdi0xNS4yNzEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0ieW91dHViZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwKSI+CiAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIgZmlsbD0iIzY2NiIvPgogICAgPGcgaWQ9Inl0X2ljb25fcmdiIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3IDExKSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMCIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC05Ii8+CiAgICAgIDwvbWFzaz4KICAgICAgPHBhdGggaWQ9IkZpbGwtMSIgZmlsbD0iI2ZmZiIgbWFzaz0idXJsKCNtYXNrLTEwKSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWxpbmUgaWQ9IkZpbGwtNCIgcG9pbnRzPSIxMC4zNjggMTMuMDYgMTcuMTgyIDkuMTgzNSAxMC4zNjggNS4zMDczIDEwLjM2OCAxMy4wNiIgZmlsbD0iIzY2NiIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJpbnN0YWdyYW0iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OCkiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMiIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xMSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay0xMikiIGQ9Im0xNC4yMzcgMC4wMDg5ODU0Yy0zLjg2NyAwLTQuMzUxNyAwLjAxNjM4OS01Ljg3MDEgMC4wODU2NzMtMS41MTU0IDAuMDY5MTEyLTIuNTUwMyAwLjMwOTgtMy40NTU4IDAuNjYxNzYtMC45MzYyIDAuMzYzNzgtMS43MzAxIDAuODUwNTgtMi41MjE3IDEuNjQyLTAuNzkxNCAwLjc5MTUtMS4yNzgyIDEuNTg1NS0xLjY0MiAyLjUyMTctMC4zNTE5MyAwLjkwNTUtMC41OTI2MSAxLjk0MDQtMC42NjE3MyAzLjQ1NTctMC4wNjkyODEgMS41MTg1LTAuMDg1NjcgMi4wMDMyLTAuMDg1NjcgNS44NzAyIDAgMy44NjYgMC4wMTYzODkgNC4zNTEgMC4wODU2NzIgNS44NjkgMC4wNjkxMTggMS41MTYgMC4zMDk4IDIuNTUxIDAuNjYxNzYgMy40NTYgMC4zNjM3NyAwLjkzNiAwLjg1MDU3IDEuNzMgMS42NDIgMi41MjIgMC43OTE2IDAuNzkxIDEuNTg1NSAxLjI3OCAyLjUyMTcgMS42NDIgMC45MDU1IDAuMzUyIDEuOTQwNCAwLjU5MiAzLjQ1NTggMC42NjEgMS41MTg0IDAuMDcgMi4wMDMxIDAuMDg2IDUuODcwMSAwLjA4NiAzLjg2NiAwIDQuMzUxLTAuMDE2IDUuODY5LTAuMDg2IDEuNTE2LTAuMDY5IDIuNTUxLTAuMzA5IDMuNDU2LTAuNjYxIDAuOTM2LTAuMzY0IDEuNzMtMC44NTEgMi41MjItMS42NDIgMC43OTEtMC43OTIgMS4yNzgtMS41ODYgMS42NDItMi41MjIgMC4zNTItMC45MDUgMC41OTItMS45NCAwLjY2MS0zLjQ1NiAwLjA3LTEuNTE4IDAuMDg2LTIuMDAzIDAuMDg2LTUuODY5IDAtMy44NjctMC4wMTYtNC4zNTE3LTAuMDg2LTUuODcwMi0wLjA2OS0xLjUxNTMtMC4zMDktMi41NTAyLTAuNjYxLTMuNDU1Ny0wLjM2NC0wLjkzNjItMC44NTEtMS43MzAyLTEuNjQyLTIuNTIxNy0wLjc5Mi0wLjc5MTQtMS41ODYtMS4yNzgyLTIuNTIyLTEuNjQyLTAuOTA1LTAuMzUxOTQtMS45NC0wLjU5MjYzLTMuNDU2LTAuNjYxNzQtMS41MTgtMC4wNjkyODYtMi4wMDMtMC4wODU2NzUtNS44NjktMC4wODU2NzV6bTAgMi41NjUxYzMuODAxIDAgNC4yNTEgMC4wMTQ2IDUuNzUyIDAuMDgzIDEuMzg4IDAuMDYzMyAyLjE0MiAwLjI5NTMgMi42NDQgMC40OTAyIDAuNjY0IDAuMjU4MyAxLjEzOSAwLjU2NjggMS42MzcgMS4wNjVzMC44MDcgMC45NzI0IDEuMDY1IDEuNjM2OWMwLjE5NSAwLjUwMTcgMC40MjcgMS4yNTU1IDAuNDkgMi42NDM2IDAuMDY4IDEuNTAxMiAwLjA4MyAxLjk1MTIgMC4wODMgNS43NTMyIDAgMy44MDEtMC4wMTUgNC4yNTEtMC4wODMgNS43NTItMC4wNjMgMS4zODgtMC4yOTUgMi4xNDItMC40OSAyLjY0NC0wLjI1OCAwLjY2NC0wLjU2NyAxLjEzOS0xLjA2NSAxLjYzN3MtMC45NzMgMC44MDctMS42MzcgMS4wNjVjLTAuNTAyIDAuMTk1LTEuMjU2IDAuNDI3LTIuNjQ0IDAuNDktMS41MDEgMC4wNjgtMS45NTEgMC4wODMtNS43NTIgMC4wODMtMy44MDIgMC00LjI1MjItMC4wMTUtNS43NTMyLTAuMDgzLTEuMzg4MS0wLjA2My0yLjE0MTktMC4yOTUtMi42NDM1LTAuNDktMC42NjQ2LTAuMjU4LTEuMTM4OC0wLjU2Ny0xLjYzNy0xLjA2NS0wLjQ5ODEtMC40OTgtMC44MDY3LTAuOTczLTEuMDY1LTEuNjM3LTAuMTk0OS0wLjUwMi0wLjQyNjgtMS4yNTYtMC40OTAxLTIuNjQ0LTAuMDY4NS0xLjUwMS0wLjA4MzEtMS45NTEtMC4wODMxLTUuNzUyIDAtMy44MDIgMC4wMTQ2LTQuMjUyIDAuMDgzMS01Ljc1MzIgMC4wNjMzLTEuMzg4MSAwLjI5NTItMi4xNDE5IDAuNDkwMS0yLjY0MzYgMC4yNTgzLTAuNjY0NSAwLjU2NjgtMS4xMzg3IDEuMDY1LTEuNjM2OXMwLjk3MjQtMC44MDY3IDEuNjM3LTEuMDY1YzAuNTAxNi0wLjE5NDkgMS4yNTU0LTAuNDI2OSAyLjY0MzUtMC40OTAyIDEuNTAxMi0wLjA2ODQgMS45NTEyLTAuMDgzIDUuNzUzMi0wLjA4M3oiLz4KICAgICA8L2c+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZmlsbD0iI2ZmZiIgZD0ibTE0LjI0IDE4Ljk5MWMtMi42MjEgMC00Ljc0NTktMi4xMjUtNC43NDU5LTQuNzQ1IDAtMi42MjEgMi4xMjQ5LTQuNzQ2IDQuNzQ1OS00Ljc0NiAyLjYyIDAgNC43NDUgMi4xMjUgNC43NDUgNC43NDYgMCAyLjYyLTIuMTI1IDQuNzQ1LTQuNzQ1IDQuNzQ1em0wLTEyLjA1NmMtNC4wMzggMC03LjMxMTEgMy4yNzMxLTcuMzExMSA3LjMxMTEgMCA0LjAzNyAzLjI3MzEgNy4zMSA3LjMxMTEgNy4zMSA0LjAzNyAwIDcuMzEtMy4yNzMgNy4zMS03LjMxIDAtNC4wMzgtMy4yNzMtNy4zMTExLTcuMzEtNy4zMTExeiIvPgogICAgIDxwYXRoIGlkPSJGaWxsLTUiIGZpbGw9IiNmZmYiIGQ9Im0yMy41NDEgNi42NDYxYzAgMC45NDM1LTAuNzY1IDEuNzA4My0xLjcwOSAxLjcwODMtMC45NDMgMC0xLjcwOC0wLjc2NDgtMS43MDgtMS43MDgzIDAtMC45NDM2IDAuNzY1LTEuNzA4NSAxLjcwOC0xLjcwODUgMC45NDQgMCAxLjcwOSAwLjc2NDkgMS43MDkgMS43MDg1Ii8+CiAgICA8L2c+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=");background-size:430px 96px;height:42px;width:42px;background-position:-111px 0}.p-icon--twitter:hover{background-position-y:-56px}.p-icon--instagram{background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9Ijk2cHgiIHdpZHRoPSI0MzJweCIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQzMiA5NiI+PCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ni4yICg0NDQ5NikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiA8dGl0bGU+dmFuaWxsYS1zb2NpYWwtc3ByaXRlPC90aXRsZT4KIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogPGRlZnM+CiAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICA8cG9seWdvbiBpZD0icGF0aC0zIiBwb2ludHM9IjAuMDA4ODg3MSAxOC4zNjcgMC4wMDg4ODcxIDAuMDA1OTI0OCAyNi4wNjkgMC4wMDU5MjQ4IDI2LjA2OSAxOC4zNjciLz4KICA8cG9seWdvbiBpZD0icGF0aC01IiBwb2ludHM9IjAgMjguNDc5IDI4LjQ3MyAyOC40NzkgMjguNDczIDAuMDA4OTg1NCAwIDAuMDA4OTg1NCIvPgogIDxjaXJjbGUgaWQ9InBhdGgtNyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgPHBvbHlnb24gaWQ9InBhdGgtOSIgcG9pbnRzPSIwLjAwODg4NzEgMTguMzY3IDAuMDA4ODg3MSAwLjAwNTkyNDggMjYuMDY5IDAuMDA1OTI0OCAyNi4wNjkgMTguMzY3Ii8+CiAgPHBvbHlnb24gaWQ9InBhdGgtMTEiIHBvaW50cz0iMCAyOC40NzkgMjguNDczIDI4LjQ3OSAyOC40NzMgMC4wMDg5ODU0IDAgMC4wMDg5ODU0Ii8+CiA8L2RlZnM+CiA8ZyBpZD0iUGFnZS0xIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9Im5vbmUiPgogIDxnIGlkPSJ2YW5pbGxhLXNvY2lhbC1zcHJpdGUiPgogICA8ZyBpZD0iZmFjZWJvay1jb3B5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDU2KSI+CiAgICA8ZyBpZD0icGF0aDQyNDEiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiLz4KICAgICA8L21hc2s+CiAgICAgPHVzZSBpZD0iTWFzayIgeGxpbms6aHJlZj0iI3BhdGgtMSIgZmlsbD0iIzNCNTk5OCIvPgogICAgIDxwYXRoIG1hc2s9InVybCgjbWFzay0yKSIgZD0ibTMwLjAzNyAxMC4wMDFjLTMuOTIgMC02LjYwMyAyLjQ0OS02LjYwMyA2Ljk0NXYzLjUyNmgtNC40MzR2NS4yNTVoNC40MzR2MTQuMjczYzEuODItMC4yNDYgMy42LTAuNzI4IDUuMjk5LTEuNDM4di0xMi44MzVoNC40MjRsMC42Ni01LjI1NWgtNS4wODR2LTMuMDAyYzAtMS41MjIgMC40NzktMy4wODUgMi41NS0yLjU2M2gyLjcxN3YtNC43Yy0wLjQ2OS0wLjA2NC0yLjA4NS0wLjIwNy0zLjk2My0wLjIwN3YwLjAwMXoiIGZpbGw9IiNmZmYiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM3NzI5NTMiIGQ9Im0zNTYgODguNzM1Yy03LjA0IDAtMTIuNzQtNS43LTEyLjc0LTEyLjczNiAwLTcuMDM0IDUuNy0xMi43MzQgMTIuNzQtMTIuNzM0czEyLjc0IDUuNyAxMi43NCAxMi43MzRjMCA3LjAzNi01LjcgMTIuNzM2LTEyLjc0IDEyLjczNnptMjAtMTIuNzM1YzAgMTEuMDQ1LTguOTUgMjAtMjAgMjBzLTIwLTguOTU1LTIwLTIwYzAtMTEuMDQ2IDguOTUtMjAgMjAtMjBzMjAgOC45NTQgMjAgMjB6bS0yMC0xNS4xMzVjLTguMzYgMC0xNS4xNCA2Ljc3Ny0xNS4xNCAxNS4xMzUgMCA4LjM2IDYuNzggMTUuMTM1IDE1LjE0IDE1LjEzNXMxNS4xNC02Ljc3NSAxNS4xNC0xNS4xMzVjMC04LjM1OC02Ljc4LTE1LjEzNS0xNS4xNC0xNS4xMzV6Ii8+CiAgIDxnIGlkPSJjb2Zfb3JhbmdlX2hleC1jb3B5LTIiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzkyIDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNFOTU0MjAiIGQ9Im0zOS45MDYgMjAuMDEzYzAgMTAuOTg3LTguOTA1IDE5Ljg5My0xOS44OTIgMTkuODkzLTEwLjk4NiAwLTE5Ljg5Mi04LjkwNi0xOS44OTItMTkuODkzLTAuMDAwMzItMTAuOTg2IDguOTA1OS0xOS44OTEgMTkuODkyLTE5Ljg5MSAxMC45ODctMC4wMDAzMiAxOS44OTIgOC45MDU0IDE5Ljg5MiAxOS44OTF6Ii8+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiIGQ9Im05LjY5MDIgMjAuMDEzYzAgMS40MTMtMS4xNDUxIDIuNTU4LTIuNTU4NiAyLjU1OC0xLjQxMTcgMC0yLjU1NjktMS4xNDUtMi41NTY5LTIuNTU4IDAtMS40MTIgMS4xNDUyLTIuNTU3IDIuNTU2OS0yLjU1NyAxLjQxMzUgMCAyLjU1ODYgMS4xNDUgMi41NTg2IDIuNTU3em0xNC41NTEgMTIuNDM2YzAuNzA2IDEuMjIzIDIuMjcgMS42NDIgMy40OTMgMC45MzZzMS42NDItMi4yNyAwLjkzNi0zLjQ5NGMtMC43MDYtMS4yMjMtMi4yNy0xLjY0MS0zLjQ5My0wLjkzNS0xLjIyMyAwLjcwNy0xLjY0MiAyLjI3LTAuOTM2IDMuNDkzem00LjQyOS0yMi4zMTNjMC43MDYtMS4yMjM0IDAuMjg4LTIuNzg3NC0wLjkzNi0zLjQ5MjktMS4yMjItMC43MDYzLTIuNzg3LTAuMjg3Mi0zLjQ5MyAwLjkzNTctMC43MDYgMS4yMjMyLTAuMjg3IDIuNzg3MiAwLjkzNiAzLjQ5MzJzMi43ODggMC4yODcgMy40OTMtMC45MzZ6bS04LjY1NiAyLjU4NGMzLjgxMSAwIDYuOTM4IDIuOTIyIDcuMjY1IDYuNjQ4bDMuNzAxLTAuMDU5Yy0wLjE3NS0yLjc2OC0xLjM3Ni01LjI1OC0zLjIyNy03LjA5NC0wLjk4IDAuMzc4LTIuMTE2IDAuMzI2LTMuMDk3LTAuMjQtMC45ODEtMC41NjctMS41OTQtMS41MjYtMS43NTYtMi41NjUzLTAuOTItMC4yNDk4LTEuODg4LTAuMzgzNi0yLjg4Ni0wLjM4MzYtMS43NSAwLTMuNDA0IDAuNDA5My00Ljg3NCAxLjEzNjlsMS44MDEgMy4yMzRjMC45MzQtMC40MzMgMS45NzYtMC42NzcgMy4wNzMtMC42Nzd6bS03LjI5NCA3LjI5M2MwLTIuNDY3IDEuMjI2LTQuNjQ4IDMuMTAyLTUuOTY3bC0xLjkwMS0zLjE3N2MtMi4yMDEgMS40Ny0zLjg0MSAzLjcxMi00LjUzMjQgNi4zNDEgMC44MTg0IDAuNjYgMS4zNDM0IDEuNjcgMS4zNDM0IDIuODAzIDAgMS4xMzUtMC41MjUgMi4xNDUtMS4zNDM0IDIuODA0IDAuNjkxNCAyLjYyOSAyLjMzMTQgNC44NzIgNC41MzI0IDYuMzQzbDEuOTAxLTMuMTc3Yy0xLjg3Ni0xLjMyLTMuMTAyLTMuNTAxLTMuMTAyLTUuOTd6bTcuMjk0IDcuMjk1Yy0xLjA5NyAwLTIuMTM5LTAuMjQ0LTMuMDczLTAuNjc4bC0xLjgwMSAzLjIzNGMxLjQ3IDAuNzI5IDMuMTI0IDEuMTM3IDQuODc0IDEuMTM3IDAuOTk4IDAgMS45NjYtMC4xMzIgMi44ODYtMC4zODMgMC4xNjItMS4wMzkgMC43NzUtMS45OTkgMS43NTYtMi41NjQgMC45ODEtMC41NjcgMi4xMTctMC42MTggMy4wOTctMC4yNCAxLjg1MS0xLjgzNyAzLjA1Mi00LjMyNyAzLjIyNy03LjA5NmwtMy43MDEtMC4wNThjLTAuMzI3IDMuNzI2LTMuNDU0IDYuNjQ4LTcuMjY1IDYuNjQ4eiIvPgogICA8L2c+CiAgIDxnIGlkPSJsaW5rZWRpbi1jb3B5LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNCA1NikiPgogICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiIGZpbGw9IiMwMDcxQTEiLz4KICAgIDxnIGlkPSJHcm91cC0yIiBmaWxsPSIjRkZGRkZFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4IDgpIj4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBkPSJtMy4wNjk2IDAuNDA1NzhjMS41MDY4IDAgMi43MzE3IDEuMjMzMSAyLjczMTcgMi43NTA5IDAgMS41MTkzLTEuMjI0OSAyLjc1MjQtMi43MzE3IDIuNzUyNC0xLjUxMDkgMC0yLjczMzUtMS4yMzMxLTIuNzMzNS0yLjc1MjQgMC4wMDAwMS0xLjUxNzggMS4yMjI2LTIuNzUwOSAyLjczMzUtMi43NTA5di0wLjAwMDAyem0tMi4zNTc5IDIyLjg2Mmg0LjcxMzd2LTE1LjI3MWwtNC43MTM3LTAuMDAwMyAwLjAwMDAyIDE1LjI3MXoiLz4KICAgICA8cGF0aCBpZD0iRmlsbC01IiBkPSJtOC4zODIgNy45OTY3aDQuNTIxdjIuMDg3M2gwLjA2M2MwLjYyOS0xLjIwMTEgMi4xNjctMi40NjY5IDQuNDYtMi40NjY5IDQuNzczIDAgNS42NTQgMy4xNjI5IDUuNjU0IDcuMjczOXY4LjM3N2gtNC43MXYtNy40MjZjMC0xLjc3MS0wLjAzMi00LjA0OS0yLjQ0OS00LjA0OS0yLjQ1MyAwLTIuODI5IDEuOTI5LTIuODI5IDMuOTJ2Ny41NTVoLTQuNzF2LTE1LjI3MSIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJ5b3V0dWJlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAgNTYpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjRDkyNTJBIi8+CiAgICA8ZyBpZD0ieXRfaWNvbl9yZ2IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgMTEpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTQiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMyIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay00KSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWdvbiBpZD0iRmlsbC00IiBwb2ludHM9IjE3LjE4MiA5LjE4MzUgMTAuMzY4IDUuMzA3MyAxMC4zNjggMTMuMDYiIGZpbGw9IiNEOTI1MkEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iZ29vZ2xlLXBsdXMtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNERDRCMzkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyLWNvcHkiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEyIDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjMURBMUYyIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJMb2dvX194MjAxNF9fRklYRUQiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguOSAxMS40KSI+CiAgICAgPHBhdGggaWQ9IlNoYXBlIiBkPSJtNy40NCAxOS4xNWM4Ljg3IDAgMTMuNzItNy4zNSAxMy43Mi0xMy43MiAwLTAuMjEgMC0wLjQyLTAuMDEtMC42MiAwLjk0LTAuNjggMS43Ni0xLjUzIDIuNDEtMi41LTAuODYgMC4zOC0xLjc5IDAuNjQtMi43NyAwLjc2IDEtMC42IDEuNzYtMS41NCAyLjEyLTIuNjctMC45MyAwLjU1LTEuOTYgMC45NS0zLjA2IDEuMTctMC44OC0wLjk0LTIuMTMtMS41Mi0zLjUyLTEuNTItMi42NiAwLTQuODIgMi4xNi00LjgyIDQuODIgMCAwLjM4IDAuMDQgMC43NSAwLjEzIDEuMS00LjAxLTAuMi03LjU2LTIuMTItOS45NC01LjA0LTAuNDEgMC43MS0wLjY1IDEuNTQtMC42NSAyLjQyIDAgMS42NyAwLjg1IDMuMTUgMi4xNSA0LjAxLTAuNzktMC4wMi0xLjUzLTAuMjQtMi4xOC0wLjZ2MC4wNmMwIDIuMzQgMS42NiA0LjI4IDMuODcgNC43My0wLjQgMC4xMS0wLjgzIDAuMTctMS4yNyAwLjE3LTAuMzEgMC0wLjYxLTAuMDMtMC45MS0wLjA5IDAuNjEgMS45MiAyLjM5IDMuMzEgNC41IDMuMzUtMS42NSAxLjI5LTMuNzMgMi4wNi01Ljk5IDIuMDYtMC4zOSAwLTAuNzctMC4wMi0xLjE1LTAuMDcgMi4xMSAxLjM4IDQuNjUgMi4xOCA3LjM3IDIuMTgiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iaW5zdGFncmFtLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjRkIzOTU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIvPgogICAgPC9nPgogICAgPGcgaWQ9Ikdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2IDYpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTYiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtNSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay02KSIgZD0ibTE0LjIzNyAwLjAwODk4NTRjLTMuODY3IDAtNC4zNTE3IDAuMDE2Mzg5LTUuODcwMSAwLjA4NTY3My0xLjUxNTQgMC4wNjkxMTItMi41NTAzIDAuMzA5OC0zLjQ1NTggMC42NjE3Ni0wLjkzNjIgMC4zNjM3OC0xLjczMDEgMC44NTA1OC0yLjUyMTcgMS42NDItMC43OTE0IDAuNzkxNS0xLjI3ODIgMS41ODU1LTEuNjQyIDIuNTIxNy0wLjM1MTkzIDAuOTA1NS0wLjU5MjYxIDEuOTQwNC0wLjY2MTczIDMuNDU1Ny0wLjA2OTI4MSAxLjUxODUtMC4wODU2NyAyLjAwMzItMC4wODU2NyA1Ljg3MDIgMCAzLjg2NiAwLjAxNjM4OSA0LjM1MSAwLjA4NTY3MiA1Ljg2OSAwLjA2OTExOCAxLjUxNiAwLjMwOTggMi41NTEgMC42NjE3NiAzLjQ1NiAwLjM2Mzc3IDAuOTM2IDAuODUwNTcgMS43MyAxLjY0MiAyLjUyMiAwLjc5MTYgMC43OTEgMS41ODU1IDEuMjc4IDIuNTIxNyAxLjY0MiAwLjkwNTUgMC4zNTIgMS45NDA0IDAuNTkyIDMuNDU1OCAwLjY2MSAxLjUxODQgMC4wNyAyLjAwMzEgMC4wODYgNS44NzAxIDAuMDg2IDMuODY2IDAgNC4zNTEtMC4wMTYgNS44NjktMC4wODYgMS41MTYtMC4wNjkgMi41NTEtMC4zMDkgMy40NTYtMC42NjEgMC45MzYtMC4zNjQgMS43My0wLjg1MSAyLjUyMi0xLjY0MiAwLjc5MS0wLjc5MiAxLjI3OC0xLjU4NiAxLjY0Mi0yLjUyMiAwLjM1Mi0wLjkwNSAwLjU5Mi0xLjk0IDAuNjYxLTMuNDU2IDAuMDctMS41MTggMC4wODYtMi4wMDMgMC4wODYtNS44NjkgMC0zLjg2Ny0wLjAxNi00LjM1MTctMC4wODYtNS44NzAyLTAuMDY5LTEuNTE1My0wLjMwOS0yLjU1MDItMC42NjEtMy40NTU3LTAuMzY0LTAuOTM2Mi0wLjg1MS0xLjczMDItMS42NDItMi41MjE3LTAuNzkyLTAuNzkxNC0xLjU4Ni0xLjI3ODItMi41MjItMS42NDItMC45MDUtMC4zNTE5NC0xLjk0LTAuNTkyNjMtMy40NTYtMC42NjE3NC0xLjUxOC0wLjA2OTI4Ni0yLjAwMy0wLjA4NTY3NS01Ljg2OS0wLjA4NTY3NXptMCAyLjU2NTFjMy44MDEgMCA0LjI1MSAwLjAxNDYgNS43NTIgMC4wODMgMS4zODggMC4wNjMzIDIuMTQyIDAuMjk1MyAyLjY0NCAwLjQ5MDIgMC42NjQgMC4yNTgzIDEuMTM5IDAuNTY2OCAxLjYzNyAxLjA2NXMwLjgwNyAwLjk3MjQgMS4wNjUgMS42MzY5YzAuMTk1IDAuNTAxNyAwLjQyNyAxLjI1NTUgMC40OSAyLjY0MzYgMC4wNjggMS41MDEyIDAuMDgzIDEuOTUxMiAwLjA4MyA1Ljc1MzIgMCAzLjgwMS0wLjAxNSA0LjI1MS0wLjA4MyA1Ljc1Mi0wLjA2MyAxLjM4OC0wLjI5NSAyLjE0Mi0wLjQ5IDIuNjQ0LTAuMjU4IDAuNjY0LTAuNTY3IDEuMTM5LTEuMDY1IDEuNjM3cy0wLjk3MyAwLjgwNy0xLjYzNyAxLjA2NWMtMC41MDIgMC4xOTUtMS4yNTYgMC40MjctMi42NDQgMC40OS0xLjUwMSAwLjA2OC0xLjk1MSAwLjA4My01Ljc1MiAwLjA4My0zLjgwMiAwLTQuMjUyMi0wLjAxNS01Ljc1MzItMC4wODMtMS4zODgxLTAuMDYzLTIuMTQxOS0wLjI5NS0yLjY0MzUtMC40OS0wLjY2NDYtMC4yNTgtMS4xMzg4LTAuNTY3LTEuNjM3LTEuMDY1LTAuNDk4MS0wLjQ5OC0wLjgwNjctMC45NzMtMS4wNjUtMS42MzctMC4xOTQ5LTAuNTAyLTAuNDI2OC0xLjI1Ni0wLjQ5MDEtMi42NDQtMC4wNjg1LTEuNTAxLTAuMDgzMS0xLjk1MS0wLjA4MzEtNS43NTIgMC0zLjgwMiAwLjAxNDYtNC4yNTIgMC4wODMxLTUuNzUzMiAwLjA2MzMtMS4zODgxIDAuMjk1Mi0yLjE0MTkgMC40OTAxLTIuNjQzNiAwLjI1ODMtMC42NjQ1IDAuNTY2OC0xLjEzODcgMS4wNjUtMS42MzY5czAuOTcyNC0wLjgwNjcgMS42MzctMS4wNjVjMC41MDE2LTAuMTk0OSAxLjI1NTQtMC40MjY5IDIuNjQzNS0wLjQ5MDIgMS41MDEyLTAuMDY4NCAxLjk1MTItMC4wODMgNS43NTMyLTAuMDgzeiIvPgogICAgIDwvZz4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBmaWxsPSIjZmZmIiBkPSJtMTQuMjQgMTguOTkxYy0yLjYyMSAwLTQuNzQ1OS0yLjEyNS00Ljc0NTktNC43NDUgMC0yLjYyMSAyLjEyNDktNC43NDYgNC43NDU5LTQuNzQ2IDIuNjIgMCA0Ljc0NSAyLjEyNSA0Ljc0NSA0Ljc0NiAwIDIuNjItMi4xMjUgNC43NDUtNC43NDUgNC43NDV6bTAtMTIuMDU2Yy00LjAzOCAwLTcuMzExMSAzLjI3MzEtNy4zMTExIDcuMzExMSAwIDQuMDM3IDMuMjczMSA3LjMxIDcuMzExMSA3LjMxIDQuMDM3IDAgNy4zMS0zLjI3MyA3LjMxLTcuMzEgMC00LjAzOC0zLjI3My03LjMxMTEtNy4zMS03LjMxMTF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZmlsbD0iI2ZmZiIgZD0ibTIzLjU0MSA2LjY0NjFjMCAwLjk0MzUtMC43NjUgMS43MDgzLTEuNzA5IDEuNzA4My0wLjk0MyAwLTEuNzA4LTAuNzY0OC0xLjcwOC0xLjcwODMgMC0wLjk0MzYgMC43NjUtMS43MDg1IDEuNzA4LTEuNzA4NSAwLjk0NCAwIDEuNzA5IDAuNzY0OSAxLjcwOSAxLjcwODUiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQiIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iIzY2NiIgZD0ibTM1NiAzMi43MzVjLTcuMDQgMC0xMi43NC01LjctMTIuNzQtMTIuNzM2IDAtNy4wMzQgNS43LTEyLjczNCAxMi43NC0xMi43MzQgNy4wNC0wLjAwMDUgMTIuNzQgNS43IDEyLjc0IDEyLjczNCAwIDcuMDM2LTUuNyAxMi43MzYtMTIuNzQgMTIuNzM2em0yMC0xMi43MzVjMCAxMS4wNDUtOC45NSAyMC0yMCAyMHMtMjAtOC45NTUtMjAtMjBjMC0xMS4wNDYgOC45NS0yMCAyMC0yMHMyMCA4Ljk1MzYgMjAgMjB6bS0yMC0xNS4xMzRjLTguMzYgMC0xNS4xNCA2Ljc3NjUtMTUuMTQgMTUuMTM0IDAgOC4zNiA2Ljc4IDE1LjEzNSAxNS4xNCAxNS4xMzVzMTUuMTQtNi43NzUgMTUuMTQtMTUuMTM1YzAtOC4zNTgtNi43OC0xNS4xMzQtMTUuMTQtMTUuMTM0eiIvPgogICA8ZyBpZD0iY29mX29yYW5nZV9oZXgtY29weSIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTIpIj4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iIzY2NiIgZD0ibTM5LjkwNiAyMC4wMTNjMCAxMC45ODctOC45MDUgMTkuODkzLTE5Ljg5MiAxOS44OTMtMTAuOTg2IDAtMTkuODkyLTguOTA2LTE5Ljg5Mi0xOS44OTMtMC4wMDAzMi0xMC45ODYgOC45MDU5LTE5Ljg5MSAxOS44OTItMTkuODkxIDEwLjk4Ny0wLjAwMDMyIDE5Ljg5MiA4LjkwNTQgMTkuODkyIDE5Ljg5MXoiLz4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iI2ZmZiIgZD0ibTkuNjkwMiAyMC4wMTNjMCAxLjQxMy0xLjE0NTEgMi41NTgtMi41NTg2IDIuNTU4LTEuNDExNyAwLTIuNTU2OS0xLjE0NS0yLjU1NjktMi41NTggMC0xLjQxMiAxLjE0NTItMi41NTcgMi41NTY5LTIuNTU3IDEuNDEzNSAwIDIuNTU4NiAxLjE0NSAyLjU1ODYgMi41NTd6bTE0LjU1MSAxMi40MzZjMC43MDYgMS4yMjMgMi4yNyAxLjY0MiAzLjQ5MyAwLjkzNnMxLjY0Mi0yLjI3IDAuOTM2LTMuNDk0Yy0wLjcwNi0xLjIyMy0yLjI3LTEuNjQxLTMuNDkzLTAuOTM1LTEuMjIzIDAuNzA3LTEuNjQyIDIuMjctMC45MzYgMy40OTN6bTQuNDI5LTIyLjMxM2MwLjcwNi0xLjIyMzQgMC4yODgtMi43ODc0LTAuOTM2LTMuNDkyOS0xLjIyMi0wLjcwNjMtMi43ODctMC4yODcyLTMuNDkzIDAuOTM1Ny0wLjcwNiAxLjIyMzItMC4yODcgMi43ODcyIDAuOTM2IDMuNDkzMnMyLjc4OCAwLjI4NyAzLjQ5My0wLjkzNnptLTguNjU2IDIuNTg0YzMuODExIDAgNi45MzggMi45MjIgNy4yNjUgNi42NDhsMy43MDEtMC4wNTljLTAuMTc1LTIuNzY4LTEuMzc2LTUuMjU4LTMuMjI3LTcuMDk0LTAuOTggMC4zNzgtMi4xMTYgMC4zMjYtMy4wOTctMC4yNC0wLjk4MS0wLjU2Ny0xLjU5NC0xLjUyNi0xLjc1Ni0yLjU2NTMtMC45Mi0wLjI0OTgtMS44ODgtMC4zODM2LTIuODg2LTAuMzgzNi0xLjc1IDAtMy40MDQgMC40MDkzLTQuODc0IDEuMTM2OWwxLjgwMSAzLjIzNGMwLjkzNC0wLjQzMyAxLjk3Ni0wLjY3NyAzLjA3My0wLjY3N3ptLTcuMjk0IDcuMjkzYzAtMi40NjcgMS4yMjYtNC42NDggMy4xMDItNS45NjdsLTEuOTAxLTMuMTc3Yy0yLjIwMSAxLjQ3LTMuODQxIDMuNzEyLTQuNTMyNCA2LjM0MSAwLjgxODQgMC42NiAxLjM0MzQgMS42NyAxLjM0MzQgMi44MDMgMCAxLjEzNS0wLjUyNSAyLjE0NS0xLjM0MzQgMi44MDQgMC42OTE0IDIuNjI5IDIuMzMxNCA0Ljg3MiA0LjUzMjQgNi4zNDNsMS45MDEtMy4xNzdjLTEuODc2LTEuMzItMy4xMDItMy41MDEtMy4xMDItNS45N3ptNy4yOTQgNy4yOTVjLTEuMDk3IDAtMi4xMzktMC4yNDQtMy4wNzMtMC42NzhsLTEuODAxIDMuMjM0YzEuNDcgMC43MjkgMy4xMjQgMS4xMzcgNC44NzQgMS4xMzcgMC45OTggMCAxLjk2Ni0wLjEzMiAyLjg4Ni0wLjM4MyAwLjE2Mi0xLjAzOSAwLjc3NS0xLjk5OSAxLjc1Ni0yLjU2NCAwLjk4MS0wLjU2NyAyLjExNy0wLjYxOCAzLjA5Ny0wLjI0IDEuODUxLTEuODM3IDMuMDUyLTQuMzI3IDMuMjI3LTcuMDk2bC0zLjcwMS0wLjA1OGMtMC4zMjcgMy43MjYtMy40NTQgNi42NDgtNy4yNjUgNi42NDh6Ii8+CiAgIDwvZz4KICAgPGcgaWQ9Imdvb2dsZS1wbHVzIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM2NjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMikiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiI+CiAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0iTG9nb19feDIwMTRfX0ZJWEVEIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjkgMTEuNCkiPgogICAgIDxwYXRoIGlkPSJTaGFwZSIgZD0ibTcuNDQgMTkuMTVjOC44NyAwIDEzLjcyLTcuMzUgMTMuNzItMTMuNzIgMC0wLjIxIDAtMC40Mi0wLjAxLTAuNjIgMC45NC0wLjY4IDEuNzYtMS41MyAyLjQxLTIuNS0wLjg2IDAuMzgtMS43OSAwLjY0LTIuNzcgMC43NiAxLTAuNiAxLjc2LTEuNTQgMi4xMi0yLjY3LTAuOTMgMC41NS0xLjk2IDAuOTUtMy4wNiAxLjE3LTAuODgtMC45NC0yLjEzLTEuNTItMy41Mi0xLjUyLTIuNjYgMC00LjgyIDIuMTYtNC44MiA0LjgyIDAgMC4zOCAwLjA0IDAuNzUgMC4xMyAxLjEtNC4wMS0wLjItNy41Ni0yLjEyLTkuOTQtNS4wNC0wLjQxIDAuNzEtMC42NSAxLjU0LTAuNjUgMi40MiAwIDEuNjcgMC44NSAzLjE1IDIuMTUgNC4wMS0wLjc5LTAuMDItMS41My0wLjI0LTIuMTgtMC42djAuMDZjMCAyLjM0IDEuNjYgNC4yOCAzLjg3IDQuNzMtMC40IDAuMTEtMC44MyAwLjE3LTEuMjcgMC4xNy0wLjMxIDAtMC42MS0wLjAzLTAuOTEtMC4wOSAwLjYxIDEuOTIgMi4zOSAzLjMxIDQuNSAzLjM1LTEuNjUgMS4yOS0zLjczIDIuMDYtNS45OSAyLjA2LTAuMzkgMC0wLjc3LTAuMDItMS4xNS0wLjA3IDIuMTEgMS4zOCA0LjY1IDIuMTggNy4zNyAyLjE4Ii8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImZhY2Vib2siPgogICAgPGcgaWQ9InBhdGg0MjQxIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxtYXNrIGlkPSJtYXNrLTgiIGZpbGw9IndoaXRlIj4KICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC03Ii8+CiAgICAgPC9tYXNrPgogICAgIDx1c2UgaWQ9Ik1hc2siIHhsaW5rOmhyZWY9IiNwYXRoLTciIGZpbGw9IiM2NjY2NjYiLz4KICAgICA8cGF0aCBtYXNrPSJ1cmwoI21hc2stOCkiIGQ9Im0zMC4wMzcgMTAuMDAxYy0zLjkyIDAtNi42MDMgMi40NDktNi42MDMgNi45NDV2My41MjZoLTQuNDM0djUuMjU1aDQuNDM0djE0LjI3M2MxLjgyLTAuMjQ2IDMuNi0wLjcyOCA1LjI5OS0xLjQzOHYtMTIuODM1aDQuNDI0bDAuNjYtNS4yNTVoLTUuMDg0di0zLjAwMmMwLTEuNTIyIDAuNDc5LTMuMDg1IDIuNTUtMi41NjNoMi43MTd2LTQuN2MtMC40NjktMC4wNjQtMi4wODUtMC4yMDctMy45NjMtMC4yMDd2MC4wMDF6IiBmaWxsPSIjZmZmIi8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImxpbmtlZGluIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjQpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjNjY2Ii8+CiAgICA8ZyBpZD0iR3JvdXAtMiIgZmlsbD0iI0ZGRkZGRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSI+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZD0ibTMuMDY5NiAwLjQwNTc4YzEuNTA2OCAwIDIuNzMxNyAxLjIzMzEgMi43MzE3IDIuNzUwOSAwIDEuNTE5My0xLjIyNDkgMi43NTI0LTIuNzMxNyAyLjc1MjQtMS41MTA5IDAtMi43MzM1LTEuMjMzMS0yLjczMzUtMi43NTI0IDAuMDAwMDEtMS41MTc4IDEuMjIyNi0yLjc1MDkgMi43MzM1LTIuNzUwOXYtMC4wMDAwMnptLTIuMzU3OSAyMi44NjJoNC43MTM3di0xNS4yNzFsLTQuNzEzNy0wLjAwMDMgMC4wMDAwMiAxNS4yNzF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZD0ibTguMzgyIDcuOTk2N2g0LjUyMXYyLjA4NzNoMC4wNjNjMC42MjktMS4yMDExIDIuMTY3LTIuNDY2OSA0LjQ2LTIuNDY2OSA0Ljc3MyAwIDUuNjU0IDMuMTYyOSA1LjY1NCA3LjI3Mzl2OC4zNzdoLTQuNzF2LTcuNDI2YzAtMS43NzEtMC4wMzItNC4wNDktMi40NDktNC4wNDktMi40NTMgMC0yLjgyOSAxLjkyOS0yLjgyOSAzLjkydjcuNTU1aC00Ljcxdi0xNS4yNzEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0ieW91dHViZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwKSI+CiAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIgZmlsbD0iIzY2NiIvPgogICAgPGcgaWQ9Inl0X2ljb25fcmdiIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3IDExKSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMCIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC05Ii8+CiAgICAgIDwvbWFzaz4KICAgICAgPHBhdGggaWQ9IkZpbGwtMSIgZmlsbD0iI2ZmZiIgbWFzaz0idXJsKCNtYXNrLTEwKSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWxpbmUgaWQ9IkZpbGwtNCIgcG9pbnRzPSIxMC4zNjggMTMuMDYgMTcuMTgyIDkuMTgzNSAxMC4zNjggNS4zMDczIDEwLjM2OCAxMy4wNiIgZmlsbD0iIzY2NiIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJpbnN0YWdyYW0iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OCkiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMiIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xMSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay0xMikiIGQ9Im0xNC4yMzcgMC4wMDg5ODU0Yy0zLjg2NyAwLTQuMzUxNyAwLjAxNjM4OS01Ljg3MDEgMC4wODU2NzMtMS41MTU0IDAuMDY5MTEyLTIuNTUwMyAwLjMwOTgtMy40NTU4IDAuNjYxNzYtMC45MzYyIDAuMzYzNzgtMS43MzAxIDAuODUwNTgtMi41MjE3IDEuNjQyLTAuNzkxNCAwLjc5MTUtMS4yNzgyIDEuNTg1NS0xLjY0MiAyLjUyMTctMC4zNTE5MyAwLjkwNTUtMC41OTI2MSAxLjk0MDQtMC42NjE3MyAzLjQ1NTctMC4wNjkyODEgMS41MTg1LTAuMDg1NjcgMi4wMDMyLTAuMDg1NjcgNS44NzAyIDAgMy44NjYgMC4wMTYzODkgNC4zNTEgMC4wODU2NzIgNS44NjkgMC4wNjkxMTggMS41MTYgMC4zMDk4IDIuNTUxIDAuNjYxNzYgMy40NTYgMC4zNjM3NyAwLjkzNiAwLjg1MDU3IDEuNzMgMS42NDIgMi41MjIgMC43OTE2IDAuNzkxIDEuNTg1NSAxLjI3OCAyLjUyMTcgMS42NDIgMC45MDU1IDAuMzUyIDEuOTQwNCAwLjU5MiAzLjQ1NTggMC42NjEgMS41MTg0IDAuMDcgMi4wMDMxIDAuMDg2IDUuODcwMSAwLjA4NiAzLjg2NiAwIDQuMzUxLTAuMDE2IDUuODY5LTAuMDg2IDEuNTE2LTAuMDY5IDIuNTUxLTAuMzA5IDMuNDU2LTAuNjYxIDAuOTM2LTAuMzY0IDEuNzMtMC44NTEgMi41MjItMS42NDIgMC43OTEtMC43OTIgMS4yNzgtMS41ODYgMS42NDItMi41MjIgMC4zNTItMC45MDUgMC41OTItMS45NCAwLjY2MS0zLjQ1NiAwLjA3LTEuNTE4IDAuMDg2LTIuMDAzIDAuMDg2LTUuODY5IDAtMy44NjctMC4wMTYtNC4zNTE3LTAuMDg2LTUuODcwMi0wLjA2OS0xLjUxNTMtMC4zMDktMi41NTAyLTAuNjYxLTMuNDU1Ny0wLjM2NC0wLjkzNjItMC44NTEtMS43MzAyLTEuNjQyLTIuNTIxNy0wLjc5Mi0wLjc5MTQtMS41ODYtMS4yNzgyLTIuNTIyLTEuNjQyLTAuOTA1LTAuMzUxOTQtMS45NC0wLjU5MjYzLTMuNDU2LTAuNjYxNzQtMS41MTgtMC4wNjkyODYtMi4wMDMtMC4wODU2NzUtNS44NjktMC4wODU2NzV6bTAgMi41NjUxYzMuODAxIDAgNC4yNTEgMC4wMTQ2IDUuNzUyIDAuMDgzIDEuMzg4IDAuMDYzMyAyLjE0MiAwLjI5NTMgMi42NDQgMC40OTAyIDAuNjY0IDAuMjU4MyAxLjEzOSAwLjU2NjggMS42MzcgMS4wNjVzMC44MDcgMC45NzI0IDEuMDY1IDEuNjM2OWMwLjE5NSAwLjUwMTcgMC40MjcgMS4yNTU1IDAuNDkgMi42NDM2IDAuMDY4IDEuNTAxMiAwLjA4MyAxLjk1MTIgMC4wODMgNS43NTMyIDAgMy44MDEtMC4wMTUgNC4yNTEtMC4wODMgNS43NTItMC4wNjMgMS4zODgtMC4yOTUgMi4xNDItMC40OSAyLjY0NC0wLjI1OCAwLjY2NC0wLjU2NyAxLjEzOS0xLjA2NSAxLjYzN3MtMC45NzMgMC44MDctMS42MzcgMS4wNjVjLTAuNTAyIDAuMTk1LTEuMjU2IDAuNDI3LTIuNjQ0IDAuNDktMS41MDEgMC4wNjgtMS45NTEgMC4wODMtNS43NTIgMC4wODMtMy44MDIgMC00LjI1MjItMC4wMTUtNS43NTMyLTAuMDgzLTEuMzg4MS0wLjA2My0yLjE0MTktMC4yOTUtMi42NDM1LTAuNDktMC42NjQ2LTAuMjU4LTEuMTM4OC0wLjU2Ny0xLjYzNy0xLjA2NS0wLjQ5ODEtMC40OTgtMC44MDY3LTAuOTczLTEuMDY1LTEuNjM3LTAuMTk0OS0wLjUwMi0wLjQyNjgtMS4yNTYtMC40OTAxLTIuNjQ0LTAuMDY4NS0xLjUwMS0wLjA4MzEtMS45NTEtMC4wODMxLTUuNzUyIDAtMy44MDIgMC4wMTQ2LTQuMjUyIDAuMDgzMS01Ljc1MzIgMC4wNjMzLTEuMzg4MSAwLjI5NTItMi4xNDE5IDAuNDkwMS0yLjY0MzYgMC4yNTgzLTAuNjY0NSAwLjU2NjgtMS4xMzg3IDEuMDY1LTEuNjM2OXMwLjk3MjQtMC44MDY3IDEuNjM3LTEuMDY1YzAuNTAxNi0wLjE5NDkgMS4yNTU0LTAuNDI2OSAyLjY0MzUtMC40OTAyIDEuNTAxMi0wLjA2ODQgMS45NTEyLTAuMDgzIDUuNzUzMi0wLjA4M3oiLz4KICAgICA8L2c+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZmlsbD0iI2ZmZiIgZD0ibTE0LjI0IDE4Ljk5MWMtMi42MjEgMC00Ljc0NTktMi4xMjUtNC43NDU5LTQuNzQ1IDAtMi42MjEgMi4xMjQ5LTQuNzQ2IDQuNzQ1OS00Ljc0NiAyLjYyIDAgNC43NDUgMi4xMjUgNC43NDUgNC43NDYgMCAyLjYyLTIuMTI1IDQuNzQ1LTQuNzQ1IDQuNzQ1em0wLTEyLjA1NmMtNC4wMzggMC03LjMxMTEgMy4yNzMxLTcuMzExMSA3LjMxMTEgMCA0LjAzNyAzLjI3MzEgNy4zMSA3LjMxMTEgNy4zMSA0LjAzNyAwIDcuMzEtMy4yNzMgNy4zMS03LjMxIDAtNC4wMzgtMy4yNzMtNy4zMTExLTcuMzEtNy4zMTExeiIvPgogICAgIDxwYXRoIGlkPSJGaWxsLTUiIGZpbGw9IiNmZmYiIGQ9Im0yMy41NDEgNi42NDYxYzAgMC45NDM1LTAuNzY1IDEuNzA4My0xLjcwOSAxLjcwODMtMC45NDMgMC0xLjcwOC0wLjc2NDgtMS43MDgtMS43MDgzIDAtMC45NDM2IDAuNzY1LTEuNzA4NSAxLjcwOC0xLjcwODUgMC45NDQgMCAxLjcwOSAwLjc2NDkgMS43MDkgMS43MDg1Ii8+CiAgICA8L2c+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=");background-size:430px 96px;height:42px;width:42px;background-position:-167px 0}.p-icon--instagram:hover{background-position-y:-56px}.p-icon--linkedin{background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9Ijk2cHgiIHdpZHRoPSI0MzJweCIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQzMiA5NiI+PCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ni4yICg0NDQ5NikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiA8dGl0bGU+dmFuaWxsYS1zb2NpYWwtc3ByaXRlPC90aXRsZT4KIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogPGRlZnM+CiAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICA8cG9seWdvbiBpZD0icGF0aC0zIiBwb2ludHM9IjAuMDA4ODg3MSAxOC4zNjcgMC4wMDg4ODcxIDAuMDA1OTI0OCAyNi4wNjkgMC4wMDU5MjQ4IDI2LjA2OSAxOC4zNjciLz4KICA8cG9seWdvbiBpZD0icGF0aC01IiBwb2ludHM9IjAgMjguNDc5IDI4LjQ3MyAyOC40NzkgMjguNDczIDAuMDA4OTg1NCAwIDAuMDA4OTg1NCIvPgogIDxjaXJjbGUgaWQ9InBhdGgtNyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgPHBvbHlnb24gaWQ9InBhdGgtOSIgcG9pbnRzPSIwLjAwODg4NzEgMTguMzY3IDAuMDA4ODg3MSAwLjAwNTkyNDggMjYuMDY5IDAuMDA1OTI0OCAyNi4wNjkgMTguMzY3Ii8+CiAgPHBvbHlnb24gaWQ9InBhdGgtMTEiIHBvaW50cz0iMCAyOC40NzkgMjguNDczIDI4LjQ3OSAyOC40NzMgMC4wMDg5ODU0IDAgMC4wMDg5ODU0Ii8+CiA8L2RlZnM+CiA8ZyBpZD0iUGFnZS0xIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9Im5vbmUiPgogIDxnIGlkPSJ2YW5pbGxhLXNvY2lhbC1zcHJpdGUiPgogICA8ZyBpZD0iZmFjZWJvay1jb3B5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDU2KSI+CiAgICA8ZyBpZD0icGF0aDQyNDEiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiLz4KICAgICA8L21hc2s+CiAgICAgPHVzZSBpZD0iTWFzayIgeGxpbms6aHJlZj0iI3BhdGgtMSIgZmlsbD0iIzNCNTk5OCIvPgogICAgIDxwYXRoIG1hc2s9InVybCgjbWFzay0yKSIgZD0ibTMwLjAzNyAxMC4wMDFjLTMuOTIgMC02LjYwMyAyLjQ0OS02LjYwMyA2Ljk0NXYzLjUyNmgtNC40MzR2NS4yNTVoNC40MzR2MTQuMjczYzEuODItMC4yNDYgMy42LTAuNzI4IDUuMjk5LTEuNDM4di0xMi44MzVoNC40MjRsMC42Ni01LjI1NWgtNS4wODR2LTMuMDAyYzAtMS41MjIgMC40NzktMy4wODUgMi41NS0yLjU2M2gyLjcxN3YtNC43Yy0wLjQ2OS0wLjA2NC0yLjA4NS0wLjIwNy0zLjk2My0wLjIwN3YwLjAwMXoiIGZpbGw9IiNmZmYiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM3NzI5NTMiIGQ9Im0zNTYgODguNzM1Yy03LjA0IDAtMTIuNzQtNS43LTEyLjc0LTEyLjczNiAwLTcuMDM0IDUuNy0xMi43MzQgMTIuNzQtMTIuNzM0czEyLjc0IDUuNyAxMi43NCAxMi43MzRjMCA3LjAzNi01LjcgMTIuNzM2LTEyLjc0IDEyLjczNnptMjAtMTIuNzM1YzAgMTEuMDQ1LTguOTUgMjAtMjAgMjBzLTIwLTguOTU1LTIwLTIwYzAtMTEuMDQ2IDguOTUtMjAgMjAtMjBzMjAgOC45NTQgMjAgMjB6bS0yMC0xNS4xMzVjLTguMzYgMC0xNS4xNCA2Ljc3Ny0xNS4xNCAxNS4xMzUgMCA4LjM2IDYuNzggMTUuMTM1IDE1LjE0IDE1LjEzNXMxNS4xNC02Ljc3NSAxNS4xNC0xNS4xMzVjMC04LjM1OC02Ljc4LTE1LjEzNS0xNS4xNC0xNS4xMzV6Ii8+CiAgIDxnIGlkPSJjb2Zfb3JhbmdlX2hleC1jb3B5LTIiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzkyIDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNFOTU0MjAiIGQ9Im0zOS45MDYgMjAuMDEzYzAgMTAuOTg3LTguOTA1IDE5Ljg5My0xOS44OTIgMTkuODkzLTEwLjk4NiAwLTE5Ljg5Mi04LjkwNi0xOS44OTItMTkuODkzLTAuMDAwMzItMTAuOTg2IDguOTA1OS0xOS44OTEgMTkuODkyLTE5Ljg5MSAxMC45ODctMC4wMDAzMiAxOS44OTIgOC45MDU0IDE5Ljg5MiAxOS44OTF6Ii8+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiIGQ9Im05LjY5MDIgMjAuMDEzYzAgMS40MTMtMS4xNDUxIDIuNTU4LTIuNTU4NiAyLjU1OC0xLjQxMTcgMC0yLjU1NjktMS4xNDUtMi41NTY5LTIuNTU4IDAtMS40MTIgMS4xNDUyLTIuNTU3IDIuNTU2OS0yLjU1NyAxLjQxMzUgMCAyLjU1ODYgMS4xNDUgMi41NTg2IDIuNTU3em0xNC41NTEgMTIuNDM2YzAuNzA2IDEuMjIzIDIuMjcgMS42NDIgMy40OTMgMC45MzZzMS42NDItMi4yNyAwLjkzNi0zLjQ5NGMtMC43MDYtMS4yMjMtMi4yNy0xLjY0MS0zLjQ5My0wLjkzNS0xLjIyMyAwLjcwNy0xLjY0MiAyLjI3LTAuOTM2IDMuNDkzem00LjQyOS0yMi4zMTNjMC43MDYtMS4yMjM0IDAuMjg4LTIuNzg3NC0wLjkzNi0zLjQ5MjktMS4yMjItMC43MDYzLTIuNzg3LTAuMjg3Mi0zLjQ5MyAwLjkzNTctMC43MDYgMS4yMjMyLTAuMjg3IDIuNzg3MiAwLjkzNiAzLjQ5MzJzMi43ODggMC4yODcgMy40OTMtMC45MzZ6bS04LjY1NiAyLjU4NGMzLjgxMSAwIDYuOTM4IDIuOTIyIDcuMjY1IDYuNjQ4bDMuNzAxLTAuMDU5Yy0wLjE3NS0yLjc2OC0xLjM3Ni01LjI1OC0zLjIyNy03LjA5NC0wLjk4IDAuMzc4LTIuMTE2IDAuMzI2LTMuMDk3LTAuMjQtMC45ODEtMC41NjctMS41OTQtMS41MjYtMS43NTYtMi41NjUzLTAuOTItMC4yNDk4LTEuODg4LTAuMzgzNi0yLjg4Ni0wLjM4MzYtMS43NSAwLTMuNDA0IDAuNDA5My00Ljg3NCAxLjEzNjlsMS44MDEgMy4yMzRjMC45MzQtMC40MzMgMS45NzYtMC42NzcgMy4wNzMtMC42Nzd6bS03LjI5NCA3LjI5M2MwLTIuNDY3IDEuMjI2LTQuNjQ4IDMuMTAyLTUuOTY3bC0xLjkwMS0zLjE3N2MtMi4yMDEgMS40Ny0zLjg0MSAzLjcxMi00LjUzMjQgNi4zNDEgMC44MTg0IDAuNjYgMS4zNDM0IDEuNjcgMS4zNDM0IDIuODAzIDAgMS4xMzUtMC41MjUgMi4xNDUtMS4zNDM0IDIuODA0IDAuNjkxNCAyLjYyOSAyLjMzMTQgNC44NzIgNC41MzI0IDYuMzQzbDEuOTAxLTMuMTc3Yy0xLjg3Ni0xLjMyLTMuMTAyLTMuNTAxLTMuMTAyLTUuOTd6bTcuMjk0IDcuMjk1Yy0xLjA5NyAwLTIuMTM5LTAuMjQ0LTMuMDczLTAuNjc4bC0xLjgwMSAzLjIzNGMxLjQ3IDAuNzI5IDMuMTI0IDEuMTM3IDQuODc0IDEuMTM3IDAuOTk4IDAgMS45NjYtMC4xMzIgMi44ODYtMC4zODMgMC4xNjItMS4wMzkgMC43NzUtMS45OTkgMS43NTYtMi41NjQgMC45ODEtMC41NjcgMi4xMTctMC42MTggMy4wOTctMC4yNCAxLjg1MS0xLjgzNyAzLjA1Mi00LjMyNyAzLjIyNy03LjA5NmwtMy43MDEtMC4wNThjLTAuMzI3IDMuNzI2LTMuNDU0IDYuNjQ4LTcuMjY1IDYuNjQ4eiIvPgogICA8L2c+CiAgIDxnIGlkPSJsaW5rZWRpbi1jb3B5LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNCA1NikiPgogICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiIGZpbGw9IiMwMDcxQTEiLz4KICAgIDxnIGlkPSJHcm91cC0yIiBmaWxsPSIjRkZGRkZFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4IDgpIj4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBkPSJtMy4wNjk2IDAuNDA1NzhjMS41MDY4IDAgMi43MzE3IDEuMjMzMSAyLjczMTcgMi43NTA5IDAgMS41MTkzLTEuMjI0OSAyLjc1MjQtMi43MzE3IDIuNzUyNC0xLjUxMDkgMC0yLjczMzUtMS4yMzMxLTIuNzMzNS0yLjc1MjQgMC4wMDAwMS0xLjUxNzggMS4yMjI2LTIuNzUwOSAyLjczMzUtMi43NTA5di0wLjAwMDAyem0tMi4zNTc5IDIyLjg2Mmg0LjcxMzd2LTE1LjI3MWwtNC43MTM3LTAuMDAwMyAwLjAwMDAyIDE1LjI3MXoiLz4KICAgICA8cGF0aCBpZD0iRmlsbC01IiBkPSJtOC4zODIgNy45OTY3aDQuNTIxdjIuMDg3M2gwLjA2M2MwLjYyOS0xLjIwMTEgMi4xNjctMi40NjY5IDQuNDYtMi40NjY5IDQuNzczIDAgNS42NTQgMy4xNjI5IDUuNjU0IDcuMjczOXY4LjM3N2gtNC43MXYtNy40MjZjMC0xLjc3MS0wLjAzMi00LjA0OS0yLjQ0OS00LjA0OS0yLjQ1MyAwLTIuODI5IDEuOTI5LTIuODI5IDMuOTJ2Ny41NTVoLTQuNzF2LTE1LjI3MSIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJ5b3V0dWJlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAgNTYpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjRDkyNTJBIi8+CiAgICA8ZyBpZD0ieXRfaWNvbl9yZ2IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgMTEpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTQiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMyIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay00KSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWdvbiBpZD0iRmlsbC00IiBwb2ludHM9IjE3LjE4MiA5LjE4MzUgMTAuMzY4IDUuMzA3MyAxMC4zNjggMTMuMDYiIGZpbGw9IiNEOTI1MkEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iZ29vZ2xlLXBsdXMtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNERDRCMzkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyLWNvcHkiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEyIDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjMURBMUYyIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJMb2dvX194MjAxNF9fRklYRUQiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguOSAxMS40KSI+CiAgICAgPHBhdGggaWQ9IlNoYXBlIiBkPSJtNy40NCAxOS4xNWM4Ljg3IDAgMTMuNzItNy4zNSAxMy43Mi0xMy43MiAwLTAuMjEgMC0wLjQyLTAuMDEtMC42MiAwLjk0LTAuNjggMS43Ni0xLjUzIDIuNDEtMi41LTAuODYgMC4zOC0xLjc5IDAuNjQtMi43NyAwLjc2IDEtMC42IDEuNzYtMS41NCAyLjEyLTIuNjctMC45MyAwLjU1LTEuOTYgMC45NS0zLjA2IDEuMTctMC44OC0wLjk0LTIuMTMtMS41Mi0zLjUyLTEuNTItMi42NiAwLTQuODIgMi4xNi00LjgyIDQuODIgMCAwLjM4IDAuMDQgMC43NSAwLjEzIDEuMS00LjAxLTAuMi03LjU2LTIuMTItOS45NC01LjA0LTAuNDEgMC43MS0wLjY1IDEuNTQtMC42NSAyLjQyIDAgMS42NyAwLjg1IDMuMTUgMi4xNSA0LjAxLTAuNzktMC4wMi0xLjUzLTAuMjQtMi4xOC0wLjZ2MC4wNmMwIDIuMzQgMS42NiA0LjI4IDMuODcgNC43My0wLjQgMC4xMS0wLjgzIDAuMTctMS4yNyAwLjE3LTAuMzEgMC0wLjYxLTAuMDMtMC45MS0wLjA5IDAuNjEgMS45MiAyLjM5IDMuMzEgNC41IDMuMzUtMS42NSAxLjI5LTMuNzMgMi4wNi01Ljk5IDIuMDYtMC4zOSAwLTAuNzctMC4wMi0xLjE1LTAuMDcgMi4xMSAxLjM4IDQuNjUgMi4xOCA3LjM3IDIuMTgiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iaW5zdGFncmFtLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjRkIzOTU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIvPgogICAgPC9nPgogICAgPGcgaWQ9Ikdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2IDYpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTYiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtNSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay02KSIgZD0ibTE0LjIzNyAwLjAwODk4NTRjLTMuODY3IDAtNC4zNTE3IDAuMDE2Mzg5LTUuODcwMSAwLjA4NTY3My0xLjUxNTQgMC4wNjkxMTItMi41NTAzIDAuMzA5OC0zLjQ1NTggMC42NjE3Ni0wLjkzNjIgMC4zNjM3OC0xLjczMDEgMC44NTA1OC0yLjUyMTcgMS42NDItMC43OTE0IDAuNzkxNS0xLjI3ODIgMS41ODU1LTEuNjQyIDIuNTIxNy0wLjM1MTkzIDAuOTA1NS0wLjU5MjYxIDEuOTQwNC0wLjY2MTczIDMuNDU1Ny0wLjA2OTI4MSAxLjUxODUtMC4wODU2NyAyLjAwMzItMC4wODU2NyA1Ljg3MDIgMCAzLjg2NiAwLjAxNjM4OSA0LjM1MSAwLjA4NTY3MiA1Ljg2OSAwLjA2OTExOCAxLjUxNiAwLjMwOTggMi41NTEgMC42NjE3NiAzLjQ1NiAwLjM2Mzc3IDAuOTM2IDAuODUwNTcgMS43MyAxLjY0MiAyLjUyMiAwLjc5MTYgMC43OTEgMS41ODU1IDEuMjc4IDIuNTIxNyAxLjY0MiAwLjkwNTUgMC4zNTIgMS45NDA0IDAuNTkyIDMuNDU1OCAwLjY2MSAxLjUxODQgMC4wNyAyLjAwMzEgMC4wODYgNS44NzAxIDAuMDg2IDMuODY2IDAgNC4zNTEtMC4wMTYgNS44NjktMC4wODYgMS41MTYtMC4wNjkgMi41NTEtMC4zMDkgMy40NTYtMC42NjEgMC45MzYtMC4zNjQgMS43My0wLjg1MSAyLjUyMi0xLjY0MiAwLjc5MS0wLjc5MiAxLjI3OC0xLjU4NiAxLjY0Mi0yLjUyMiAwLjM1Mi0wLjkwNSAwLjU5Mi0xLjk0IDAuNjYxLTMuNDU2IDAuMDctMS41MTggMC4wODYtMi4wMDMgMC4wODYtNS44NjkgMC0zLjg2Ny0wLjAxNi00LjM1MTctMC4wODYtNS44NzAyLTAuMDY5LTEuNTE1My0wLjMwOS0yLjU1MDItMC42NjEtMy40NTU3LTAuMzY0LTAuOTM2Mi0wLjg1MS0xLjczMDItMS42NDItMi41MjE3LTAuNzkyLTAuNzkxNC0xLjU4Ni0xLjI3ODItMi41MjItMS42NDItMC45MDUtMC4zNTE5NC0xLjk0LTAuNTkyNjMtMy40NTYtMC42NjE3NC0xLjUxOC0wLjA2OTI4Ni0yLjAwMy0wLjA4NTY3NS01Ljg2OS0wLjA4NTY3NXptMCAyLjU2NTFjMy44MDEgMCA0LjI1MSAwLjAxNDYgNS43NTIgMC4wODMgMS4zODggMC4wNjMzIDIuMTQyIDAuMjk1MyAyLjY0NCAwLjQ5MDIgMC42NjQgMC4yNTgzIDEuMTM5IDAuNTY2OCAxLjYzNyAxLjA2NXMwLjgwNyAwLjk3MjQgMS4wNjUgMS42MzY5YzAuMTk1IDAuNTAxNyAwLjQyNyAxLjI1NTUgMC40OSAyLjY0MzYgMC4wNjggMS41MDEyIDAuMDgzIDEuOTUxMiAwLjA4MyA1Ljc1MzIgMCAzLjgwMS0wLjAxNSA0LjI1MS0wLjA4MyA1Ljc1Mi0wLjA2MyAxLjM4OC0wLjI5NSAyLjE0Mi0wLjQ5IDIuNjQ0LTAuMjU4IDAuNjY0LTAuNTY3IDEuMTM5LTEuMDY1IDEuNjM3cy0wLjk3MyAwLjgwNy0xLjYzNyAxLjA2NWMtMC41MDIgMC4xOTUtMS4yNTYgMC40MjctMi42NDQgMC40OS0xLjUwMSAwLjA2OC0xLjk1MSAwLjA4My01Ljc1MiAwLjA4My0zLjgwMiAwLTQuMjUyMi0wLjAxNS01Ljc1MzItMC4wODMtMS4zODgxLTAuMDYzLTIuMTQxOS0wLjI5NS0yLjY0MzUtMC40OS0wLjY2NDYtMC4yNTgtMS4xMzg4LTAuNTY3LTEuNjM3LTEuMDY1LTAuNDk4MS0wLjQ5OC0wLjgwNjctMC45NzMtMS4wNjUtMS42MzctMC4xOTQ5LTAuNTAyLTAuNDI2OC0xLjI1Ni0wLjQ5MDEtMi42NDQtMC4wNjg1LTEuNTAxLTAuMDgzMS0xLjk1MS0wLjA4MzEtNS43NTIgMC0zLjgwMiAwLjAxNDYtNC4yNTIgMC4wODMxLTUuNzUzMiAwLjA2MzMtMS4zODgxIDAuMjk1Mi0yLjE0MTkgMC40OTAxLTIuNjQzNiAwLjI1ODMtMC42NjQ1IDAuNTY2OC0xLjEzODcgMS4wNjUtMS42MzY5czAuOTcyNC0wLjgwNjcgMS42MzctMS4wNjVjMC41MDE2LTAuMTk0OSAxLjI1NTQtMC40MjY5IDIuNjQzNS0wLjQ5MDIgMS41MDEyLTAuMDY4NCAxLjk1MTItMC4wODMgNS43NTMyLTAuMDgzeiIvPgogICAgIDwvZz4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBmaWxsPSIjZmZmIiBkPSJtMTQuMjQgMTguOTkxYy0yLjYyMSAwLTQuNzQ1OS0yLjEyNS00Ljc0NTktNC43NDUgMC0yLjYyMSAyLjEyNDktNC43NDYgNC43NDU5LTQuNzQ2IDIuNjIgMCA0Ljc0NSAyLjEyNSA0Ljc0NSA0Ljc0NiAwIDIuNjItMi4xMjUgNC43NDUtNC43NDUgNC43NDV6bTAtMTIuMDU2Yy00LjAzOCAwLTcuMzExMSAzLjI3MzEtNy4zMTExIDcuMzExMSAwIDQuMDM3IDMuMjczMSA3LjMxIDcuMzExMSA3LjMxIDQuMDM3IDAgNy4zMS0zLjI3MyA3LjMxLTcuMzEgMC00LjAzOC0zLjI3My03LjMxMTEtNy4zMS03LjMxMTF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZmlsbD0iI2ZmZiIgZD0ibTIzLjU0MSA2LjY0NjFjMCAwLjk0MzUtMC43NjUgMS43MDgzLTEuNzA5IDEuNzA4My0wLjk0MyAwLTEuNzA4LTAuNzY0OC0xLjcwOC0xLjcwODMgMC0wLjk0MzYgMC43NjUtMS43MDg1IDEuNzA4LTEuNzA4NSAwLjk0NCAwIDEuNzA5IDAuNzY0OSAxLjcwOSAxLjcwODUiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQiIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iIzY2NiIgZD0ibTM1NiAzMi43MzVjLTcuMDQgMC0xMi43NC01LjctMTIuNzQtMTIuNzM2IDAtNy4wMzQgNS43LTEyLjczNCAxMi43NC0xMi43MzQgNy4wNC0wLjAwMDUgMTIuNzQgNS43IDEyLjc0IDEyLjczNCAwIDcuMDM2LTUuNyAxMi43MzYtMTIuNzQgMTIuNzM2em0yMC0xMi43MzVjMCAxMS4wNDUtOC45NSAyMC0yMCAyMHMtMjAtOC45NTUtMjAtMjBjMC0xMS4wNDYgOC45NS0yMCAyMC0yMHMyMCA4Ljk1MzYgMjAgMjB6bS0yMC0xNS4xMzRjLTguMzYgMC0xNS4xNCA2Ljc3NjUtMTUuMTQgMTUuMTM0IDAgOC4zNiA2Ljc4IDE1LjEzNSAxNS4xNCAxNS4xMzVzMTUuMTQtNi43NzUgMTUuMTQtMTUuMTM1YzAtOC4zNTgtNi43OC0xNS4xMzQtMTUuMTQtMTUuMTM0eiIvPgogICA8ZyBpZD0iY29mX29yYW5nZV9oZXgtY29weSIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTIpIj4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iIzY2NiIgZD0ibTM5LjkwNiAyMC4wMTNjMCAxMC45ODctOC45MDUgMTkuODkzLTE5Ljg5MiAxOS44OTMtMTAuOTg2IDAtMTkuODkyLTguOTA2LTE5Ljg5Mi0xOS44OTMtMC4wMDAzMi0xMC45ODYgOC45MDU5LTE5Ljg5MSAxOS44OTItMTkuODkxIDEwLjk4Ny0wLjAwMDMyIDE5Ljg5MiA4LjkwNTQgMTkuODkyIDE5Ljg5MXoiLz4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iI2ZmZiIgZD0ibTkuNjkwMiAyMC4wMTNjMCAxLjQxMy0xLjE0NTEgMi41NTgtMi41NTg2IDIuNTU4LTEuNDExNyAwLTIuNTU2OS0xLjE0NS0yLjU1NjktMi41NTggMC0xLjQxMiAxLjE0NTItMi41NTcgMi41NTY5LTIuNTU3IDEuNDEzNSAwIDIuNTU4NiAxLjE0NSAyLjU1ODYgMi41NTd6bTE0LjU1MSAxMi40MzZjMC43MDYgMS4yMjMgMi4yNyAxLjY0MiAzLjQ5MyAwLjkzNnMxLjY0Mi0yLjI3IDAuOTM2LTMuNDk0Yy0wLjcwNi0xLjIyMy0yLjI3LTEuNjQxLTMuNDkzLTAuOTM1LTEuMjIzIDAuNzA3LTEuNjQyIDIuMjctMC45MzYgMy40OTN6bTQuNDI5LTIyLjMxM2MwLjcwNi0xLjIyMzQgMC4yODgtMi43ODc0LTAuOTM2LTMuNDkyOS0xLjIyMi0wLjcwNjMtMi43ODctMC4yODcyLTMuNDkzIDAuOTM1Ny0wLjcwNiAxLjIyMzItMC4yODcgMi43ODcyIDAuOTM2IDMuNDkzMnMyLjc4OCAwLjI4NyAzLjQ5My0wLjkzNnptLTguNjU2IDIuNTg0YzMuODExIDAgNi45MzggMi45MjIgNy4yNjUgNi42NDhsMy43MDEtMC4wNTljLTAuMTc1LTIuNzY4LTEuMzc2LTUuMjU4LTMuMjI3LTcuMDk0LTAuOTggMC4zNzgtMi4xMTYgMC4zMjYtMy4wOTctMC4yNC0wLjk4MS0wLjU2Ny0xLjU5NC0xLjUyNi0xLjc1Ni0yLjU2NTMtMC45Mi0wLjI0OTgtMS44ODgtMC4zODM2LTIuODg2LTAuMzgzNi0xLjc1IDAtMy40MDQgMC40MDkzLTQuODc0IDEuMTM2OWwxLjgwMSAzLjIzNGMwLjkzNC0wLjQzMyAxLjk3Ni0wLjY3NyAzLjA3My0wLjY3N3ptLTcuMjk0IDcuMjkzYzAtMi40NjcgMS4yMjYtNC42NDggMy4xMDItNS45NjdsLTEuOTAxLTMuMTc3Yy0yLjIwMSAxLjQ3LTMuODQxIDMuNzEyLTQuNTMyNCA2LjM0MSAwLjgxODQgMC42NiAxLjM0MzQgMS42NyAxLjM0MzQgMi44MDMgMCAxLjEzNS0wLjUyNSAyLjE0NS0xLjM0MzQgMi44MDQgMC42OTE0IDIuNjI5IDIuMzMxNCA0Ljg3MiA0LjUzMjQgNi4zNDNsMS45MDEtMy4xNzdjLTEuODc2LTEuMzItMy4xMDItMy41MDEtMy4xMDItNS45N3ptNy4yOTQgNy4yOTVjLTEuMDk3IDAtMi4xMzktMC4yNDQtMy4wNzMtMC42NzhsLTEuODAxIDMuMjM0YzEuNDcgMC43MjkgMy4xMjQgMS4xMzcgNC44NzQgMS4xMzcgMC45OTggMCAxLjk2Ni0wLjEzMiAyLjg4Ni0wLjM4MyAwLjE2Mi0xLjAzOSAwLjc3NS0xLjk5OSAxLjc1Ni0yLjU2NCAwLjk4MS0wLjU2NyAyLjExNy0wLjYxOCAzLjA5Ny0wLjI0IDEuODUxLTEuODM3IDMuMDUyLTQuMzI3IDMuMjI3LTcuMDk2bC0zLjcwMS0wLjA1OGMtMC4zMjcgMy43MjYtMy40NTQgNi42NDgtNy4yNjUgNi42NDh6Ii8+CiAgIDwvZz4KICAgPGcgaWQ9Imdvb2dsZS1wbHVzIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM2NjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMikiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiI+CiAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0iTG9nb19feDIwMTRfX0ZJWEVEIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjkgMTEuNCkiPgogICAgIDxwYXRoIGlkPSJTaGFwZSIgZD0ibTcuNDQgMTkuMTVjOC44NyAwIDEzLjcyLTcuMzUgMTMuNzItMTMuNzIgMC0wLjIxIDAtMC40Mi0wLjAxLTAuNjIgMC45NC0wLjY4IDEuNzYtMS41MyAyLjQxLTIuNS0wLjg2IDAuMzgtMS43OSAwLjY0LTIuNzcgMC43NiAxLTAuNiAxLjc2LTEuNTQgMi4xMi0yLjY3LTAuOTMgMC41NS0xLjk2IDAuOTUtMy4wNiAxLjE3LTAuODgtMC45NC0yLjEzLTEuNTItMy41Mi0xLjUyLTIuNjYgMC00LjgyIDIuMTYtNC44MiA0LjgyIDAgMC4zOCAwLjA0IDAuNzUgMC4xMyAxLjEtNC4wMS0wLjItNy41Ni0yLjEyLTkuOTQtNS4wNC0wLjQxIDAuNzEtMC42NSAxLjU0LTAuNjUgMi40MiAwIDEuNjcgMC44NSAzLjE1IDIuMTUgNC4wMS0wLjc5LTAuMDItMS41My0wLjI0LTIuMTgtMC42djAuMDZjMCAyLjM0IDEuNjYgNC4yOCAzLjg3IDQuNzMtMC40IDAuMTEtMC44MyAwLjE3LTEuMjcgMC4xNy0wLjMxIDAtMC42MS0wLjAzLTAuOTEtMC4wOSAwLjYxIDEuOTIgMi4zOSAzLjMxIDQuNSAzLjM1LTEuNjUgMS4yOS0zLjczIDIuMDYtNS45OSAyLjA2LTAuMzkgMC0wLjc3LTAuMDItMS4xNS0wLjA3IDIuMTEgMS4zOCA0LjY1IDIuMTggNy4zNyAyLjE4Ii8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImZhY2Vib2siPgogICAgPGcgaWQ9InBhdGg0MjQxIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxtYXNrIGlkPSJtYXNrLTgiIGZpbGw9IndoaXRlIj4KICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC03Ii8+CiAgICAgPC9tYXNrPgogICAgIDx1c2UgaWQ9Ik1hc2siIHhsaW5rOmhyZWY9IiNwYXRoLTciIGZpbGw9IiM2NjY2NjYiLz4KICAgICA8cGF0aCBtYXNrPSJ1cmwoI21hc2stOCkiIGQ9Im0zMC4wMzcgMTAuMDAxYy0zLjkyIDAtNi42MDMgMi40NDktNi42MDMgNi45NDV2My41MjZoLTQuNDM0djUuMjU1aDQuNDM0djE0LjI3M2MxLjgyLTAuMjQ2IDMuNi0wLjcyOCA1LjI5OS0xLjQzOHYtMTIuODM1aDQuNDI0bDAuNjYtNS4yNTVoLTUuMDg0di0zLjAwMmMwLTEuNTIyIDAuNDc5LTMuMDg1IDIuNTUtMi41NjNoMi43MTd2LTQuN2MtMC40NjktMC4wNjQtMi4wODUtMC4yMDctMy45NjMtMC4yMDd2MC4wMDF6IiBmaWxsPSIjZmZmIi8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImxpbmtlZGluIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjQpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjNjY2Ii8+CiAgICA8ZyBpZD0iR3JvdXAtMiIgZmlsbD0iI0ZGRkZGRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSI+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZD0ibTMuMDY5NiAwLjQwNTc4YzEuNTA2OCAwIDIuNzMxNyAxLjIzMzEgMi43MzE3IDIuNzUwOSAwIDEuNTE5My0xLjIyNDkgMi43NTI0LTIuNzMxNyAyLjc1MjQtMS41MTA5IDAtMi43MzM1LTEuMjMzMS0yLjczMzUtMi43NTI0IDAuMDAwMDEtMS41MTc4IDEuMjIyNi0yLjc1MDkgMi43MzM1LTIuNzUwOXYtMC4wMDAwMnptLTIuMzU3OSAyMi44NjJoNC43MTM3di0xNS4yNzFsLTQuNzEzNy0wLjAwMDMgMC4wMDAwMiAxNS4yNzF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZD0ibTguMzgyIDcuOTk2N2g0LjUyMXYyLjA4NzNoMC4wNjNjMC42MjktMS4yMDExIDIuMTY3LTIuNDY2OSA0LjQ2LTIuNDY2OSA0Ljc3MyAwIDUuNjU0IDMuMTYyOSA1LjY1NCA3LjI3Mzl2OC4zNzdoLTQuNzF2LTcuNDI2YzAtMS43NzEtMC4wMzItNC4wNDktMi40NDktNC4wNDktMi40NTMgMC0yLjgyOSAxLjkyOS0yLjgyOSAzLjkydjcuNTU1aC00Ljcxdi0xNS4yNzEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0ieW91dHViZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwKSI+CiAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIgZmlsbD0iIzY2NiIvPgogICAgPGcgaWQ9Inl0X2ljb25fcmdiIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3IDExKSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMCIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC05Ii8+CiAgICAgIDwvbWFzaz4KICAgICAgPHBhdGggaWQ9IkZpbGwtMSIgZmlsbD0iI2ZmZiIgbWFzaz0idXJsKCNtYXNrLTEwKSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWxpbmUgaWQ9IkZpbGwtNCIgcG9pbnRzPSIxMC4zNjggMTMuMDYgMTcuMTgyIDkuMTgzNSAxMC4zNjggNS4zMDczIDEwLjM2OCAxMy4wNiIgZmlsbD0iIzY2NiIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJpbnN0YWdyYW0iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OCkiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMiIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xMSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay0xMikiIGQ9Im0xNC4yMzcgMC4wMDg5ODU0Yy0zLjg2NyAwLTQuMzUxNyAwLjAxNjM4OS01Ljg3MDEgMC4wODU2NzMtMS41MTU0IDAuMDY5MTEyLTIuNTUwMyAwLjMwOTgtMy40NTU4IDAuNjYxNzYtMC45MzYyIDAuMzYzNzgtMS43MzAxIDAuODUwNTgtMi41MjE3IDEuNjQyLTAuNzkxNCAwLjc5MTUtMS4yNzgyIDEuNTg1NS0xLjY0MiAyLjUyMTctMC4zNTE5MyAwLjkwNTUtMC41OTI2MSAxLjk0MDQtMC42NjE3MyAzLjQ1NTctMC4wNjkyODEgMS41MTg1LTAuMDg1NjcgMi4wMDMyLTAuMDg1NjcgNS44NzAyIDAgMy44NjYgMC4wMTYzODkgNC4zNTEgMC4wODU2NzIgNS44NjkgMC4wNjkxMTggMS41MTYgMC4zMDk4IDIuNTUxIDAuNjYxNzYgMy40NTYgMC4zNjM3NyAwLjkzNiAwLjg1MDU3IDEuNzMgMS42NDIgMi41MjIgMC43OTE2IDAuNzkxIDEuNTg1NSAxLjI3OCAyLjUyMTcgMS42NDIgMC45MDU1IDAuMzUyIDEuOTQwNCAwLjU5MiAzLjQ1NTggMC42NjEgMS41MTg0IDAuMDcgMi4wMDMxIDAuMDg2IDUuODcwMSAwLjA4NiAzLjg2NiAwIDQuMzUxLTAuMDE2IDUuODY5LTAuMDg2IDEuNTE2LTAuMDY5IDIuNTUxLTAuMzA5IDMuNDU2LTAuNjYxIDAuOTM2LTAuMzY0IDEuNzMtMC44NTEgMi41MjItMS42NDIgMC43OTEtMC43OTIgMS4yNzgtMS41ODYgMS42NDItMi41MjIgMC4zNTItMC45MDUgMC41OTItMS45NCAwLjY2MS0zLjQ1NiAwLjA3LTEuNTE4IDAuMDg2LTIuMDAzIDAuMDg2LTUuODY5IDAtMy44NjctMC4wMTYtNC4zNTE3LTAuMDg2LTUuODcwMi0wLjA2OS0xLjUxNTMtMC4zMDktMi41NTAyLTAuNjYxLTMuNDU1Ny0wLjM2NC0wLjkzNjItMC44NTEtMS43MzAyLTEuNjQyLTIuNTIxNy0wLjc5Mi0wLjc5MTQtMS41ODYtMS4yNzgyLTIuNTIyLTEuNjQyLTAuOTA1LTAuMzUxOTQtMS45NC0wLjU5MjYzLTMuNDU2LTAuNjYxNzQtMS41MTgtMC4wNjkyODYtMi4wMDMtMC4wODU2NzUtNS44NjktMC4wODU2NzV6bTAgMi41NjUxYzMuODAxIDAgNC4yNTEgMC4wMTQ2IDUuNzUyIDAuMDgzIDEuMzg4IDAuMDYzMyAyLjE0MiAwLjI5NTMgMi42NDQgMC40OTAyIDAuNjY0IDAuMjU4MyAxLjEzOSAwLjU2NjggMS42MzcgMS4wNjVzMC44MDcgMC45NzI0IDEuMDY1IDEuNjM2OWMwLjE5NSAwLjUwMTcgMC40MjcgMS4yNTU1IDAuNDkgMi42NDM2IDAuMDY4IDEuNTAxMiAwLjA4MyAxLjk1MTIgMC4wODMgNS43NTMyIDAgMy44MDEtMC4wMTUgNC4yNTEtMC4wODMgNS43NTItMC4wNjMgMS4zODgtMC4yOTUgMi4xNDItMC40OSAyLjY0NC0wLjI1OCAwLjY2NC0wLjU2NyAxLjEzOS0xLjA2NSAxLjYzN3MtMC45NzMgMC44MDctMS42MzcgMS4wNjVjLTAuNTAyIDAuMTk1LTEuMjU2IDAuNDI3LTIuNjQ0IDAuNDktMS41MDEgMC4wNjgtMS45NTEgMC4wODMtNS43NTIgMC4wODMtMy44MDIgMC00LjI1MjItMC4wMTUtNS43NTMyLTAuMDgzLTEuMzg4MS0wLjA2My0yLjE0MTktMC4yOTUtMi42NDM1LTAuNDktMC42NjQ2LTAuMjU4LTEuMTM4OC0wLjU2Ny0xLjYzNy0xLjA2NS0wLjQ5ODEtMC40OTgtMC44MDY3LTAuOTczLTEuMDY1LTEuNjM3LTAuMTk0OS0wLjUwMi0wLjQyNjgtMS4yNTYtMC40OTAxLTIuNjQ0LTAuMDY4NS0xLjUwMS0wLjA4MzEtMS45NTEtMC4wODMxLTUuNzUyIDAtMy44MDIgMC4wMTQ2LTQuMjUyIDAuMDgzMS01Ljc1MzIgMC4wNjMzLTEuMzg4MSAwLjI5NTItMi4xNDE5IDAuNDkwMS0yLjY0MzYgMC4yNTgzLTAuNjY0NSAwLjU2NjgtMS4xMzg3IDEuMDY1LTEuNjM2OXMwLjk3MjQtMC44MDY3IDEuNjM3LTEuMDY1YzAuNTAxNi0wLjE5NDkgMS4yNTU0LTAuNDI2OSAyLjY0MzUtMC40OTAyIDEuNTAxMi0wLjA2ODQgMS45NTEyLTAuMDgzIDUuNzUzMi0wLjA4M3oiLz4KICAgICA8L2c+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZmlsbD0iI2ZmZiIgZD0ibTE0LjI0IDE4Ljk5MWMtMi42MjEgMC00Ljc0NTktMi4xMjUtNC43NDU5LTQuNzQ1IDAtMi42MjEgMi4xMjQ5LTQuNzQ2IDQuNzQ1OS00Ljc0NiAyLjYyIDAgNC43NDUgMi4xMjUgNC43NDUgNC43NDYgMCAyLjYyLTIuMTI1IDQuNzQ1LTQuNzQ1IDQuNzQ1em0wLTEyLjA1NmMtNC4wMzggMC03LjMxMTEgMy4yNzMxLTcuMzExMSA3LjMxMTEgMCA0LjAzNyAzLjI3MzEgNy4zMSA3LjMxMTEgNy4zMSA0LjAzNyAwIDcuMzEtMy4yNzMgNy4zMS03LjMxIDAtNC4wMzgtMy4yNzMtNy4zMTExLTcuMzEtNy4zMTExeiIvPgogICAgIDxwYXRoIGlkPSJGaWxsLTUiIGZpbGw9IiNmZmYiIGQ9Im0yMy41NDEgNi42NDYxYzAgMC45NDM1LTAuNzY1IDEuNzA4My0xLjcwOSAxLjcwODMtMC45NDMgMC0xLjcwOC0wLjc2NDgtMS43MDgtMS43MDgzIDAtMC45NDM2IDAuNzY1LTEuNzA4NSAxLjcwOC0xLjcwODUgMC45NDQgMCAxLjcwOSAwLjc2NDkgMS43MDkgMS43MDg1Ii8+CiAgICA8L2c+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=");background-size:430px 96px;height:42px;width:42px;background-position:-223px 0}.p-icon--linkedin:hover{background-position-y:-56px}.p-icon--youtube{background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9Ijk2cHgiIHdpZHRoPSI0MzJweCIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQzMiA5NiI+PCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ni4yICg0NDQ5NikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiA8dGl0bGU+dmFuaWxsYS1zb2NpYWwtc3ByaXRlPC90aXRsZT4KIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogPGRlZnM+CiAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICA8cG9seWdvbiBpZD0icGF0aC0zIiBwb2ludHM9IjAuMDA4ODg3MSAxOC4zNjcgMC4wMDg4ODcxIDAuMDA1OTI0OCAyNi4wNjkgMC4wMDU5MjQ4IDI2LjA2OSAxOC4zNjciLz4KICA8cG9seWdvbiBpZD0icGF0aC01IiBwb2ludHM9IjAgMjguNDc5IDI4LjQ3MyAyOC40NzkgMjguNDczIDAuMDA4OTg1NCAwIDAuMDA4OTg1NCIvPgogIDxjaXJjbGUgaWQ9InBhdGgtNyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgPHBvbHlnb24gaWQ9InBhdGgtOSIgcG9pbnRzPSIwLjAwODg4NzEgMTguMzY3IDAuMDA4ODg3MSAwLjAwNTkyNDggMjYuMDY5IDAuMDA1OTI0OCAyNi4wNjkgMTguMzY3Ii8+CiAgPHBvbHlnb24gaWQ9InBhdGgtMTEiIHBvaW50cz0iMCAyOC40NzkgMjguNDczIDI4LjQ3OSAyOC40NzMgMC4wMDg5ODU0IDAgMC4wMDg5ODU0Ii8+CiA8L2RlZnM+CiA8ZyBpZD0iUGFnZS0xIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9Im5vbmUiPgogIDxnIGlkPSJ2YW5pbGxhLXNvY2lhbC1zcHJpdGUiPgogICA8ZyBpZD0iZmFjZWJvay1jb3B5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDU2KSI+CiAgICA8ZyBpZD0icGF0aDQyNDEiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiLz4KICAgICA8L21hc2s+CiAgICAgPHVzZSBpZD0iTWFzayIgeGxpbms6aHJlZj0iI3BhdGgtMSIgZmlsbD0iIzNCNTk5OCIvPgogICAgIDxwYXRoIG1hc2s9InVybCgjbWFzay0yKSIgZD0ibTMwLjAzNyAxMC4wMDFjLTMuOTIgMC02LjYwMyAyLjQ0OS02LjYwMyA2Ljk0NXYzLjUyNmgtNC40MzR2NS4yNTVoNC40MzR2MTQuMjczYzEuODItMC4yNDYgMy42LTAuNzI4IDUuMjk5LTEuNDM4di0xMi44MzVoNC40MjRsMC42Ni01LjI1NWgtNS4wODR2LTMuMDAyYzAtMS41MjIgMC40NzktMy4wODUgMi41NS0yLjU2M2gyLjcxN3YtNC43Yy0wLjQ2OS0wLjA2NC0yLjA4NS0wLjIwNy0zLjk2My0wLjIwN3YwLjAwMXoiIGZpbGw9IiNmZmYiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM3NzI5NTMiIGQ9Im0zNTYgODguNzM1Yy03LjA0IDAtMTIuNzQtNS43LTEyLjc0LTEyLjczNiAwLTcuMDM0IDUuNy0xMi43MzQgMTIuNzQtMTIuNzM0czEyLjc0IDUuNyAxMi43NCAxMi43MzRjMCA3LjAzNi01LjcgMTIuNzM2LTEyLjc0IDEyLjczNnptMjAtMTIuNzM1YzAgMTEuMDQ1LTguOTUgMjAtMjAgMjBzLTIwLTguOTU1LTIwLTIwYzAtMTEuMDQ2IDguOTUtMjAgMjAtMjBzMjAgOC45NTQgMjAgMjB6bS0yMC0xNS4xMzVjLTguMzYgMC0xNS4xNCA2Ljc3Ny0xNS4xNCAxNS4xMzUgMCA4LjM2IDYuNzggMTUuMTM1IDE1LjE0IDE1LjEzNXMxNS4xNC02Ljc3NSAxNS4xNC0xNS4xMzVjMC04LjM1OC02Ljc4LTE1LjEzNS0xNS4xNC0xNS4xMzV6Ii8+CiAgIDxnIGlkPSJjb2Zfb3JhbmdlX2hleC1jb3B5LTIiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzkyIDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNFOTU0MjAiIGQ9Im0zOS45MDYgMjAuMDEzYzAgMTAuOTg3LTguOTA1IDE5Ljg5My0xOS44OTIgMTkuODkzLTEwLjk4NiAwLTE5Ljg5Mi04LjkwNi0xOS44OTItMTkuODkzLTAuMDAwMzItMTAuOTg2IDguOTA1OS0xOS44OTEgMTkuODkyLTE5Ljg5MSAxMC45ODctMC4wMDAzMiAxOS44OTIgOC45MDU0IDE5Ljg5MiAxOS44OTF6Ii8+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiIGQ9Im05LjY5MDIgMjAuMDEzYzAgMS40MTMtMS4xNDUxIDIuNTU4LTIuNTU4NiAyLjU1OC0xLjQxMTcgMC0yLjU1NjktMS4xNDUtMi41NTY5LTIuNTU4IDAtMS40MTIgMS4xNDUyLTIuNTU3IDIuNTU2OS0yLjU1NyAxLjQxMzUgMCAyLjU1ODYgMS4xNDUgMi41NTg2IDIuNTU3em0xNC41NTEgMTIuNDM2YzAuNzA2IDEuMjIzIDIuMjcgMS42NDIgMy40OTMgMC45MzZzMS42NDItMi4yNyAwLjkzNi0zLjQ5NGMtMC43MDYtMS4yMjMtMi4yNy0xLjY0MS0zLjQ5My0wLjkzNS0xLjIyMyAwLjcwNy0xLjY0MiAyLjI3LTAuOTM2IDMuNDkzem00LjQyOS0yMi4zMTNjMC43MDYtMS4yMjM0IDAuMjg4LTIuNzg3NC0wLjkzNi0zLjQ5MjktMS4yMjItMC43MDYzLTIuNzg3LTAuMjg3Mi0zLjQ5MyAwLjkzNTctMC43MDYgMS4yMjMyLTAuMjg3IDIuNzg3MiAwLjkzNiAzLjQ5MzJzMi43ODggMC4yODcgMy40OTMtMC45MzZ6bS04LjY1NiAyLjU4NGMzLjgxMSAwIDYuOTM4IDIuOTIyIDcuMjY1IDYuNjQ4bDMuNzAxLTAuMDU5Yy0wLjE3NS0yLjc2OC0xLjM3Ni01LjI1OC0zLjIyNy03LjA5NC0wLjk4IDAuMzc4LTIuMTE2IDAuMzI2LTMuMDk3LTAuMjQtMC45ODEtMC41NjctMS41OTQtMS41MjYtMS43NTYtMi41NjUzLTAuOTItMC4yNDk4LTEuODg4LTAuMzgzNi0yLjg4Ni0wLjM4MzYtMS43NSAwLTMuNDA0IDAuNDA5My00Ljg3NCAxLjEzNjlsMS44MDEgMy4yMzRjMC45MzQtMC40MzMgMS45NzYtMC42NzcgMy4wNzMtMC42Nzd6bS03LjI5NCA3LjI5M2MwLTIuNDY3IDEuMjI2LTQuNjQ4IDMuMTAyLTUuOTY3bC0xLjkwMS0zLjE3N2MtMi4yMDEgMS40Ny0zLjg0MSAzLjcxMi00LjUzMjQgNi4zNDEgMC44MTg0IDAuNjYgMS4zNDM0IDEuNjcgMS4zNDM0IDIuODAzIDAgMS4xMzUtMC41MjUgMi4xNDUtMS4zNDM0IDIuODA0IDAuNjkxNCAyLjYyOSAyLjMzMTQgNC44NzIgNC41MzI0IDYuMzQzbDEuOTAxLTMuMTc3Yy0xLjg3Ni0xLjMyLTMuMTAyLTMuNTAxLTMuMTAyLTUuOTd6bTcuMjk0IDcuMjk1Yy0xLjA5NyAwLTIuMTM5LTAuMjQ0LTMuMDczLTAuNjc4bC0xLjgwMSAzLjIzNGMxLjQ3IDAuNzI5IDMuMTI0IDEuMTM3IDQuODc0IDEuMTM3IDAuOTk4IDAgMS45NjYtMC4xMzIgMi44ODYtMC4zODMgMC4xNjItMS4wMzkgMC43NzUtMS45OTkgMS43NTYtMi41NjQgMC45ODEtMC41NjcgMi4xMTctMC42MTggMy4wOTctMC4yNCAxLjg1MS0xLjgzNyAzLjA1Mi00LjMyNyAzLjIyNy03LjA5NmwtMy43MDEtMC4wNThjLTAuMzI3IDMuNzI2LTMuNDU0IDYuNjQ4LTcuMjY1IDYuNjQ4eiIvPgogICA8L2c+CiAgIDxnIGlkPSJsaW5rZWRpbi1jb3B5LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNCA1NikiPgogICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiIGZpbGw9IiMwMDcxQTEiLz4KICAgIDxnIGlkPSJHcm91cC0yIiBmaWxsPSIjRkZGRkZFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4IDgpIj4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBkPSJtMy4wNjk2IDAuNDA1NzhjMS41MDY4IDAgMi43MzE3IDEuMjMzMSAyLjczMTcgMi43NTA5IDAgMS41MTkzLTEuMjI0OSAyLjc1MjQtMi43MzE3IDIuNzUyNC0xLjUxMDkgMC0yLjczMzUtMS4yMzMxLTIuNzMzNS0yLjc1MjQgMC4wMDAwMS0xLjUxNzggMS4yMjI2LTIuNzUwOSAyLjczMzUtMi43NTA5di0wLjAwMDAyem0tMi4zNTc5IDIyLjg2Mmg0LjcxMzd2LTE1LjI3MWwtNC43MTM3LTAuMDAwMyAwLjAwMDAyIDE1LjI3MXoiLz4KICAgICA8cGF0aCBpZD0iRmlsbC01IiBkPSJtOC4zODIgNy45OTY3aDQuNTIxdjIuMDg3M2gwLjA2M2MwLjYyOS0xLjIwMTEgMi4xNjctMi40NjY5IDQuNDYtMi40NjY5IDQuNzczIDAgNS42NTQgMy4xNjI5IDUuNjU0IDcuMjczOXY4LjM3N2gtNC43MXYtNy40MjZjMC0xLjc3MS0wLjAzMi00LjA0OS0yLjQ0OS00LjA0OS0yLjQ1MyAwLTIuODI5IDEuOTI5LTIuODI5IDMuOTJ2Ny41NTVoLTQuNzF2LTE1LjI3MSIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJ5b3V0dWJlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAgNTYpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjRDkyNTJBIi8+CiAgICA8ZyBpZD0ieXRfaWNvbl9yZ2IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgMTEpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTQiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMyIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay00KSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWdvbiBpZD0iRmlsbC00IiBwb2ludHM9IjE3LjE4MiA5LjE4MzUgMTAuMzY4IDUuMzA3MyAxMC4zNjggMTMuMDYiIGZpbGw9IiNEOTI1MkEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iZ29vZ2xlLXBsdXMtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNERDRCMzkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyLWNvcHkiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEyIDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjMURBMUYyIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJMb2dvX194MjAxNF9fRklYRUQiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguOSAxMS40KSI+CiAgICAgPHBhdGggaWQ9IlNoYXBlIiBkPSJtNy40NCAxOS4xNWM4Ljg3IDAgMTMuNzItNy4zNSAxMy43Mi0xMy43MiAwLTAuMjEgMC0wLjQyLTAuMDEtMC42MiAwLjk0LTAuNjggMS43Ni0xLjUzIDIuNDEtMi41LTAuODYgMC4zOC0xLjc5IDAuNjQtMi43NyAwLjc2IDEtMC42IDEuNzYtMS41NCAyLjEyLTIuNjctMC45MyAwLjU1LTEuOTYgMC45NS0zLjA2IDEuMTctMC44OC0wLjk0LTIuMTMtMS41Mi0zLjUyLTEuNTItMi42NiAwLTQuODIgMi4xNi00LjgyIDQuODIgMCAwLjM4IDAuMDQgMC43NSAwLjEzIDEuMS00LjAxLTAuMi03LjU2LTIuMTItOS45NC01LjA0LTAuNDEgMC43MS0wLjY1IDEuNTQtMC42NSAyLjQyIDAgMS42NyAwLjg1IDMuMTUgMi4xNSA0LjAxLTAuNzktMC4wMi0xLjUzLTAuMjQtMi4xOC0wLjZ2MC4wNmMwIDIuMzQgMS42NiA0LjI4IDMuODcgNC43My0wLjQgMC4xMS0wLjgzIDAuMTctMS4yNyAwLjE3LTAuMzEgMC0wLjYxLTAuMDMtMC45MS0wLjA5IDAuNjEgMS45MiAyLjM5IDMuMzEgNC41IDMuMzUtMS42NSAxLjI5LTMuNzMgMi4wNi01Ljk5IDIuMDYtMC4zOSAwLTAuNzctMC4wMi0xLjE1LTAuMDcgMi4xMSAxLjM4IDQuNjUgMi4xOCA3LjM3IDIuMTgiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iaW5zdGFncmFtLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjRkIzOTU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIvPgogICAgPC9nPgogICAgPGcgaWQ9Ikdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2IDYpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTYiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtNSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay02KSIgZD0ibTE0LjIzNyAwLjAwODk4NTRjLTMuODY3IDAtNC4zNTE3IDAuMDE2Mzg5LTUuODcwMSAwLjA4NTY3My0xLjUxNTQgMC4wNjkxMTItMi41NTAzIDAuMzA5OC0zLjQ1NTggMC42NjE3Ni0wLjkzNjIgMC4zNjM3OC0xLjczMDEgMC44NTA1OC0yLjUyMTcgMS42NDItMC43OTE0IDAuNzkxNS0xLjI3ODIgMS41ODU1LTEuNjQyIDIuNTIxNy0wLjM1MTkzIDAuOTA1NS0wLjU5MjYxIDEuOTQwNC0wLjY2MTczIDMuNDU1Ny0wLjA2OTI4MSAxLjUxODUtMC4wODU2NyAyLjAwMzItMC4wODU2NyA1Ljg3MDIgMCAzLjg2NiAwLjAxNjM4OSA0LjM1MSAwLjA4NTY3MiA1Ljg2OSAwLjA2OTExOCAxLjUxNiAwLjMwOTggMi41NTEgMC42NjE3NiAzLjQ1NiAwLjM2Mzc3IDAuOTM2IDAuODUwNTcgMS43MyAxLjY0MiAyLjUyMiAwLjc5MTYgMC43OTEgMS41ODU1IDEuMjc4IDIuNTIxNyAxLjY0MiAwLjkwNTUgMC4zNTIgMS45NDA0IDAuNTkyIDMuNDU1OCAwLjY2MSAxLjUxODQgMC4wNyAyLjAwMzEgMC4wODYgNS44NzAxIDAuMDg2IDMuODY2IDAgNC4zNTEtMC4wMTYgNS44NjktMC4wODYgMS41MTYtMC4wNjkgMi41NTEtMC4zMDkgMy40NTYtMC42NjEgMC45MzYtMC4zNjQgMS43My0wLjg1MSAyLjUyMi0xLjY0MiAwLjc5MS0wLjc5MiAxLjI3OC0xLjU4NiAxLjY0Mi0yLjUyMiAwLjM1Mi0wLjkwNSAwLjU5Mi0xLjk0IDAuNjYxLTMuNDU2IDAuMDctMS41MTggMC4wODYtMi4wMDMgMC4wODYtNS44NjkgMC0zLjg2Ny0wLjAxNi00LjM1MTctMC4wODYtNS44NzAyLTAuMDY5LTEuNTE1My0wLjMwOS0yLjU1MDItMC42NjEtMy40NTU3LTAuMzY0LTAuOTM2Mi0wLjg1MS0xLjczMDItMS42NDItMi41MjE3LTAuNzkyLTAuNzkxNC0xLjU4Ni0xLjI3ODItMi41MjItMS42NDItMC45MDUtMC4zNTE5NC0xLjk0LTAuNTkyNjMtMy40NTYtMC42NjE3NC0xLjUxOC0wLjA2OTI4Ni0yLjAwMy0wLjA4NTY3NS01Ljg2OS0wLjA4NTY3NXptMCAyLjU2NTFjMy44MDEgMCA0LjI1MSAwLjAxNDYgNS43NTIgMC4wODMgMS4zODggMC4wNjMzIDIuMTQyIDAuMjk1MyAyLjY0NCAwLjQ5MDIgMC42NjQgMC4yNTgzIDEuMTM5IDAuNTY2OCAxLjYzNyAxLjA2NXMwLjgwNyAwLjk3MjQgMS4wNjUgMS42MzY5YzAuMTk1IDAuNTAxNyAwLjQyNyAxLjI1NTUgMC40OSAyLjY0MzYgMC4wNjggMS41MDEyIDAuMDgzIDEuOTUxMiAwLjA4MyA1Ljc1MzIgMCAzLjgwMS0wLjAxNSA0LjI1MS0wLjA4MyA1Ljc1Mi0wLjA2MyAxLjM4OC0wLjI5NSAyLjE0Mi0wLjQ5IDIuNjQ0LTAuMjU4IDAuNjY0LTAuNTY3IDEuMTM5LTEuMDY1IDEuNjM3cy0wLjk3MyAwLjgwNy0xLjYzNyAxLjA2NWMtMC41MDIgMC4xOTUtMS4yNTYgMC40MjctMi42NDQgMC40OS0xLjUwMSAwLjA2OC0xLjk1MSAwLjA4My01Ljc1MiAwLjA4My0zLjgwMiAwLTQuMjUyMi0wLjAxNS01Ljc1MzItMC4wODMtMS4zODgxLTAuMDYzLTIuMTQxOS0wLjI5NS0yLjY0MzUtMC40OS0wLjY2NDYtMC4yNTgtMS4xMzg4LTAuNTY3LTEuNjM3LTEuMDY1LTAuNDk4MS0wLjQ5OC0wLjgwNjctMC45NzMtMS4wNjUtMS42MzctMC4xOTQ5LTAuNTAyLTAuNDI2OC0xLjI1Ni0wLjQ5MDEtMi42NDQtMC4wNjg1LTEuNTAxLTAuMDgzMS0xLjk1MS0wLjA4MzEtNS43NTIgMC0zLjgwMiAwLjAxNDYtNC4yNTIgMC4wODMxLTUuNzUzMiAwLjA2MzMtMS4zODgxIDAuMjk1Mi0yLjE0MTkgMC40OTAxLTIuNjQzNiAwLjI1ODMtMC42NjQ1IDAuNTY2OC0xLjEzODcgMS4wNjUtMS42MzY5czAuOTcyNC0wLjgwNjcgMS42MzctMS4wNjVjMC41MDE2LTAuMTk0OSAxLjI1NTQtMC40MjY5IDIuNjQzNS0wLjQ5MDIgMS41MDEyLTAuMDY4NCAxLjk1MTItMC4wODMgNS43NTMyLTAuMDgzeiIvPgogICAgIDwvZz4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBmaWxsPSIjZmZmIiBkPSJtMTQuMjQgMTguOTkxYy0yLjYyMSAwLTQuNzQ1OS0yLjEyNS00Ljc0NTktNC43NDUgMC0yLjYyMSAyLjEyNDktNC43NDYgNC43NDU5LTQuNzQ2IDIuNjIgMCA0Ljc0NSAyLjEyNSA0Ljc0NSA0Ljc0NiAwIDIuNjItMi4xMjUgNC43NDUtNC43NDUgNC43NDV6bTAtMTIuMDU2Yy00LjAzOCAwLTcuMzExMSAzLjI3MzEtNy4zMTExIDcuMzExMSAwIDQuMDM3IDMuMjczMSA3LjMxIDcuMzExMSA3LjMxIDQuMDM3IDAgNy4zMS0zLjI3MyA3LjMxLTcuMzEgMC00LjAzOC0zLjI3My03LjMxMTEtNy4zMS03LjMxMTF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZmlsbD0iI2ZmZiIgZD0ibTIzLjU0MSA2LjY0NjFjMCAwLjk0MzUtMC43NjUgMS43MDgzLTEuNzA5IDEuNzA4My0wLjk0MyAwLTEuNzA4LTAuNzY0OC0xLjcwOC0xLjcwODMgMC0wLjk0MzYgMC43NjUtMS43MDg1IDEuNzA4LTEuNzA4NSAwLjk0NCAwIDEuNzA5IDAuNzY0OSAxLjcwOSAxLjcwODUiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQiIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iIzY2NiIgZD0ibTM1NiAzMi43MzVjLTcuMDQgMC0xMi43NC01LjctMTIuNzQtMTIuNzM2IDAtNy4wMzQgNS43LTEyLjczNCAxMi43NC0xMi43MzQgNy4wNC0wLjAwMDUgMTIuNzQgNS43IDEyLjc0IDEyLjczNCAwIDcuMDM2LTUuNyAxMi43MzYtMTIuNzQgMTIuNzM2em0yMC0xMi43MzVjMCAxMS4wNDUtOC45NSAyMC0yMCAyMHMtMjAtOC45NTUtMjAtMjBjMC0xMS4wNDYgOC45NS0yMCAyMC0yMHMyMCA4Ljk1MzYgMjAgMjB6bS0yMC0xNS4xMzRjLTguMzYgMC0xNS4xNCA2Ljc3NjUtMTUuMTQgMTUuMTM0IDAgOC4zNiA2Ljc4IDE1LjEzNSAxNS4xNCAxNS4xMzVzMTUuMTQtNi43NzUgMTUuMTQtMTUuMTM1YzAtOC4zNTgtNi43OC0xNS4xMzQtMTUuMTQtMTUuMTM0eiIvPgogICA8ZyBpZD0iY29mX29yYW5nZV9oZXgtY29weSIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTIpIj4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iIzY2NiIgZD0ibTM5LjkwNiAyMC4wMTNjMCAxMC45ODctOC45MDUgMTkuODkzLTE5Ljg5MiAxOS44OTMtMTAuOTg2IDAtMTkuODkyLTguOTA2LTE5Ljg5Mi0xOS44OTMtMC4wMDAzMi0xMC45ODYgOC45MDU5LTE5Ljg5MSAxOS44OTItMTkuODkxIDEwLjk4Ny0wLjAwMDMyIDE5Ljg5MiA4LjkwNTQgMTkuODkyIDE5Ljg5MXoiLz4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iI2ZmZiIgZD0ibTkuNjkwMiAyMC4wMTNjMCAxLjQxMy0xLjE0NTEgMi41NTgtMi41NTg2IDIuNTU4LTEuNDExNyAwLTIuNTU2OS0xLjE0NS0yLjU1NjktMi41NTggMC0xLjQxMiAxLjE0NTItMi41NTcgMi41NTY5LTIuNTU3IDEuNDEzNSAwIDIuNTU4NiAxLjE0NSAyLjU1ODYgMi41NTd6bTE0LjU1MSAxMi40MzZjMC43MDYgMS4yMjMgMi4yNyAxLjY0MiAzLjQ5MyAwLjkzNnMxLjY0Mi0yLjI3IDAuOTM2LTMuNDk0Yy0wLjcwNi0xLjIyMy0yLjI3LTEuNjQxLTMuNDkzLTAuOTM1LTEuMjIzIDAuNzA3LTEuNjQyIDIuMjctMC45MzYgMy40OTN6bTQuNDI5LTIyLjMxM2MwLjcwNi0xLjIyMzQgMC4yODgtMi43ODc0LTAuOTM2LTMuNDkyOS0xLjIyMi0wLjcwNjMtMi43ODctMC4yODcyLTMuNDkzIDAuOTM1Ny0wLjcwNiAxLjIyMzItMC4yODcgMi43ODcyIDAuOTM2IDMuNDkzMnMyLjc4OCAwLjI4NyAzLjQ5My0wLjkzNnptLTguNjU2IDIuNTg0YzMuODExIDAgNi45MzggMi45MjIgNy4yNjUgNi42NDhsMy43MDEtMC4wNTljLTAuMTc1LTIuNzY4LTEuMzc2LTUuMjU4LTMuMjI3LTcuMDk0LTAuOTggMC4zNzgtMi4xMTYgMC4zMjYtMy4wOTctMC4yNC0wLjk4MS0wLjU2Ny0xLjU5NC0xLjUyNi0xLjc1Ni0yLjU2NTMtMC45Mi0wLjI0OTgtMS44ODgtMC4zODM2LTIuODg2LTAuMzgzNi0xLjc1IDAtMy40MDQgMC40MDkzLTQuODc0IDEuMTM2OWwxLjgwMSAzLjIzNGMwLjkzNC0wLjQzMyAxLjk3Ni0wLjY3NyAzLjA3My0wLjY3N3ptLTcuMjk0IDcuMjkzYzAtMi40NjcgMS4yMjYtNC42NDggMy4xMDItNS45NjdsLTEuOTAxLTMuMTc3Yy0yLjIwMSAxLjQ3LTMuODQxIDMuNzEyLTQuNTMyNCA2LjM0MSAwLjgxODQgMC42NiAxLjM0MzQgMS42NyAxLjM0MzQgMi44MDMgMCAxLjEzNS0wLjUyNSAyLjE0NS0xLjM0MzQgMi44MDQgMC42OTE0IDIuNjI5IDIuMzMxNCA0Ljg3MiA0LjUzMjQgNi4zNDNsMS45MDEtMy4xNzdjLTEuODc2LTEuMzItMy4xMDItMy41MDEtMy4xMDItNS45N3ptNy4yOTQgNy4yOTVjLTEuMDk3IDAtMi4xMzktMC4yNDQtMy4wNzMtMC42NzhsLTEuODAxIDMuMjM0YzEuNDcgMC43MjkgMy4xMjQgMS4xMzcgNC44NzQgMS4xMzcgMC45OTggMCAxLjk2Ni0wLjEzMiAyLjg4Ni0wLjM4MyAwLjE2Mi0xLjAzOSAwLjc3NS0xLjk5OSAxLjc1Ni0yLjU2NCAwLjk4MS0wLjU2NyAyLjExNy0wLjYxOCAzLjA5Ny0wLjI0IDEuODUxLTEuODM3IDMuMDUyLTQuMzI3IDMuMjI3LTcuMDk2bC0zLjcwMS0wLjA1OGMtMC4zMjcgMy43MjYtMy40NTQgNi42NDgtNy4yNjUgNi42NDh6Ii8+CiAgIDwvZz4KICAgPGcgaWQ9Imdvb2dsZS1wbHVzIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM2NjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMikiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiI+CiAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0iTG9nb19feDIwMTRfX0ZJWEVEIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjkgMTEuNCkiPgogICAgIDxwYXRoIGlkPSJTaGFwZSIgZD0ibTcuNDQgMTkuMTVjOC44NyAwIDEzLjcyLTcuMzUgMTMuNzItMTMuNzIgMC0wLjIxIDAtMC40Mi0wLjAxLTAuNjIgMC45NC0wLjY4IDEuNzYtMS41MyAyLjQxLTIuNS0wLjg2IDAuMzgtMS43OSAwLjY0LTIuNzcgMC43NiAxLTAuNiAxLjc2LTEuNTQgMi4xMi0yLjY3LTAuOTMgMC41NS0xLjk2IDAuOTUtMy4wNiAxLjE3LTAuODgtMC45NC0yLjEzLTEuNTItMy41Mi0xLjUyLTIuNjYgMC00LjgyIDIuMTYtNC44MiA0LjgyIDAgMC4zOCAwLjA0IDAuNzUgMC4xMyAxLjEtNC4wMS0wLjItNy41Ni0yLjEyLTkuOTQtNS4wNC0wLjQxIDAuNzEtMC42NSAxLjU0LTAuNjUgMi40MiAwIDEuNjcgMC44NSAzLjE1IDIuMTUgNC4wMS0wLjc5LTAuMDItMS41My0wLjI0LTIuMTgtMC42djAuMDZjMCAyLjM0IDEuNjYgNC4yOCAzLjg3IDQuNzMtMC40IDAuMTEtMC44MyAwLjE3LTEuMjcgMC4xNy0wLjMxIDAtMC42MS0wLjAzLTAuOTEtMC4wOSAwLjYxIDEuOTIgMi4zOSAzLjMxIDQuNSAzLjM1LTEuNjUgMS4yOS0zLjczIDIuMDYtNS45OSAyLjA2LTAuMzkgMC0wLjc3LTAuMDItMS4xNS0wLjA3IDIuMTEgMS4zOCA0LjY1IDIuMTggNy4zNyAyLjE4Ii8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImZhY2Vib2siPgogICAgPGcgaWQ9InBhdGg0MjQxIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxtYXNrIGlkPSJtYXNrLTgiIGZpbGw9IndoaXRlIj4KICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC03Ii8+CiAgICAgPC9tYXNrPgogICAgIDx1c2UgaWQ9Ik1hc2siIHhsaW5rOmhyZWY9IiNwYXRoLTciIGZpbGw9IiM2NjY2NjYiLz4KICAgICA8cGF0aCBtYXNrPSJ1cmwoI21hc2stOCkiIGQ9Im0zMC4wMzcgMTAuMDAxYy0zLjkyIDAtNi42MDMgMi40NDktNi42MDMgNi45NDV2My41MjZoLTQuNDM0djUuMjU1aDQuNDM0djE0LjI3M2MxLjgyLTAuMjQ2IDMuNi0wLjcyOCA1LjI5OS0xLjQzOHYtMTIuODM1aDQuNDI0bDAuNjYtNS4yNTVoLTUuMDg0di0zLjAwMmMwLTEuNTIyIDAuNDc5LTMuMDg1IDIuNTUtMi41NjNoMi43MTd2LTQuN2MtMC40NjktMC4wNjQtMi4wODUtMC4yMDctMy45NjMtMC4yMDd2MC4wMDF6IiBmaWxsPSIjZmZmIi8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImxpbmtlZGluIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjQpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjNjY2Ii8+CiAgICA8ZyBpZD0iR3JvdXAtMiIgZmlsbD0iI0ZGRkZGRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSI+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZD0ibTMuMDY5NiAwLjQwNTc4YzEuNTA2OCAwIDIuNzMxNyAxLjIzMzEgMi43MzE3IDIuNzUwOSAwIDEuNTE5My0xLjIyNDkgMi43NTI0LTIuNzMxNyAyLjc1MjQtMS41MTA5IDAtMi43MzM1LTEuMjMzMS0yLjczMzUtMi43NTI0IDAuMDAwMDEtMS41MTc4IDEuMjIyNi0yLjc1MDkgMi43MzM1LTIuNzUwOXYtMC4wMDAwMnptLTIuMzU3OSAyMi44NjJoNC43MTM3di0xNS4yNzFsLTQuNzEzNy0wLjAwMDMgMC4wMDAwMiAxNS4yNzF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZD0ibTguMzgyIDcuOTk2N2g0LjUyMXYyLjA4NzNoMC4wNjNjMC42MjktMS4yMDExIDIuMTY3LTIuNDY2OSA0LjQ2LTIuNDY2OSA0Ljc3MyAwIDUuNjU0IDMuMTYyOSA1LjY1NCA3LjI3Mzl2OC4zNzdoLTQuNzF2LTcuNDI2YzAtMS43NzEtMC4wMzItNC4wNDktMi40NDktNC4wNDktMi40NTMgMC0yLjgyOSAxLjkyOS0yLjgyOSAzLjkydjcuNTU1aC00Ljcxdi0xNS4yNzEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0ieW91dHViZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwKSI+CiAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIgZmlsbD0iIzY2NiIvPgogICAgPGcgaWQ9Inl0X2ljb25fcmdiIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3IDExKSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMCIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC05Ii8+CiAgICAgIDwvbWFzaz4KICAgICAgPHBhdGggaWQ9IkZpbGwtMSIgZmlsbD0iI2ZmZiIgbWFzaz0idXJsKCNtYXNrLTEwKSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWxpbmUgaWQ9IkZpbGwtNCIgcG9pbnRzPSIxMC4zNjggMTMuMDYgMTcuMTgyIDkuMTgzNSAxMC4zNjggNS4zMDczIDEwLjM2OCAxMy4wNiIgZmlsbD0iIzY2NiIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJpbnN0YWdyYW0iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OCkiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMiIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xMSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay0xMikiIGQ9Im0xNC4yMzcgMC4wMDg5ODU0Yy0zLjg2NyAwLTQuMzUxNyAwLjAxNjM4OS01Ljg3MDEgMC4wODU2NzMtMS41MTU0IDAuMDY5MTEyLTIuNTUwMyAwLjMwOTgtMy40NTU4IDAuNjYxNzYtMC45MzYyIDAuMzYzNzgtMS43MzAxIDAuODUwNTgtMi41MjE3IDEuNjQyLTAuNzkxNCAwLjc5MTUtMS4yNzgyIDEuNTg1NS0xLjY0MiAyLjUyMTctMC4zNTE5MyAwLjkwNTUtMC41OTI2MSAxLjk0MDQtMC42NjE3MyAzLjQ1NTctMC4wNjkyODEgMS41MTg1LTAuMDg1NjcgMi4wMDMyLTAuMDg1NjcgNS44NzAyIDAgMy44NjYgMC4wMTYzODkgNC4zNTEgMC4wODU2NzIgNS44NjkgMC4wNjkxMTggMS41MTYgMC4zMDk4IDIuNTUxIDAuNjYxNzYgMy40NTYgMC4zNjM3NyAwLjkzNiAwLjg1MDU3IDEuNzMgMS42NDIgMi41MjIgMC43OTE2IDAuNzkxIDEuNTg1NSAxLjI3OCAyLjUyMTcgMS42NDIgMC45MDU1IDAuMzUyIDEuOTQwNCAwLjU5MiAzLjQ1NTggMC42NjEgMS41MTg0IDAuMDcgMi4wMDMxIDAuMDg2IDUuODcwMSAwLjA4NiAzLjg2NiAwIDQuMzUxLTAuMDE2IDUuODY5LTAuMDg2IDEuNTE2LTAuMDY5IDIuNTUxLTAuMzA5IDMuNDU2LTAuNjYxIDAuOTM2LTAuMzY0IDEuNzMtMC44NTEgMi41MjItMS42NDIgMC43OTEtMC43OTIgMS4yNzgtMS41ODYgMS42NDItMi41MjIgMC4zNTItMC45MDUgMC41OTItMS45NCAwLjY2MS0zLjQ1NiAwLjA3LTEuNTE4IDAuMDg2LTIuMDAzIDAuMDg2LTUuODY5IDAtMy44NjctMC4wMTYtNC4zNTE3LTAuMDg2LTUuODcwMi0wLjA2OS0xLjUxNTMtMC4zMDktMi41NTAyLTAuNjYxLTMuNDU1Ny0wLjM2NC0wLjkzNjItMC44NTEtMS43MzAyLTEuNjQyLTIuNTIxNy0wLjc5Mi0wLjc5MTQtMS41ODYtMS4yNzgyLTIuNTIyLTEuNjQyLTAuOTA1LTAuMzUxOTQtMS45NC0wLjU5MjYzLTMuNDU2LTAuNjYxNzQtMS41MTgtMC4wNjkyODYtMi4wMDMtMC4wODU2NzUtNS44NjktMC4wODU2NzV6bTAgMi41NjUxYzMuODAxIDAgNC4yNTEgMC4wMTQ2IDUuNzUyIDAuMDgzIDEuMzg4IDAuMDYzMyAyLjE0MiAwLjI5NTMgMi42NDQgMC40OTAyIDAuNjY0IDAuMjU4MyAxLjEzOSAwLjU2NjggMS42MzcgMS4wNjVzMC44MDcgMC45NzI0IDEuMDY1IDEuNjM2OWMwLjE5NSAwLjUwMTcgMC40MjcgMS4yNTU1IDAuNDkgMi42NDM2IDAuMDY4IDEuNTAxMiAwLjA4MyAxLjk1MTIgMC4wODMgNS43NTMyIDAgMy44MDEtMC4wMTUgNC4yNTEtMC4wODMgNS43NTItMC4wNjMgMS4zODgtMC4yOTUgMi4xNDItMC40OSAyLjY0NC0wLjI1OCAwLjY2NC0wLjU2NyAxLjEzOS0xLjA2NSAxLjYzN3MtMC45NzMgMC44MDctMS42MzcgMS4wNjVjLTAuNTAyIDAuMTk1LTEuMjU2IDAuNDI3LTIuNjQ0IDAuNDktMS41MDEgMC4wNjgtMS45NTEgMC4wODMtNS43NTIgMC4wODMtMy44MDIgMC00LjI1MjItMC4wMTUtNS43NTMyLTAuMDgzLTEuMzg4MS0wLjA2My0yLjE0MTktMC4yOTUtMi42NDM1LTAuNDktMC42NjQ2LTAuMjU4LTEuMTM4OC0wLjU2Ny0xLjYzNy0xLjA2NS0wLjQ5ODEtMC40OTgtMC44MDY3LTAuOTczLTEuMDY1LTEuNjM3LTAuMTk0OS0wLjUwMi0wLjQyNjgtMS4yNTYtMC40OTAxLTIuNjQ0LTAuMDY4NS0xLjUwMS0wLjA4MzEtMS45NTEtMC4wODMxLTUuNzUyIDAtMy44MDIgMC4wMTQ2LTQuMjUyIDAuMDgzMS01Ljc1MzIgMC4wNjMzLTEuMzg4MSAwLjI5NTItMi4xNDE5IDAuNDkwMS0yLjY0MzYgMC4yNTgzLTAuNjY0NSAwLjU2NjgtMS4xMzg3IDEuMDY1LTEuNjM2OXMwLjk3MjQtMC44MDY3IDEuNjM3LTEuMDY1YzAuNTAxNi0wLjE5NDkgMS4yNTU0LTAuNDI2OSAyLjY0MzUtMC40OTAyIDEuNTAxMi0wLjA2ODQgMS45NTEyLTAuMDgzIDUuNzUzMi0wLjA4M3oiLz4KICAgICA8L2c+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZmlsbD0iI2ZmZiIgZD0ibTE0LjI0IDE4Ljk5MWMtMi42MjEgMC00Ljc0NTktMi4xMjUtNC43NDU5LTQuNzQ1IDAtMi42MjEgMi4xMjQ5LTQuNzQ2IDQuNzQ1OS00Ljc0NiAyLjYyIDAgNC43NDUgMi4xMjUgNC43NDUgNC43NDYgMCAyLjYyLTIuMTI1IDQuNzQ1LTQuNzQ1IDQuNzQ1em0wLTEyLjA1NmMtNC4wMzggMC03LjMxMTEgMy4yNzMxLTcuMzExMSA3LjMxMTEgMCA0LjAzNyAzLjI3MzEgNy4zMSA3LjMxMTEgNy4zMSA0LjAzNyAwIDcuMzEtMy4yNzMgNy4zMS03LjMxIDAtNC4wMzgtMy4yNzMtNy4zMTExLTcuMzEtNy4zMTExeiIvPgogICAgIDxwYXRoIGlkPSJGaWxsLTUiIGZpbGw9IiNmZmYiIGQ9Im0yMy41NDEgNi42NDYxYzAgMC45NDM1LTAuNzY1IDEuNzA4My0xLjcwOSAxLjcwODMtMC45NDMgMC0xLjcwOC0wLjc2NDgtMS43MDgtMS43MDgzIDAtMC45NDM2IDAuNzY1LTEuNzA4NSAxLjcwOC0xLjcwODUgMC45NDQgMCAxLjcwOSAwLjc2NDkgMS43MDkgMS43MDg1Ii8+CiAgICA8L2c+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=");background-size:430px 96px;height:42px;width:42px;background-position:-279px 0}.p-icon--youtube:hover{background-position-y:-56px}.p-icon--canonical{background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9Ijk2cHgiIHdpZHRoPSI0MzJweCIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQzMiA5NiI+PCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ni4yICg0NDQ5NikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiA8dGl0bGU+dmFuaWxsYS1zb2NpYWwtc3ByaXRlPC90aXRsZT4KIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogPGRlZnM+CiAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICA8cG9seWdvbiBpZD0icGF0aC0zIiBwb2ludHM9IjAuMDA4ODg3MSAxOC4zNjcgMC4wMDg4ODcxIDAuMDA1OTI0OCAyNi4wNjkgMC4wMDU5MjQ4IDI2LjA2OSAxOC4zNjciLz4KICA8cG9seWdvbiBpZD0icGF0aC01IiBwb2ludHM9IjAgMjguNDc5IDI4LjQ3MyAyOC40NzkgMjguNDczIDAuMDA4OTg1NCAwIDAuMDA4OTg1NCIvPgogIDxjaXJjbGUgaWQ9InBhdGgtNyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgPHBvbHlnb24gaWQ9InBhdGgtOSIgcG9pbnRzPSIwLjAwODg4NzEgMTguMzY3IDAuMDA4ODg3MSAwLjAwNTkyNDggMjYuMDY5IDAuMDA1OTI0OCAyNi4wNjkgMTguMzY3Ii8+CiAgPHBvbHlnb24gaWQ9InBhdGgtMTEiIHBvaW50cz0iMCAyOC40NzkgMjguNDczIDI4LjQ3OSAyOC40NzMgMC4wMDg5ODU0IDAgMC4wMDg5ODU0Ii8+CiA8L2RlZnM+CiA8ZyBpZD0iUGFnZS0xIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9Im5vbmUiPgogIDxnIGlkPSJ2YW5pbGxhLXNvY2lhbC1zcHJpdGUiPgogICA8ZyBpZD0iZmFjZWJvay1jb3B5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDU2KSI+CiAgICA8ZyBpZD0icGF0aDQyNDEiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiLz4KICAgICA8L21hc2s+CiAgICAgPHVzZSBpZD0iTWFzayIgeGxpbms6aHJlZj0iI3BhdGgtMSIgZmlsbD0iIzNCNTk5OCIvPgogICAgIDxwYXRoIG1hc2s9InVybCgjbWFzay0yKSIgZD0ibTMwLjAzNyAxMC4wMDFjLTMuOTIgMC02LjYwMyAyLjQ0OS02LjYwMyA2Ljk0NXYzLjUyNmgtNC40MzR2NS4yNTVoNC40MzR2MTQuMjczYzEuODItMC4yNDYgMy42LTAuNzI4IDUuMjk5LTEuNDM4di0xMi44MzVoNC40MjRsMC42Ni01LjI1NWgtNS4wODR2LTMuMDAyYzAtMS41MjIgMC40NzktMy4wODUgMi41NS0yLjU2M2gyLjcxN3YtNC43Yy0wLjQ2OS0wLjA2NC0yLjA4NS0wLjIwNy0zLjk2My0wLjIwN3YwLjAwMXoiIGZpbGw9IiNmZmYiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM3NzI5NTMiIGQ9Im0zNTYgODguNzM1Yy03LjA0IDAtMTIuNzQtNS43LTEyLjc0LTEyLjczNiAwLTcuMDM0IDUuNy0xMi43MzQgMTIuNzQtMTIuNzM0czEyLjc0IDUuNyAxMi43NCAxMi43MzRjMCA3LjAzNi01LjcgMTIuNzM2LTEyLjc0IDEyLjczNnptMjAtMTIuNzM1YzAgMTEuMDQ1LTguOTUgMjAtMjAgMjBzLTIwLTguOTU1LTIwLTIwYzAtMTEuMDQ2IDguOTUtMjAgMjAtMjBzMjAgOC45NTQgMjAgMjB6bS0yMC0xNS4xMzVjLTguMzYgMC0xNS4xNCA2Ljc3Ny0xNS4xNCAxNS4xMzUgMCA4LjM2IDYuNzggMTUuMTM1IDE1LjE0IDE1LjEzNXMxNS4xNC02Ljc3NSAxNS4xNC0xNS4xMzVjMC04LjM1OC02Ljc4LTE1LjEzNS0xNS4xNC0xNS4xMzV6Ii8+CiAgIDxnIGlkPSJjb2Zfb3JhbmdlX2hleC1jb3B5LTIiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzkyIDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNFOTU0MjAiIGQ9Im0zOS45MDYgMjAuMDEzYzAgMTAuOTg3LTguOTA1IDE5Ljg5My0xOS44OTIgMTkuODkzLTEwLjk4NiAwLTE5Ljg5Mi04LjkwNi0xOS44OTItMTkuODkzLTAuMDAwMzItMTAuOTg2IDguOTA1OS0xOS44OTEgMTkuODkyLTE5Ljg5MSAxMC45ODctMC4wMDAzMiAxOS44OTIgOC45MDU0IDE5Ljg5MiAxOS44OTF6Ii8+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiIGQ9Im05LjY5MDIgMjAuMDEzYzAgMS40MTMtMS4xNDUxIDIuNTU4LTIuNTU4NiAyLjU1OC0xLjQxMTcgMC0yLjU1NjktMS4xNDUtMi41NTY5LTIuNTU4IDAtMS40MTIgMS4xNDUyLTIuNTU3IDIuNTU2OS0yLjU1NyAxLjQxMzUgMCAyLjU1ODYgMS4xNDUgMi41NTg2IDIuNTU3em0xNC41NTEgMTIuNDM2YzAuNzA2IDEuMjIzIDIuMjcgMS42NDIgMy40OTMgMC45MzZzMS42NDItMi4yNyAwLjkzNi0zLjQ5NGMtMC43MDYtMS4yMjMtMi4yNy0xLjY0MS0zLjQ5My0wLjkzNS0xLjIyMyAwLjcwNy0xLjY0MiAyLjI3LTAuOTM2IDMuNDkzem00LjQyOS0yMi4zMTNjMC43MDYtMS4yMjM0IDAuMjg4LTIuNzg3NC0wLjkzNi0zLjQ5MjktMS4yMjItMC43MDYzLTIuNzg3LTAuMjg3Mi0zLjQ5MyAwLjkzNTctMC43MDYgMS4yMjMyLTAuMjg3IDIuNzg3MiAwLjkzNiAzLjQ5MzJzMi43ODggMC4yODcgMy40OTMtMC45MzZ6bS04LjY1NiAyLjU4NGMzLjgxMSAwIDYuOTM4IDIuOTIyIDcuMjY1IDYuNjQ4bDMuNzAxLTAuMDU5Yy0wLjE3NS0yLjc2OC0xLjM3Ni01LjI1OC0zLjIyNy03LjA5NC0wLjk4IDAuMzc4LTIuMTE2IDAuMzI2LTMuMDk3LTAuMjQtMC45ODEtMC41NjctMS41OTQtMS41MjYtMS43NTYtMi41NjUzLTAuOTItMC4yNDk4LTEuODg4LTAuMzgzNi0yLjg4Ni0wLjM4MzYtMS43NSAwLTMuNDA0IDAuNDA5My00Ljg3NCAxLjEzNjlsMS44MDEgMy4yMzRjMC45MzQtMC40MzMgMS45NzYtMC42NzcgMy4wNzMtMC42Nzd6bS03LjI5NCA3LjI5M2MwLTIuNDY3IDEuMjI2LTQuNjQ4IDMuMTAyLTUuOTY3bC0xLjkwMS0zLjE3N2MtMi4yMDEgMS40Ny0zLjg0MSAzLjcxMi00LjUzMjQgNi4zNDEgMC44MTg0IDAuNjYgMS4zNDM0IDEuNjcgMS4zNDM0IDIuODAzIDAgMS4xMzUtMC41MjUgMi4xNDUtMS4zNDM0IDIuODA0IDAuNjkxNCAyLjYyOSAyLjMzMTQgNC44NzIgNC41MzI0IDYuMzQzbDEuOTAxLTMuMTc3Yy0xLjg3Ni0xLjMyLTMuMTAyLTMuNTAxLTMuMTAyLTUuOTd6bTcuMjk0IDcuMjk1Yy0xLjA5NyAwLTIuMTM5LTAuMjQ0LTMuMDczLTAuNjc4bC0xLjgwMSAzLjIzNGMxLjQ3IDAuNzI5IDMuMTI0IDEuMTM3IDQuODc0IDEuMTM3IDAuOTk4IDAgMS45NjYtMC4xMzIgMi44ODYtMC4zODMgMC4xNjItMS4wMzkgMC43NzUtMS45OTkgMS43NTYtMi41NjQgMC45ODEtMC41NjcgMi4xMTctMC42MTggMy4wOTctMC4yNCAxLjg1MS0xLjgzNyAzLjA1Mi00LjMyNyAzLjIyNy03LjA5NmwtMy43MDEtMC4wNThjLTAuMzI3IDMuNzI2LTMuNDU0IDYuNjQ4LTcuMjY1IDYuNjQ4eiIvPgogICA8L2c+CiAgIDxnIGlkPSJsaW5rZWRpbi1jb3B5LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNCA1NikiPgogICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiIGZpbGw9IiMwMDcxQTEiLz4KICAgIDxnIGlkPSJHcm91cC0yIiBmaWxsPSIjRkZGRkZFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4IDgpIj4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBkPSJtMy4wNjk2IDAuNDA1NzhjMS41MDY4IDAgMi43MzE3IDEuMjMzMSAyLjczMTcgMi43NTA5IDAgMS41MTkzLTEuMjI0OSAyLjc1MjQtMi43MzE3IDIuNzUyNC0xLjUxMDkgMC0yLjczMzUtMS4yMzMxLTIuNzMzNS0yLjc1MjQgMC4wMDAwMS0xLjUxNzggMS4yMjI2LTIuNzUwOSAyLjczMzUtMi43NTA5di0wLjAwMDAyem0tMi4zNTc5IDIyLjg2Mmg0LjcxMzd2LTE1LjI3MWwtNC43MTM3LTAuMDAwMyAwLjAwMDAyIDE1LjI3MXoiLz4KICAgICA8cGF0aCBpZD0iRmlsbC01IiBkPSJtOC4zODIgNy45OTY3aDQuNTIxdjIuMDg3M2gwLjA2M2MwLjYyOS0xLjIwMTEgMi4xNjctMi40NjY5IDQuNDYtMi40NjY5IDQuNzczIDAgNS42NTQgMy4xNjI5IDUuNjU0IDcuMjczOXY4LjM3N2gtNC43MXYtNy40MjZjMC0xLjc3MS0wLjAzMi00LjA0OS0yLjQ0OS00LjA0OS0yLjQ1MyAwLTIuODI5IDEuOTI5LTIuODI5IDMuOTJ2Ny41NTVoLTQuNzF2LTE1LjI3MSIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJ5b3V0dWJlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAgNTYpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjRDkyNTJBIi8+CiAgICA8ZyBpZD0ieXRfaWNvbl9yZ2IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgMTEpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTQiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMyIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay00KSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWdvbiBpZD0iRmlsbC00IiBwb2ludHM9IjE3LjE4MiA5LjE4MzUgMTAuMzY4IDUuMzA3MyAxMC4zNjggMTMuMDYiIGZpbGw9IiNEOTI1MkEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iZ29vZ2xlLXBsdXMtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNERDRCMzkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyLWNvcHkiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEyIDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjMURBMUYyIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJMb2dvX194MjAxNF9fRklYRUQiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguOSAxMS40KSI+CiAgICAgPHBhdGggaWQ9IlNoYXBlIiBkPSJtNy40NCAxOS4xNWM4Ljg3IDAgMTMuNzItNy4zNSAxMy43Mi0xMy43MiAwLTAuMjEgMC0wLjQyLTAuMDEtMC42MiAwLjk0LTAuNjggMS43Ni0xLjUzIDIuNDEtMi41LTAuODYgMC4zOC0xLjc5IDAuNjQtMi43NyAwLjc2IDEtMC42IDEuNzYtMS41NCAyLjEyLTIuNjctMC45MyAwLjU1LTEuOTYgMC45NS0zLjA2IDEuMTctMC44OC0wLjk0LTIuMTMtMS41Mi0zLjUyLTEuNTItMi42NiAwLTQuODIgMi4xNi00LjgyIDQuODIgMCAwLjM4IDAuMDQgMC43NSAwLjEzIDEuMS00LjAxLTAuMi03LjU2LTIuMTItOS45NC01LjA0LTAuNDEgMC43MS0wLjY1IDEuNTQtMC42NSAyLjQyIDAgMS42NyAwLjg1IDMuMTUgMi4xNSA0LjAxLTAuNzktMC4wMi0xLjUzLTAuMjQtMi4xOC0wLjZ2MC4wNmMwIDIuMzQgMS42NiA0LjI4IDMuODcgNC43My0wLjQgMC4xMS0wLjgzIDAuMTctMS4yNyAwLjE3LTAuMzEgMC0wLjYxLTAuMDMtMC45MS0wLjA5IDAuNjEgMS45MiAyLjM5IDMuMzEgNC41IDMuMzUtMS42NSAxLjI5LTMuNzMgMi4wNi01Ljk5IDIuMDYtMC4zOSAwLTAuNzctMC4wMi0xLjE1LTAuMDcgMi4xMSAxLjM4IDQuNjUgMi4xOCA3LjM3IDIuMTgiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iaW5zdGFncmFtLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjRkIzOTU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIvPgogICAgPC9nPgogICAgPGcgaWQ9Ikdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2IDYpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTYiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtNSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay02KSIgZD0ibTE0LjIzNyAwLjAwODk4NTRjLTMuODY3IDAtNC4zNTE3IDAuMDE2Mzg5LTUuODcwMSAwLjA4NTY3My0xLjUxNTQgMC4wNjkxMTItMi41NTAzIDAuMzA5OC0zLjQ1NTggMC42NjE3Ni0wLjkzNjIgMC4zNjM3OC0xLjczMDEgMC44NTA1OC0yLjUyMTcgMS42NDItMC43OTE0IDAuNzkxNS0xLjI3ODIgMS41ODU1LTEuNjQyIDIuNTIxNy0wLjM1MTkzIDAuOTA1NS0wLjU5MjYxIDEuOTQwNC0wLjY2MTczIDMuNDU1Ny0wLjA2OTI4MSAxLjUxODUtMC4wODU2NyAyLjAwMzItMC4wODU2NyA1Ljg3MDIgMCAzLjg2NiAwLjAxNjM4OSA0LjM1MSAwLjA4NTY3MiA1Ljg2OSAwLjA2OTExOCAxLjUxNiAwLjMwOTggMi41NTEgMC42NjE3NiAzLjQ1NiAwLjM2Mzc3IDAuOTM2IDAuODUwNTcgMS43MyAxLjY0MiAyLjUyMiAwLjc5MTYgMC43OTEgMS41ODU1IDEuMjc4IDIuNTIxNyAxLjY0MiAwLjkwNTUgMC4zNTIgMS45NDA0IDAuNTkyIDMuNDU1OCAwLjY2MSAxLjUxODQgMC4wNyAyLjAwMzEgMC4wODYgNS44NzAxIDAuMDg2IDMuODY2IDAgNC4zNTEtMC4wMTYgNS44NjktMC4wODYgMS41MTYtMC4wNjkgMi41NTEtMC4zMDkgMy40NTYtMC42NjEgMC45MzYtMC4zNjQgMS43My0wLjg1MSAyLjUyMi0xLjY0MiAwLjc5MS0wLjc5MiAxLjI3OC0xLjU4NiAxLjY0Mi0yLjUyMiAwLjM1Mi0wLjkwNSAwLjU5Mi0xLjk0IDAuNjYxLTMuNDU2IDAuMDctMS41MTggMC4wODYtMi4wMDMgMC4wODYtNS44NjkgMC0zLjg2Ny0wLjAxNi00LjM1MTctMC4wODYtNS44NzAyLTAuMDY5LTEuNTE1My0wLjMwOS0yLjU1MDItMC42NjEtMy40NTU3LTAuMzY0LTAuOTM2Mi0wLjg1MS0xLjczMDItMS42NDItMi41MjE3LTAuNzkyLTAuNzkxNC0xLjU4Ni0xLjI3ODItMi41MjItMS42NDItMC45MDUtMC4zNTE5NC0xLjk0LTAuNTkyNjMtMy40NTYtMC42NjE3NC0xLjUxOC0wLjA2OTI4Ni0yLjAwMy0wLjA4NTY3NS01Ljg2OS0wLjA4NTY3NXptMCAyLjU2NTFjMy44MDEgMCA0LjI1MSAwLjAxNDYgNS43NTIgMC4wODMgMS4zODggMC4wNjMzIDIuMTQyIDAuMjk1MyAyLjY0NCAwLjQ5MDIgMC42NjQgMC4yNTgzIDEuMTM5IDAuNTY2OCAxLjYzNyAxLjA2NXMwLjgwNyAwLjk3MjQgMS4wNjUgMS42MzY5YzAuMTk1IDAuNTAxNyAwLjQyNyAxLjI1NTUgMC40OSAyLjY0MzYgMC4wNjggMS41MDEyIDAuMDgzIDEuOTUxMiAwLjA4MyA1Ljc1MzIgMCAzLjgwMS0wLjAxNSA0LjI1MS0wLjA4MyA1Ljc1Mi0wLjA2MyAxLjM4OC0wLjI5NSAyLjE0Mi0wLjQ5IDIuNjQ0LTAuMjU4IDAuNjY0LTAuNTY3IDEuMTM5LTEuMDY1IDEuNjM3cy0wLjk3MyAwLjgwNy0xLjYzNyAxLjA2NWMtMC41MDIgMC4xOTUtMS4yNTYgMC40MjctMi42NDQgMC40OS0xLjUwMSAwLjA2OC0xLjk1MSAwLjA4My01Ljc1MiAwLjA4My0zLjgwMiAwLTQuMjUyMi0wLjAxNS01Ljc1MzItMC4wODMtMS4zODgxLTAuMDYzLTIuMTQxOS0wLjI5NS0yLjY0MzUtMC40OS0wLjY2NDYtMC4yNTgtMS4xMzg4LTAuNTY3LTEuNjM3LTEuMDY1LTAuNDk4MS0wLjQ5OC0wLjgwNjctMC45NzMtMS4wNjUtMS42MzctMC4xOTQ5LTAuNTAyLTAuNDI2OC0xLjI1Ni0wLjQ5MDEtMi42NDQtMC4wNjg1LTEuNTAxLTAuMDgzMS0xLjk1MS0wLjA4MzEtNS43NTIgMC0zLjgwMiAwLjAxNDYtNC4yNTIgMC4wODMxLTUuNzUzMiAwLjA2MzMtMS4zODgxIDAuMjk1Mi0yLjE0MTkgMC40OTAxLTIuNjQzNiAwLjI1ODMtMC42NjQ1IDAuNTY2OC0xLjEzODcgMS4wNjUtMS42MzY5czAuOTcyNC0wLjgwNjcgMS42MzctMS4wNjVjMC41MDE2LTAuMTk0OSAxLjI1NTQtMC40MjY5IDIuNjQzNS0wLjQ5MDIgMS41MDEyLTAuMDY4NCAxLjk1MTItMC4wODMgNS43NTMyLTAuMDgzeiIvPgogICAgIDwvZz4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBmaWxsPSIjZmZmIiBkPSJtMTQuMjQgMTguOTkxYy0yLjYyMSAwLTQuNzQ1OS0yLjEyNS00Ljc0NTktNC43NDUgMC0yLjYyMSAyLjEyNDktNC43NDYgNC43NDU5LTQuNzQ2IDIuNjIgMCA0Ljc0NSAyLjEyNSA0Ljc0NSA0Ljc0NiAwIDIuNjItMi4xMjUgNC43NDUtNC43NDUgNC43NDV6bTAtMTIuMDU2Yy00LjAzOCAwLTcuMzExMSAzLjI3MzEtNy4zMTExIDcuMzExMSAwIDQuMDM3IDMuMjczMSA3LjMxIDcuMzExMSA3LjMxIDQuMDM3IDAgNy4zMS0zLjI3MyA3LjMxLTcuMzEgMC00LjAzOC0zLjI3My03LjMxMTEtNy4zMS03LjMxMTF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZmlsbD0iI2ZmZiIgZD0ibTIzLjU0MSA2LjY0NjFjMCAwLjk0MzUtMC43NjUgMS43MDgzLTEuNzA5IDEuNzA4My0wLjk0MyAwLTEuNzA4LTAuNzY0OC0xLjcwOC0xLjcwODMgMC0wLjk0MzYgMC43NjUtMS43MDg1IDEuNzA4LTEuNzA4NSAwLjk0NCAwIDEuNzA5IDAuNzY0OSAxLjcwOSAxLjcwODUiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQiIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iIzY2NiIgZD0ibTM1NiAzMi43MzVjLTcuMDQgMC0xMi43NC01LjctMTIuNzQtMTIuNzM2IDAtNy4wMzQgNS43LTEyLjczNCAxMi43NC0xMi43MzQgNy4wNC0wLjAwMDUgMTIuNzQgNS43IDEyLjc0IDEyLjczNCAwIDcuMDM2LTUuNyAxMi43MzYtMTIuNzQgMTIuNzM2em0yMC0xMi43MzVjMCAxMS4wNDUtOC45NSAyMC0yMCAyMHMtMjAtOC45NTUtMjAtMjBjMC0xMS4wNDYgOC45NS0yMCAyMC0yMHMyMCA4Ljk1MzYgMjAgMjB6bS0yMC0xNS4xMzRjLTguMzYgMC0xNS4xNCA2Ljc3NjUtMTUuMTQgMTUuMTM0IDAgOC4zNiA2Ljc4IDE1LjEzNSAxNS4xNCAxNS4xMzVzMTUuMTQtNi43NzUgMTUuMTQtMTUuMTM1YzAtOC4zNTgtNi43OC0xNS4xMzQtMTUuMTQtMTUuMTM0eiIvPgogICA8ZyBpZD0iY29mX29yYW5nZV9oZXgtY29weSIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTIpIj4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iIzY2NiIgZD0ibTM5LjkwNiAyMC4wMTNjMCAxMC45ODctOC45MDUgMTkuODkzLTE5Ljg5MiAxOS44OTMtMTAuOTg2IDAtMTkuODkyLTguOTA2LTE5Ljg5Mi0xOS44OTMtMC4wMDAzMi0xMC45ODYgOC45MDU5LTE5Ljg5MSAxOS44OTItMTkuODkxIDEwLjk4Ny0wLjAwMDMyIDE5Ljg5MiA4LjkwNTQgMTkuODkyIDE5Ljg5MXoiLz4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iI2ZmZiIgZD0ibTkuNjkwMiAyMC4wMTNjMCAxLjQxMy0xLjE0NTEgMi41NTgtMi41NTg2IDIuNTU4LTEuNDExNyAwLTIuNTU2OS0xLjE0NS0yLjU1NjktMi41NTggMC0xLjQxMiAxLjE0NTItMi41NTcgMi41NTY5LTIuNTU3IDEuNDEzNSAwIDIuNTU4NiAxLjE0NSAyLjU1ODYgMi41NTd6bTE0LjU1MSAxMi40MzZjMC43MDYgMS4yMjMgMi4yNyAxLjY0MiAzLjQ5MyAwLjkzNnMxLjY0Mi0yLjI3IDAuOTM2LTMuNDk0Yy0wLjcwNi0xLjIyMy0yLjI3LTEuNjQxLTMuNDkzLTAuOTM1LTEuMjIzIDAuNzA3LTEuNjQyIDIuMjctMC45MzYgMy40OTN6bTQuNDI5LTIyLjMxM2MwLjcwNi0xLjIyMzQgMC4yODgtMi43ODc0LTAuOTM2LTMuNDkyOS0xLjIyMi0wLjcwNjMtMi43ODctMC4yODcyLTMuNDkzIDAuOTM1Ny0wLjcwNiAxLjIyMzItMC4yODcgMi43ODcyIDAuOTM2IDMuNDkzMnMyLjc4OCAwLjI4NyAzLjQ5My0wLjkzNnptLTguNjU2IDIuNTg0YzMuODExIDAgNi45MzggMi45MjIgNy4yNjUgNi42NDhsMy43MDEtMC4wNTljLTAuMTc1LTIuNzY4LTEuMzc2LTUuMjU4LTMuMjI3LTcuMDk0LTAuOTggMC4zNzgtMi4xMTYgMC4zMjYtMy4wOTctMC4yNC0wLjk4MS0wLjU2Ny0xLjU5NC0xLjUyNi0xLjc1Ni0yLjU2NTMtMC45Mi0wLjI0OTgtMS44ODgtMC4zODM2LTIuODg2LTAuMzgzNi0xLjc1IDAtMy40MDQgMC40MDkzLTQuODc0IDEuMTM2OWwxLjgwMSAzLjIzNGMwLjkzNC0wLjQzMyAxLjk3Ni0wLjY3NyAzLjA3My0wLjY3N3ptLTcuMjk0IDcuMjkzYzAtMi40NjcgMS4yMjYtNC42NDggMy4xMDItNS45NjdsLTEuOTAxLTMuMTc3Yy0yLjIwMSAxLjQ3LTMuODQxIDMuNzEyLTQuNTMyNCA2LjM0MSAwLjgxODQgMC42NiAxLjM0MzQgMS42NyAxLjM0MzQgMi44MDMgMCAxLjEzNS0wLjUyNSAyLjE0NS0xLjM0MzQgMi44MDQgMC42OTE0IDIuNjI5IDIuMzMxNCA0Ljg3MiA0LjUzMjQgNi4zNDNsMS45MDEtMy4xNzdjLTEuODc2LTEuMzItMy4xMDItMy41MDEtMy4xMDItNS45N3ptNy4yOTQgNy4yOTVjLTEuMDk3IDAtMi4xMzktMC4yNDQtMy4wNzMtMC42NzhsLTEuODAxIDMuMjM0YzEuNDcgMC43MjkgMy4xMjQgMS4xMzcgNC44NzQgMS4xMzcgMC45OTggMCAxLjk2Ni0wLjEzMiAyLjg4Ni0wLjM4MyAwLjE2Mi0xLjAzOSAwLjc3NS0xLjk5OSAxLjc1Ni0yLjU2NCAwLjk4MS0wLjU2NyAyLjExNy0wLjYxOCAzLjA5Ny0wLjI0IDEuODUxLTEuODM3IDMuMDUyLTQuMzI3IDMuMjI3LTcuMDk2bC0zLjcwMS0wLjA1OGMtMC4zMjcgMy43MjYtMy40NTQgNi42NDgtNy4yNjUgNi42NDh6Ii8+CiAgIDwvZz4KICAgPGcgaWQ9Imdvb2dsZS1wbHVzIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM2NjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMikiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiI+CiAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0iTG9nb19feDIwMTRfX0ZJWEVEIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjkgMTEuNCkiPgogICAgIDxwYXRoIGlkPSJTaGFwZSIgZD0ibTcuNDQgMTkuMTVjOC44NyAwIDEzLjcyLTcuMzUgMTMuNzItMTMuNzIgMC0wLjIxIDAtMC40Mi0wLjAxLTAuNjIgMC45NC0wLjY4IDEuNzYtMS41MyAyLjQxLTIuNS0wLjg2IDAuMzgtMS43OSAwLjY0LTIuNzcgMC43NiAxLTAuNiAxLjc2LTEuNTQgMi4xMi0yLjY3LTAuOTMgMC41NS0xLjk2IDAuOTUtMy4wNiAxLjE3LTAuODgtMC45NC0yLjEzLTEuNTItMy41Mi0xLjUyLTIuNjYgMC00LjgyIDIuMTYtNC44MiA0LjgyIDAgMC4zOCAwLjA0IDAuNzUgMC4xMyAxLjEtNC4wMS0wLjItNy41Ni0yLjEyLTkuOTQtNS4wNC0wLjQxIDAuNzEtMC42NSAxLjU0LTAuNjUgMi40MiAwIDEuNjcgMC44NSAzLjE1IDIuMTUgNC4wMS0wLjc5LTAuMDItMS41My0wLjI0LTIuMTgtMC42djAuMDZjMCAyLjM0IDEuNjYgNC4yOCAzLjg3IDQuNzMtMC40IDAuMTEtMC44MyAwLjE3LTEuMjcgMC4xNy0wLjMxIDAtMC42MS0wLjAzLTAuOTEtMC4wOSAwLjYxIDEuOTIgMi4zOSAzLjMxIDQuNSAzLjM1LTEuNjUgMS4yOS0zLjczIDIuMDYtNS45OSAyLjA2LTAuMzkgMC0wLjc3LTAuMDItMS4xNS0wLjA3IDIuMTEgMS4zOCA0LjY1IDIuMTggNy4zNyAyLjE4Ii8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImZhY2Vib2siPgogICAgPGcgaWQ9InBhdGg0MjQxIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxtYXNrIGlkPSJtYXNrLTgiIGZpbGw9IndoaXRlIj4KICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC03Ii8+CiAgICAgPC9tYXNrPgogICAgIDx1c2UgaWQ9Ik1hc2siIHhsaW5rOmhyZWY9IiNwYXRoLTciIGZpbGw9IiM2NjY2NjYiLz4KICAgICA8cGF0aCBtYXNrPSJ1cmwoI21hc2stOCkiIGQ9Im0zMC4wMzcgMTAuMDAxYy0zLjkyIDAtNi42MDMgMi40NDktNi42MDMgNi45NDV2My41MjZoLTQuNDM0djUuMjU1aDQuNDM0djE0LjI3M2MxLjgyLTAuMjQ2IDMuNi0wLjcyOCA1LjI5OS0xLjQzOHYtMTIuODM1aDQuNDI0bDAuNjYtNS4yNTVoLTUuMDg0di0zLjAwMmMwLTEuNTIyIDAuNDc5LTMuMDg1IDIuNTUtMi41NjNoMi43MTd2LTQuN2MtMC40NjktMC4wNjQtMi4wODUtMC4yMDctMy45NjMtMC4yMDd2MC4wMDF6IiBmaWxsPSIjZmZmIi8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImxpbmtlZGluIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjQpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjNjY2Ii8+CiAgICA8ZyBpZD0iR3JvdXAtMiIgZmlsbD0iI0ZGRkZGRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSI+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZD0ibTMuMDY5NiAwLjQwNTc4YzEuNTA2OCAwIDIuNzMxNyAxLjIzMzEgMi43MzE3IDIuNzUwOSAwIDEuNTE5My0xLjIyNDkgMi43NTI0LTIuNzMxNyAyLjc1MjQtMS41MTA5IDAtMi43MzM1LTEuMjMzMS0yLjczMzUtMi43NTI0IDAuMDAwMDEtMS41MTc4IDEuMjIyNi0yLjc1MDkgMi43MzM1LTIuNzUwOXYtMC4wMDAwMnptLTIuMzU3OSAyMi44NjJoNC43MTM3di0xNS4yNzFsLTQuNzEzNy0wLjAwMDMgMC4wMDAwMiAxNS4yNzF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZD0ibTguMzgyIDcuOTk2N2g0LjUyMXYyLjA4NzNoMC4wNjNjMC42MjktMS4yMDExIDIuMTY3LTIuNDY2OSA0LjQ2LTIuNDY2OSA0Ljc3MyAwIDUuNjU0IDMuMTYyOSA1LjY1NCA3LjI3Mzl2OC4zNzdoLTQuNzF2LTcuNDI2YzAtMS43NzEtMC4wMzItNC4wNDktMi40NDktNC4wNDktMi40NTMgMC0yLjgyOSAxLjkyOS0yLjgyOSAzLjkydjcuNTU1aC00Ljcxdi0xNS4yNzEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0ieW91dHViZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwKSI+CiAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIgZmlsbD0iIzY2NiIvPgogICAgPGcgaWQ9Inl0X2ljb25fcmdiIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3IDExKSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMCIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC05Ii8+CiAgICAgIDwvbWFzaz4KICAgICAgPHBhdGggaWQ9IkZpbGwtMSIgZmlsbD0iI2ZmZiIgbWFzaz0idXJsKCNtYXNrLTEwKSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWxpbmUgaWQ9IkZpbGwtNCIgcG9pbnRzPSIxMC4zNjggMTMuMDYgMTcuMTgyIDkuMTgzNSAxMC4zNjggNS4zMDczIDEwLjM2OCAxMy4wNiIgZmlsbD0iIzY2NiIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJpbnN0YWdyYW0iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OCkiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMiIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xMSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay0xMikiIGQ9Im0xNC4yMzcgMC4wMDg5ODU0Yy0zLjg2NyAwLTQuMzUxNyAwLjAxNjM4OS01Ljg3MDEgMC4wODU2NzMtMS41MTU0IDAuMDY5MTEyLTIuNTUwMyAwLjMwOTgtMy40NTU4IDAuNjYxNzYtMC45MzYyIDAuMzYzNzgtMS43MzAxIDAuODUwNTgtMi41MjE3IDEuNjQyLTAuNzkxNCAwLjc5MTUtMS4yNzgyIDEuNTg1NS0xLjY0MiAyLjUyMTctMC4zNTE5MyAwLjkwNTUtMC41OTI2MSAxLjk0MDQtMC42NjE3MyAzLjQ1NTctMC4wNjkyODEgMS41MTg1LTAuMDg1NjcgMi4wMDMyLTAuMDg1NjcgNS44NzAyIDAgMy44NjYgMC4wMTYzODkgNC4zNTEgMC4wODU2NzIgNS44NjkgMC4wNjkxMTggMS41MTYgMC4zMDk4IDIuNTUxIDAuNjYxNzYgMy40NTYgMC4zNjM3NyAwLjkzNiAwLjg1MDU3IDEuNzMgMS42NDIgMi41MjIgMC43OTE2IDAuNzkxIDEuNTg1NSAxLjI3OCAyLjUyMTcgMS42NDIgMC45MDU1IDAuMzUyIDEuOTQwNCAwLjU5MiAzLjQ1NTggMC42NjEgMS41MTg0IDAuMDcgMi4wMDMxIDAuMDg2IDUuODcwMSAwLjA4NiAzLjg2NiAwIDQuMzUxLTAuMDE2IDUuODY5LTAuMDg2IDEuNTE2LTAuMDY5IDIuNTUxLTAuMzA5IDMuNDU2LTAuNjYxIDAuOTM2LTAuMzY0IDEuNzMtMC44NTEgMi41MjItMS42NDIgMC43OTEtMC43OTIgMS4yNzgtMS41ODYgMS42NDItMi41MjIgMC4zNTItMC45MDUgMC41OTItMS45NCAwLjY2MS0zLjQ1NiAwLjA3LTEuNTE4IDAuMDg2LTIuMDAzIDAuMDg2LTUuODY5IDAtMy44NjctMC4wMTYtNC4zNTE3LTAuMDg2LTUuODcwMi0wLjA2OS0xLjUxNTMtMC4zMDktMi41NTAyLTAuNjYxLTMuNDU1Ny0wLjM2NC0wLjkzNjItMC44NTEtMS43MzAyLTEuNjQyLTIuNTIxNy0wLjc5Mi0wLjc5MTQtMS41ODYtMS4yNzgyLTIuNTIyLTEuNjQyLTAuOTA1LTAuMzUxOTQtMS45NC0wLjU5MjYzLTMuNDU2LTAuNjYxNzQtMS41MTgtMC4wNjkyODYtMi4wMDMtMC4wODU2NzUtNS44NjktMC4wODU2NzV6bTAgMi41NjUxYzMuODAxIDAgNC4yNTEgMC4wMTQ2IDUuNzUyIDAuMDgzIDEuMzg4IDAuMDYzMyAyLjE0MiAwLjI5NTMgMi42NDQgMC40OTAyIDAuNjY0IDAuMjU4MyAxLjEzOSAwLjU2NjggMS42MzcgMS4wNjVzMC44MDcgMC45NzI0IDEuMDY1IDEuNjM2OWMwLjE5NSAwLjUwMTcgMC40MjcgMS4yNTU1IDAuNDkgMi42NDM2IDAuMDY4IDEuNTAxMiAwLjA4MyAxLjk1MTIgMC4wODMgNS43NTMyIDAgMy44MDEtMC4wMTUgNC4yNTEtMC4wODMgNS43NTItMC4wNjMgMS4zODgtMC4yOTUgMi4xNDItMC40OSAyLjY0NC0wLjI1OCAwLjY2NC0wLjU2NyAxLjEzOS0xLjA2NSAxLjYzN3MtMC45NzMgMC44MDctMS42MzcgMS4wNjVjLTAuNTAyIDAuMTk1LTEuMjU2IDAuNDI3LTIuNjQ0IDAuNDktMS41MDEgMC4wNjgtMS45NTEgMC4wODMtNS43NTIgMC4wODMtMy44MDIgMC00LjI1MjItMC4wMTUtNS43NTMyLTAuMDgzLTEuMzg4MS0wLjA2My0yLjE0MTktMC4yOTUtMi42NDM1LTAuNDktMC42NjQ2LTAuMjU4LTEuMTM4OC0wLjU2Ny0xLjYzNy0xLjA2NS0wLjQ5ODEtMC40OTgtMC44MDY3LTAuOTczLTEuMDY1LTEuNjM3LTAuMTk0OS0wLjUwMi0wLjQyNjgtMS4yNTYtMC40OTAxLTIuNjQ0LTAuMDY4NS0xLjUwMS0wLjA4MzEtMS45NTEtMC4wODMxLTUuNzUyIDAtMy44MDIgMC4wMTQ2LTQuMjUyIDAuMDgzMS01Ljc1MzIgMC4wNjMzLTEuMzg4MSAwLjI5NTItMi4xNDE5IDAuNDkwMS0yLjY0MzYgMC4yNTgzLTAuNjY0NSAwLjU2NjgtMS4xMzg3IDEuMDY1LTEuNjM2OXMwLjk3MjQtMC44MDY3IDEuNjM3LTEuMDY1YzAuNTAxNi0wLjE5NDkgMS4yNTU0LTAuNDI2OSAyLjY0MzUtMC40OTAyIDEuNTAxMi0wLjA2ODQgMS45NTEyLTAuMDgzIDUuNzUzMi0wLjA4M3oiLz4KICAgICA8L2c+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZmlsbD0iI2ZmZiIgZD0ibTE0LjI0IDE4Ljk5MWMtMi42MjEgMC00Ljc0NTktMi4xMjUtNC43NDU5LTQuNzQ1IDAtMi42MjEgMi4xMjQ5LTQuNzQ2IDQuNzQ1OS00Ljc0NiAyLjYyIDAgNC43NDUgMi4xMjUgNC43NDUgNC43NDYgMCAyLjYyLTIuMTI1IDQuNzQ1LTQuNzQ1IDQuNzQ1em0wLTEyLjA1NmMtNC4wMzggMC03LjMxMTEgMy4yNzMxLTcuMzExMSA3LjMxMTEgMCA0LjAzNyAzLjI3MzEgNy4zMSA3LjMxMTEgNy4zMSA0LjAzNyAwIDcuMzEtMy4yNzMgNy4zMS03LjMxIDAtNC4wMzgtMy4yNzMtNy4zMTExLTcuMzEtNy4zMTExeiIvPgogICAgIDxwYXRoIGlkPSJGaWxsLTUiIGZpbGw9IiNmZmYiIGQ9Im0yMy41NDEgNi42NDYxYzAgMC45NDM1LTAuNzY1IDEuNzA4My0xLjcwOSAxLjcwODMtMC45NDMgMC0xLjcwOC0wLjc2NDgtMS43MDgtMS43MDgzIDAtMC45NDM2IDAuNzY1LTEuNzA4NSAxLjcwOC0xLjcwODUgMC45NDQgMCAxLjcwOSAwLjc2NDkgMS43MDkgMS43MDg1Ii8+CiAgICA8L2c+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=");background-size:430px 96px;height:42px;width:42px;background-position:-334px 0}.p-icon--canonical:hover{background-position-y:-56px}.p-icon--ubuntu{background-image:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9Ijk2cHgiIHdpZHRoPSI0MzJweCIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iMCAwIDQzMiA5NiI+PCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ni4yICg0NDQ5NikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiA8dGl0bGU+dmFuaWxsYS1zb2NpYWwtc3ByaXRlPC90aXRsZT4KIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogPGRlZnM+CiAgPGNpcmNsZSBpZD0icGF0aC0xIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICA8cG9seWdvbiBpZD0icGF0aC0zIiBwb2ludHM9IjAuMDA4ODg3MSAxOC4zNjcgMC4wMDg4ODcxIDAuMDA1OTI0OCAyNi4wNjkgMC4wMDU5MjQ4IDI2LjA2OSAxOC4zNjciLz4KICA8cG9seWdvbiBpZD0icGF0aC01IiBwb2ludHM9IjAgMjguNDc5IDI4LjQ3MyAyOC40NzkgMjguNDczIDAuMDA4OTg1NCAwIDAuMDA4OTg1NCIvPgogIDxjaXJjbGUgaWQ9InBhdGgtNyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgPHBvbHlnb24gaWQ9InBhdGgtOSIgcG9pbnRzPSIwLjAwODg4NzEgMTguMzY3IDAuMDA4ODg3MSAwLjAwNTkyNDggMjYuMDY5IDAuMDA1OTI0OCAyNi4wNjkgMTguMzY3Ii8+CiAgPHBvbHlnb24gaWQ9InBhdGgtMTEiIHBvaW50cz0iMCAyOC40NzkgMjguNDczIDI4LjQ3OSAyOC40NzMgMC4wMDg5ODU0IDAgMC4wMDg5ODU0Ii8+CiA8L2RlZnM+CiA8ZyBpZD0iUGFnZS0xIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9Im5vbmUiPgogIDxnIGlkPSJ2YW5pbGxhLXNvY2lhbC1zcHJpdGUiPgogICA8ZyBpZD0iZmFjZWJvay1jb3B5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDU2KSI+CiAgICA8ZyBpZD0icGF0aDQyNDEiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiLz4KICAgICA8L21hc2s+CiAgICAgPHVzZSBpZD0iTWFzayIgeGxpbms6aHJlZj0iI3BhdGgtMSIgZmlsbD0iIzNCNTk5OCIvPgogICAgIDxwYXRoIG1hc2s9InVybCgjbWFzay0yKSIgZD0ibTMwLjAzNyAxMC4wMDFjLTMuOTIgMC02LjYwMyAyLjQ0OS02LjYwMyA2Ljk0NXYzLjUyNmgtNC40MzR2NS4yNTVoNC40MzR2MTQuMjczYzEuODItMC4yNDYgMy42LTAuNzI4IDUuMjk5LTEuNDM4di0xMi44MzVoNC40MjRsMC42Ni01LjI1NWgtNS4wODR2LTMuMDAyYzAtMS41MjIgMC40NzktMy4wODUgMi41NS0yLjU2M2gyLjcxN3YtNC43Yy0wLjQ2OS0wLjA2NC0yLjA4NS0wLjIwNy0zLjk2My0wLjIwN3YwLjAwMXoiIGZpbGw9IiNmZmYiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM3NzI5NTMiIGQ9Im0zNTYgODguNzM1Yy03LjA0IDAtMTIuNzQtNS43LTEyLjc0LTEyLjczNiAwLTcuMDM0IDUuNy0xMi43MzQgMTIuNzQtMTIuNzM0czEyLjc0IDUuNyAxMi43NCAxMi43MzRjMCA3LjAzNi01LjcgMTIuNzM2LTEyLjc0IDEyLjczNnptMjAtMTIuNzM1YzAgMTEuMDQ1LTguOTUgMjAtMjAgMjBzLTIwLTguOTU1LTIwLTIwYzAtMTEuMDQ2IDguOTUtMjAgMjAtMjBzMjAgOC45NTQgMjAgMjB6bS0yMC0xNS4xMzVjLTguMzYgMC0xNS4xNCA2Ljc3Ny0xNS4xNCAxNS4xMzUgMCA4LjM2IDYuNzggMTUuMTM1IDE1LjE0IDE1LjEzNXMxNS4xNC02Ljc3NSAxNS4xNC0xNS4xMzVjMC04LjM1OC02Ljc4LTE1LjEzNS0xNS4xNC0xNS4xMzV6Ii8+CiAgIDxnIGlkPSJjb2Zfb3JhbmdlX2hleC1jb3B5LTIiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzkyIDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNFOTU0MjAiIGQ9Im0zOS45MDYgMjAuMDEzYzAgMTAuOTg3LTguOTA1IDE5Ljg5My0xOS44OTIgMTkuODkzLTEwLjk4NiAwLTE5Ljg5Mi04LjkwNi0xOS44OTItMTkuODkzLTAuMDAwMzItMTAuOTg2IDguOTA1OS0xOS44OTEgMTkuODkyLTE5Ljg5MSAxMC45ODctMC4wMDAzMiAxOS44OTIgOC45MDU0IDE5Ljg5MiAxOS44OTF6Ii8+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGZpbGw9IiNmZmYiIGQ9Im05LjY5MDIgMjAuMDEzYzAgMS40MTMtMS4xNDUxIDIuNTU4LTIuNTU4NiAyLjU1OC0xLjQxMTcgMC0yLjU1NjktMS4xNDUtMi41NTY5LTIuNTU4IDAtMS40MTIgMS4xNDUyLTIuNTU3IDIuNTU2OS0yLjU1NyAxLjQxMzUgMCAyLjU1ODYgMS4xNDUgMi41NTg2IDIuNTU3em0xNC41NTEgMTIuNDM2YzAuNzA2IDEuMjIzIDIuMjcgMS42NDIgMy40OTMgMC45MzZzMS42NDItMi4yNyAwLjkzNi0zLjQ5NGMtMC43MDYtMS4yMjMtMi4yNy0xLjY0MS0zLjQ5My0wLjkzNS0xLjIyMyAwLjcwNy0xLjY0MiAyLjI3LTAuOTM2IDMuNDkzem00LjQyOS0yMi4zMTNjMC43MDYtMS4yMjM0IDAuMjg4LTIuNzg3NC0wLjkzNi0zLjQ5MjktMS4yMjItMC43MDYzLTIuNzg3LTAuMjg3Mi0zLjQ5MyAwLjkzNTctMC43MDYgMS4yMjMyLTAuMjg3IDIuNzg3MiAwLjkzNiAzLjQ5MzJzMi43ODggMC4yODcgMy40OTMtMC45MzZ6bS04LjY1NiAyLjU4NGMzLjgxMSAwIDYuOTM4IDIuOTIyIDcuMjY1IDYuNjQ4bDMuNzAxLTAuMDU5Yy0wLjE3NS0yLjc2OC0xLjM3Ni01LjI1OC0zLjIyNy03LjA5NC0wLjk4IDAuMzc4LTIuMTE2IDAuMzI2LTMuMDk3LTAuMjQtMC45ODEtMC41NjctMS41OTQtMS41MjYtMS43NTYtMi41NjUzLTAuOTItMC4yNDk4LTEuODg4LTAuMzgzNi0yLjg4Ni0wLjM4MzYtMS43NSAwLTMuNDA0IDAuNDA5My00Ljg3NCAxLjEzNjlsMS44MDEgMy4yMzRjMC45MzQtMC40MzMgMS45NzYtMC42NzcgMy4wNzMtMC42Nzd6bS03LjI5NCA3LjI5M2MwLTIuNDY3IDEuMjI2LTQuNjQ4IDMuMTAyLTUuOTY3bC0xLjkwMS0zLjE3N2MtMi4yMDEgMS40Ny0zLjg0MSAzLjcxMi00LjUzMjQgNi4zNDEgMC44MTg0IDAuNjYgMS4zNDM0IDEuNjcgMS4zNDM0IDIuODAzIDAgMS4xMzUtMC41MjUgMi4xNDUtMS4zNDM0IDIuODA0IDAuNjkxNCAyLjYyOSAyLjMzMTQgNC44NzIgNC41MzI0IDYuMzQzbDEuOTAxLTMuMTc3Yy0xLjg3Ni0xLjMyLTMuMTAyLTMuNTAxLTMuMTAyLTUuOTd6bTcuMjk0IDcuMjk1Yy0xLjA5NyAwLTIuMTM5LTAuMjQ0LTMuMDczLTAuNjc4bC0xLjgwMSAzLjIzNGMxLjQ3IDAuNzI5IDMuMTI0IDEuMTM3IDQuODc0IDEuMTM3IDAuOTk4IDAgMS45NjYtMC4xMzIgMi44ODYtMC4zODMgMC4xNjItMS4wMzkgMC43NzUtMS45OTkgMS43NTYtMi41NjQgMC45ODEtMC41NjcgMi4xMTctMC42MTggMy4wOTctMC4yNCAxLjg1MS0xLjgzNyAzLjA1Mi00LjMyNyAzLjIyNy03LjA5NmwtMy43MDEtMC4wNThjLTAuMzI3IDMuNzI2LTMuNDU0IDYuNjQ4LTcuMjY1IDYuNjQ4eiIvPgogICA8L2c+CiAgIDxnIGlkPSJsaW5rZWRpbi1jb3B5LTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNCA1NikiPgogICAgPGNpcmNsZSBpZD0iT3ZhbCIgZmlsbC1ydWxlPSJub256ZXJvIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiIGZpbGw9IiMwMDcxQTEiLz4KICAgIDxnIGlkPSJHcm91cC0yIiBmaWxsPSIjRkZGRkZFIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4IDgpIj4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBkPSJtMy4wNjk2IDAuNDA1NzhjMS41MDY4IDAgMi43MzE3IDEuMjMzMSAyLjczMTcgMi43NTA5IDAgMS41MTkzLTEuMjI0OSAyLjc1MjQtMi43MzE3IDIuNzUyNC0xLjUxMDkgMC0yLjczMzUtMS4yMzMxLTIuNzMzNS0yLjc1MjQgMC4wMDAwMS0xLjUxNzggMS4yMjI2LTIuNzUwOSAyLjczMzUtMi43NTA5di0wLjAwMDAyem0tMi4zNTc5IDIyLjg2Mmg0LjcxMzd2LTE1LjI3MWwtNC43MTM3LTAuMDAwMyAwLjAwMDAyIDE1LjI3MXoiLz4KICAgICA8cGF0aCBpZD0iRmlsbC01IiBkPSJtOC4zODIgNy45OTY3aDQuNTIxdjIuMDg3M2gwLjA2M2MwLjYyOS0xLjIwMTEgMi4xNjctMi40NjY5IDQuNDYtMi40NjY5IDQuNzczIDAgNS42NTQgMy4xNjI5IDUuNjU0IDcuMjczOXY4LjM3N2gtNC43MXYtNy40MjZjMC0xLjc3MS0wLjAzMi00LjA0OS0yLjQ0OS00LjA0OS0yLjQ1MyAwLTIuODI5IDEuOTI5LTIuODI5IDMuOTJ2Ny41NTVoLTQuNzF2LTE1LjI3MSIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJ5b3V0dWJlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODAgNTYpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjRDkyNTJBIi8+CiAgICA8ZyBpZD0ieXRfaWNvbl9yZ2IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgMTEpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTQiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMyIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay00KSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWdvbiBpZD0iRmlsbC00IiBwb2ludHM9IjE3LjE4MiA5LjE4MzUgMTAuMzY4IDUuMzA3MyAxMC4zNjggMTMuMDYiIGZpbGw9IiNEOTI1MkEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iZ29vZ2xlLXBsdXMtY29weS0yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiNERDRCMzkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyLWNvcHkiIGZpbGwtcnVsZT0ibm9uemVybyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTEyIDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjMURBMUYyIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJMb2dvX194MjAxNF9fRklYRUQiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguOSAxMS40KSI+CiAgICAgPHBhdGggaWQ9IlNoYXBlIiBkPSJtNy40NCAxOS4xNWM4Ljg3IDAgMTMuNzItNy4zNSAxMy43Mi0xMy43MiAwLTAuMjEgMC0wLjQyLTAuMDEtMC42MiAwLjk0LTAuNjggMS43Ni0xLjUzIDIuNDEtMi41LTAuODYgMC4zOC0xLjc5IDAuNjQtMi43NyAwLjc2IDEtMC42IDEuNzYtMS41NCAyLjEyLTIuNjctMC45MyAwLjU1LTEuOTYgMC45NS0zLjA2IDEuMTctMC44OC0wLjk0LTIuMTMtMS41Mi0zLjUyLTEuNTItMi42NiAwLTQuODIgMi4xNi00LjgyIDQuODIgMCAwLjM4IDAuMDQgMC43NSAwLjEzIDEuMS00LjAxLTAuMi03LjU2LTIuMTItOS45NC01LjA0LTAuNDEgMC43MS0wLjY1IDEuNTQtMC42NSAyLjQyIDAgMS42NyAwLjg1IDMuMTUgMi4xNSA0LjAxLTAuNzktMC4wMi0xLjUzLTAuMjQtMi4xOC0wLjZ2MC4wNmMwIDIuMzQgMS42NiA0LjI4IDMuODcgNC43My0wLjQgMC4xMS0wLjgzIDAuMTctMS4yNyAwLjE3LTAuMzEgMC0wLjYxLTAuMDMtMC45MS0wLjA5IDAuNjEgMS45MiAyLjM5IDMuMzEgNC41IDMuMzUtMS42NSAxLjI5LTMuNzMgMi4wNi01Ljk5IDIuMDYtMC4zOSAwLTAuNzctMC4wMi0xLjE1LTAuMDcgMi4xMSAxLjM4IDQuNjUgMi4xOCA3LjM3IDIuMTgiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0iaW5zdGFncmFtLWNvcHktMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDU2KSI+CiAgICA8ZyBpZD0iRGFya19CbHVlIiBmaWxsPSIjRkIzOTU4IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIvPgogICAgPC9nPgogICAgPGcgaWQ9Ikdyb3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2IDYpIj4KICAgICA8ZyBpZD0iR3JvdXAtMyI+CiAgICAgIDxtYXNrIGlkPSJtYXNrLTYiIGZpbGw9IndoaXRlIj4KICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtNSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay02KSIgZD0ibTE0LjIzNyAwLjAwODk4NTRjLTMuODY3IDAtNC4zNTE3IDAuMDE2Mzg5LTUuODcwMSAwLjA4NTY3My0xLjUxNTQgMC4wNjkxMTItMi41NTAzIDAuMzA5OC0zLjQ1NTggMC42NjE3Ni0wLjkzNjIgMC4zNjM3OC0xLjczMDEgMC44NTA1OC0yLjUyMTcgMS42NDItMC43OTE0IDAuNzkxNS0xLjI3ODIgMS41ODU1LTEuNjQyIDIuNTIxNy0wLjM1MTkzIDAuOTA1NS0wLjU5MjYxIDEuOTQwNC0wLjY2MTczIDMuNDU1Ny0wLjA2OTI4MSAxLjUxODUtMC4wODU2NyAyLjAwMzItMC4wODU2NyA1Ljg3MDIgMCAzLjg2NiAwLjAxNjM4OSA0LjM1MSAwLjA4NTY3MiA1Ljg2OSAwLjA2OTExOCAxLjUxNiAwLjMwOTggMi41NTEgMC42NjE3NiAzLjQ1NiAwLjM2Mzc3IDAuOTM2IDAuODUwNTcgMS43MyAxLjY0MiAyLjUyMiAwLjc5MTYgMC43OTEgMS41ODU1IDEuMjc4IDIuNTIxNyAxLjY0MiAwLjkwNTUgMC4zNTIgMS45NDA0IDAuNTkyIDMuNDU1OCAwLjY2MSAxLjUxODQgMC4wNyAyLjAwMzEgMC4wODYgNS44NzAxIDAuMDg2IDMuODY2IDAgNC4zNTEtMC4wMTYgNS44NjktMC4wODYgMS41MTYtMC4wNjkgMi41NTEtMC4zMDkgMy40NTYtMC42NjEgMC45MzYtMC4zNjQgMS43My0wLjg1MSAyLjUyMi0xLjY0MiAwLjc5MS0wLjc5MiAxLjI3OC0xLjU4NiAxLjY0Mi0yLjUyMiAwLjM1Mi0wLjkwNSAwLjU5Mi0xLjk0IDAuNjYxLTMuNDU2IDAuMDctMS41MTggMC4wODYtMi4wMDMgMC4wODYtNS44NjkgMC0zLjg2Ny0wLjAxNi00LjM1MTctMC4wODYtNS44NzAyLTAuMDY5LTEuNTE1My0wLjMwOS0yLjU1MDItMC42NjEtMy40NTU3LTAuMzY0LTAuOTM2Mi0wLjg1MS0xLjczMDItMS42NDItMi41MjE3LTAuNzkyLTAuNzkxNC0xLjU4Ni0xLjI3ODItMi41MjItMS42NDItMC45MDUtMC4zNTE5NC0xLjk0LTAuNTkyNjMtMy40NTYtMC42NjE3NC0xLjUxOC0wLjA2OTI4Ni0yLjAwMy0wLjA4NTY3NS01Ljg2OS0wLjA4NTY3NXptMCAyLjU2NTFjMy44MDEgMCA0LjI1MSAwLjAxNDYgNS43NTIgMC4wODMgMS4zODggMC4wNjMzIDIuMTQyIDAuMjk1MyAyLjY0NCAwLjQ5MDIgMC42NjQgMC4yNTgzIDEuMTM5IDAuNTY2OCAxLjYzNyAxLjA2NXMwLjgwNyAwLjk3MjQgMS4wNjUgMS42MzY5YzAuMTk1IDAuNTAxNyAwLjQyNyAxLjI1NTUgMC40OSAyLjY0MzYgMC4wNjggMS41MDEyIDAuMDgzIDEuOTUxMiAwLjA4MyA1Ljc1MzIgMCAzLjgwMS0wLjAxNSA0LjI1MS0wLjA4MyA1Ljc1Mi0wLjA2MyAxLjM4OC0wLjI5NSAyLjE0Mi0wLjQ5IDIuNjQ0LTAuMjU4IDAuNjY0LTAuNTY3IDEuMTM5LTEuMDY1IDEuNjM3cy0wLjk3MyAwLjgwNy0xLjYzNyAxLjA2NWMtMC41MDIgMC4xOTUtMS4yNTYgMC40MjctMi42NDQgMC40OS0xLjUwMSAwLjA2OC0xLjk1MSAwLjA4My01Ljc1MiAwLjA4My0zLjgwMiAwLTQuMjUyMi0wLjAxNS01Ljc1MzItMC4wODMtMS4zODgxLTAuMDYzLTIuMTQxOS0wLjI5NS0yLjY0MzUtMC40OS0wLjY2NDYtMC4yNTgtMS4xMzg4LTAuNTY3LTEuNjM3LTEuMDY1LTAuNDk4MS0wLjQ5OC0wLjgwNjctMC45NzMtMS4wNjUtMS42MzctMC4xOTQ5LTAuNTAyLTAuNDI2OC0xLjI1Ni0wLjQ5MDEtMi42NDQtMC4wNjg1LTEuNTAxLTAuMDgzMS0xLjk1MS0wLjA4MzEtNS43NTIgMC0zLjgwMiAwLjAxNDYtNC4yNTIgMC4wODMxLTUuNzUzMiAwLjA2MzMtMS4zODgxIDAuMjk1Mi0yLjE0MTkgMC40OTAxLTIuNjQzNiAwLjI1ODMtMC42NjQ1IDAuNTY2OC0xLjEzODcgMS4wNjUtMS42MzY5czAuOTcyNC0wLjgwNjcgMS42MzctMS4wNjVjMC41MDE2LTAuMTk0OSAxLjI1NTQtMC40MjY5IDIuNjQzNS0wLjQ5MDIgMS41MDEyLTAuMDY4NCAxLjk1MTItMC4wODMgNS43NTMyLTAuMDgzeiIvPgogICAgIDwvZz4KICAgICA8cGF0aCBpZD0iRmlsbC00IiBmaWxsPSIjZmZmIiBkPSJtMTQuMjQgMTguOTkxYy0yLjYyMSAwLTQuNzQ1OS0yLjEyNS00Ljc0NTktNC43NDUgMC0yLjYyMSAyLjEyNDktNC43NDYgNC43NDU5LTQuNzQ2IDIuNjIgMCA0Ljc0NSAyLjEyNSA0Ljc0NSA0Ljc0NiAwIDIuNjItMi4xMjUgNC43NDUtNC43NDUgNC43NDV6bTAtMTIuMDU2Yy00LjAzOCAwLTcuMzExMSAzLjI3MzEtNy4zMTExIDcuMzExMSAwIDQuMDM3IDMuMjczMSA3LjMxIDcuMzExMSA3LjMxIDQuMDM3IDAgNy4zMS0zLjI3MyA3LjMxLTcuMzEgMC00LjAzOC0zLjI3My03LjMxMTEtNy4zMS03LjMxMTF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZmlsbD0iI2ZmZiIgZD0ibTIzLjU0MSA2LjY0NjFjMCAwLjk0MzUtMC43NjUgMS43MDgzLTEuNzA5IDEuNzA4My0wLjk0MyAwLTEuNzA4LTAuNzY0OC0xLjcwOC0xLjcwODMgMC0wLjk0MzYgMC43NjUtMS43MDg1IDEuNzA4LTEuNzA4NSAwLjk0NCAwIDEuNzA5IDAuNzY0OSAxLjcwOSAxLjcwODUiLz4KICAgIDwvZz4KICAgPC9nPgogICA8cGF0aCBpZD0iY2Fub25pY2FsLWRlZmF1bHQiIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iIzY2NiIgZD0ibTM1NiAzMi43MzVjLTcuMDQgMC0xMi43NC01LjctMTIuNzQtMTIuNzM2IDAtNy4wMzQgNS43LTEyLjczNCAxMi43NC0xMi43MzQgNy4wNC0wLjAwMDUgMTIuNzQgNS43IDEyLjc0IDEyLjczNCAwIDcuMDM2LTUuNyAxMi43MzYtMTIuNzQgMTIuNzM2em0yMC0xMi43MzVjMCAxMS4wNDUtOC45NSAyMC0yMCAyMHMtMjAtOC45NTUtMjAtMjBjMC0xMS4wNDYgOC45NS0yMCAyMC0yMHMyMCA4Ljk1MzYgMjAgMjB6bS0yMC0xNS4xMzRjLTguMzYgMC0xNS4xNCA2Ljc3NjUtMTUuMTQgMTUuMTM0IDAgOC4zNiA2Ljc4IDE1LjEzNSAxNS4xNCAxNS4xMzVzMTUuMTQtNi43NzUgMTUuMTQtMTUuMTM1YzAtOC4zNTgtNi43OC0xNS4xMzQtMTUuMTQtMTUuMTM0eiIvPgogICA8ZyBpZD0iY29mX29yYW5nZV9oZXgtY29weSIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTIpIj4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iIzY2NiIgZD0ibTM5LjkwNiAyMC4wMTNjMCAxMC45ODctOC45MDUgMTkuODkzLTE5Ljg5MiAxOS44OTMtMTAuOTg2IDAtMTkuODkyLTguOTA2LTE5Ljg5Mi0xOS44OTMtMC4wMDAzMi0xMC45ODYgOC45MDU5LTE5Ljg5MSAxOS44OTItMTkuODkxIDEwLjk4Ny0wLjAwMDMyIDE5Ljg5MiA4LjkwNTQgMTkuODkyIDE5Ljg5MXoiLz4KICAgIDxwYXRoIGlkPSJTaGFwZSIgZmlsbD0iI2ZmZiIgZD0ibTkuNjkwMiAyMC4wMTNjMCAxLjQxMy0xLjE0NTEgMi41NTgtMi41NTg2IDIuNTU4LTEuNDExNyAwLTIuNTU2OS0xLjE0NS0yLjU1NjktMi41NTggMC0xLjQxMiAxLjE0NTItMi41NTcgMi41NTY5LTIuNTU3IDEuNDEzNSAwIDIuNTU4NiAxLjE0NSAyLjU1ODYgMi41NTd6bTE0LjU1MSAxMi40MzZjMC43MDYgMS4yMjMgMi4yNyAxLjY0MiAzLjQ5MyAwLjkzNnMxLjY0Mi0yLjI3IDAuOTM2LTMuNDk0Yy0wLjcwNi0xLjIyMy0yLjI3LTEuNjQxLTMuNDkzLTAuOTM1LTEuMjIzIDAuNzA3LTEuNjQyIDIuMjctMC45MzYgMy40OTN6bTQuNDI5LTIyLjMxM2MwLjcwNi0xLjIyMzQgMC4yODgtMi43ODc0LTAuOTM2LTMuNDkyOS0xLjIyMi0wLjcwNjMtMi43ODctMC4yODcyLTMuNDkzIDAuOTM1Ny0wLjcwNiAxLjIyMzItMC4yODcgMi43ODcyIDAuOTM2IDMuNDkzMnMyLjc4OCAwLjI4NyAzLjQ5My0wLjkzNnptLTguNjU2IDIuNTg0YzMuODExIDAgNi45MzggMi45MjIgNy4yNjUgNi42NDhsMy43MDEtMC4wNTljLTAuMTc1LTIuNzY4LTEuMzc2LTUuMjU4LTMuMjI3LTcuMDk0LTAuOTggMC4zNzgtMi4xMTYgMC4zMjYtMy4wOTctMC4yNC0wLjk4MS0wLjU2Ny0xLjU5NC0xLjUyNi0xLjc1Ni0yLjU2NTMtMC45Mi0wLjI0OTgtMS44ODgtMC4zODM2LTIuODg2LTAuMzgzNi0xLjc1IDAtMy40MDQgMC40MDkzLTQuODc0IDEuMTM2OWwxLjgwMSAzLjIzNGMwLjkzNC0wLjQzMyAxLjk3Ni0wLjY3NyAzLjA3My0wLjY3N3ptLTcuMjk0IDcuMjkzYzAtMi40NjcgMS4yMjYtNC42NDggMy4xMDItNS45NjdsLTEuOTAxLTMuMTc3Yy0yLjIwMSAxLjQ3LTMuODQxIDMuNzEyLTQuNTMyNCA2LjM0MSAwLjgxODQgMC42NiAxLjM0MzQgMS42NyAxLjM0MzQgMi44MDMgMCAxLjEzNS0wLjUyNSAyLjE0NS0xLjM0MzQgMi44MDQgMC42OTE0IDIuNjI5IDIuMzMxNCA0Ljg3MiA0LjUzMjQgNi4zNDNsMS45MDEtMy4xNzdjLTEuODc2LTEuMzItMy4xMDItMy41MDEtMy4xMDItNS45N3ptNy4yOTQgNy4yOTVjLTEuMDk3IDAtMi4xMzktMC4yNDQtMy4wNzMtMC42NzhsLTEuODAxIDMuMjM0YzEuNDcgMC43MjkgMy4xMjQgMS4xMzcgNC44NzQgMS4xMzcgMC45OTggMCAxLjk2Ni0wLjEzMiAyLjg4Ni0wLjM4MyAwLjE2Mi0xLjAzOSAwLjc3NS0xLjk5OSAxLjc1Ni0yLjU2NCAwLjk4MS0wLjU2NyAyLjExNy0wLjYxOCAzLjA5Ny0wLjI0IDEuODUxLTEuODM3IDMuMDUyLTQuMzI3IDMuMjI3LTcuMDk2bC0zLjcwMS0wLjA1OGMtMC4zMjcgMy43MjYtMy40NTQgNi42NDgtNy4yNjUgNi42NDh6Ii8+CiAgIDwvZz4KICAgPGcgaWQ9Imdvb2dsZS1wbHVzIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGZpbGw9IiM2NjYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2KSI+CiAgICA8cGF0aCBpZD0iU2hhcGUiIGQ9Im0yMCAwYy0xMS4wNDUgMC0yMCA4Ljk1NS0yMCAyMHM4Ljk1NSAyMCAyMCAyMCAyMC04Ljk1NSAyMC0yMC04Ljk1NS0yMC0yMC0yMHptLTQuODYyIDI2LjgwNWMtMy43NjMgMC02LjgwNDctMy4wNDItNi44MDQ3LTYuODA1czMuMDQxNy02LjgwNSA2LjgwNDctNi44MDVjMS44MzkgMCAzLjM3NCAwLjY3IDQuNTU5IDEuNzc4bC0xLjg0NSAxLjc4Yy0wLjUwNy0wLjQ4Ni0xLjM5LTEuMDUtMi43MTQtMS4wNS0yLjMyMyAwLTQuMjE4IDEuOTI1LTQuMjE4IDQuMjk5IDAgMi4zNzMgMS44OTcgNC4yOTggNC4yMTggNC4yOTggMi42OTQgMCAzLjcwNy0xLjkzNyAzLjg2LTIuOTM3aC0zLjg2di0yLjMzM2g2LjQyNWMwLjA2IDAuMzQgMC4xMDcgMC42OCAwLjEwNyAxLjEyOCAwLjAwMiAzLjg4Ny0yLjYwNSA2LjY0Ny02LjUzMiA2LjY0N3ptMTYuNTI5LTUuODMzaC0yLjkxN3YyLjkxNmgtMS45NDV2LTIuOTE2aC0yLjkxN3YtMS45NDRoMi45MTd2LTIuOTE2aDEuOTQ1djIuOTE2aDIuOTE3djEuOTQ0eiIvPgogICA8L2c+CiAgIDxnIGlkPSJ0d2l0dGVyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExMikiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiI+CiAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIi8+CiAgICA8L2c+CiAgICA8ZyBpZD0iTG9nb19feDIwMTRfX0ZJWEVEIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4LjkgMTEuNCkiPgogICAgIDxwYXRoIGlkPSJTaGFwZSIgZD0ibTcuNDQgMTkuMTVjOC44NyAwIDEzLjcyLTcuMzUgMTMuNzItMTMuNzIgMC0wLjIxIDAtMC40Mi0wLjAxLTAuNjIgMC45NC0wLjY4IDEuNzYtMS41MyAyLjQxLTIuNS0wLjg2IDAuMzgtMS43OSAwLjY0LTIuNzcgMC43NiAxLTAuNiAxLjc2LTEuNTQgMi4xMi0yLjY3LTAuOTMgMC41NS0xLjk2IDAuOTUtMy4wNiAxLjE3LTAuODgtMC45NC0yLjEzLTEuNTItMy41Mi0xLjUyLTIuNjYgMC00LjgyIDIuMTYtNC44MiA0LjgyIDAgMC4zOCAwLjA0IDAuNzUgMC4xMyAxLjEtNC4wMS0wLjItNy41Ni0yLjEyLTkuOTQtNS4wNC0wLjQxIDAuNzEtMC42NSAxLjU0LTAuNjUgMi40MiAwIDEuNjcgMC44NSAzLjE1IDIuMTUgNC4wMS0wLjc5LTAuMDItMS41My0wLjI0LTIuMTgtMC42djAuMDZjMCAyLjM0IDEuNjYgNC4yOCAzLjg3IDQuNzMtMC40IDAuMTEtMC44MyAwLjE3LTEuMjcgMC4xNy0wLjMxIDAtMC42MS0wLjAzLTAuOTEtMC4wOSAwLjYxIDEuOTIgMi4zOSAzLjMxIDQuNSAzLjM1LTEuNjUgMS4yOS0zLjczIDIuMDYtNS45OSAyLjA2LTAuMzkgMC0wLjc3LTAuMDItMS4xNS0wLjA3IDIuMTEgMS4zOCA0LjY1IDIuMTggNy4zNyAyLjE4Ii8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImZhY2Vib2siPgogICAgPGcgaWQ9InBhdGg0MjQxIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgIDxtYXNrIGlkPSJtYXNrLTgiIGZpbGw9IndoaXRlIj4KICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC03Ii8+CiAgICAgPC9tYXNrPgogICAgIDx1c2UgaWQ9Ik1hc2siIHhsaW5rOmhyZWY9IiNwYXRoLTciIGZpbGw9IiM2NjY2NjYiLz4KICAgICA8cGF0aCBtYXNrPSJ1cmwoI21hc2stOCkiIGQ9Im0zMC4wMzcgMTAuMDAxYy0zLjkyIDAtNi42MDMgMi40NDktNi42MDMgNi45NDV2My41MjZoLTQuNDM0djUuMjU1aDQuNDM0djE0LjI3M2MxLjgyLTAuMjQ2IDMuNi0wLjcyOCA1LjI5OS0xLjQzOHYtMTIuODM1aDQuNDI0bDAuNjYtNS4yNTVoLTUuMDg0di0zLjAwMmMwLTEuNTIyIDAuNDc5LTMuMDg1IDIuNTUtMi41NjNoMi43MTd2LTQuN2MtMC40NjktMC4wNjQtMi4wODUtMC4yMDctMy45NjMtMC4yMDd2MC4wMDF6IiBmaWxsPSIjZmZmIi8+CiAgICA8L2c+CiAgIDwvZz4KICAgPGcgaWQ9ImxpbmtlZGluIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjQpIj4KICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGZpbGwtcnVsZT0ibm9uemVybyIgY3k9IjIwIiBjeD0iMjAiIHI9IjIwIiBmaWxsPSIjNjY2Ii8+CiAgICA8ZyBpZD0iR3JvdXAtMiIgZmlsbD0iI0ZGRkZGRSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSI+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZD0ibTMuMDY5NiAwLjQwNTc4YzEuNTA2OCAwIDIuNzMxNyAxLjIzMzEgMi43MzE3IDIuNzUwOSAwIDEuNTE5My0xLjIyNDkgMi43NTI0LTIuNzMxNyAyLjc1MjQtMS41MTA5IDAtMi43MzM1LTEuMjMzMS0yLjczMzUtMi43NTI0IDAuMDAwMDEtMS41MTc4IDEuMjIyNi0yLjc1MDkgMi43MzM1LTIuNzUwOXYtMC4wMDAwMnptLTIuMzU3OSAyMi44NjJoNC43MTM3di0xNS4yNzFsLTQuNzEzNy0wLjAwMDMgMC4wMDAwMiAxNS4yNzF6Ii8+CiAgICAgPHBhdGggaWQ9IkZpbGwtNSIgZD0ibTguMzgyIDcuOTk2N2g0LjUyMXYyLjA4NzNoMC4wNjNjMC42MjktMS4yMDExIDIuMTY3LTIuNDY2OSA0LjQ2LTIuNDY2OSA0Ljc3MyAwIDUuNjU0IDMuMTYyOSA1LjY1NCA3LjI3Mzl2OC4zNzdoLTQuNzF2LTcuNDI2YzAtMS43NzEtMC4wMzItNC4wNDktMi40NDktNC4wNDktMi40NTMgMC0yLjgyOSAxLjkyOS0yLjgyOSAzLjkydjcuNTU1aC00Ljcxdi0xNS4yNzEiLz4KICAgIDwvZz4KICAgPC9nPgogICA8ZyBpZD0ieW91dHViZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjgwKSI+CiAgICA8Y2lyY2xlIGlkPSJPdmFsIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN5PSIyMCIgY3g9IjIwIiByPSIyMCIgZmlsbD0iIzY2NiIvPgogICAgPGcgaWQ9Inl0X2ljb25fcmdiIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3IDExKSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMCIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC05Ii8+CiAgICAgIDwvbWFzaz4KICAgICAgPHBhdGggaWQ9IkZpbGwtMSIgZmlsbD0iI2ZmZiIgbWFzaz0idXJsKCNtYXNrLTEwKSIgZD0ibTI1LjUyNCAyLjg2OGMtMC4zLTEuMTI4OS0xLjE4My0yLjAxNzktMi4zMDUtMi4zMTk3LTIuMDMyLTAuNTQ4My0xMC4xODUtMC41NDgzLTEwLjE4NS0wLjU0ODNzLTguMTUxNSAwLTEwLjE4NCAwLjU0ODM0Yy0xLjEyMiAwLjMwMTcyLTIuMDA1NCAxLjE5MDgtMi4zMDUyIDIuMzE5Ny0wLjU0NDggMi4wNDYxLTAuNTQ0OCA2LjMxNTQtMC41NDQ4IDYuMzE1NHMwIDQuMjY4NiAwLjU0NDc4IDYuMzE1NmMwLjI5OTggMS4xMjkgMS4xODMyIDIuMDE4IDIuMzA0NyAyLjMyIDIuMDMzIDAuNTQ4IDEwLjE4NCAwLjU0OCAxMC4xODQgMC41NDhzOC4xNTMgMCAxMC4xODUtMC41NDhjMS4xMjItMC4zMDIgMi4wMDUtMS4xOTEgMi4zMDUtMi4zMiAwLjU0NS0yLjA0NyAwLjU0NS02LjMxNTYgMC41NDUtNi4zMTU2czAtNC4yNjkzLTAuNTQ1LTYuMzE1NCIvPgogICAgIDwvZz4KICAgICA8cG9seWxpbmUgaWQ9IkZpbGwtNCIgcG9pbnRzPSIxMC4zNjggMTMuMDYgMTcuMTgyIDkuMTgzNSAxMC4zNjggNS4zMDczIDEwLjM2OCAxMy4wNiIgZmlsbD0iIzY2NiIvPgogICAgPC9nPgogICA8L2c+CiAgIDxnIGlkPSJpbnN0YWdyYW0iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2OCkiPgogICAgPGcgaWQ9IkRhcmtfQmx1ZSIgZmlsbD0iIzY2NiIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeT0iMjAiIGN4PSIyMCIgcj0iMjAiLz4KICAgIDwvZz4KICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNiA2KSI+CiAgICAgPGcgaWQ9Ikdyb3VwLTMiPgogICAgICA8bWFzayBpZD0ibWFzay0xMiIgZmlsbD0id2hpdGUiPgogICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xMSIvPgogICAgICA8L21hc2s+CiAgICAgIDxwYXRoIGlkPSJGaWxsLTEiIGZpbGw9IiNmZmYiIG1hc2s9InVybCgjbWFzay0xMikiIGQ9Im0xNC4yMzcgMC4wMDg5ODU0Yy0zLjg2NyAwLTQuMzUxNyAwLjAxNjM4OS01Ljg3MDEgMC4wODU2NzMtMS41MTU0IDAuMDY5MTEyLTIuNTUwMyAwLjMwOTgtMy40NTU4IDAuNjYxNzYtMC45MzYyIDAuMzYzNzgtMS43MzAxIDAuODUwNTgtMi41MjE3IDEuNjQyLTAuNzkxNCAwLjc5MTUtMS4yNzgyIDEuNTg1NS0xLjY0MiAyLjUyMTctMC4zNTE5MyAwLjkwNTUtMC41OTI2MSAxLjk0MDQtMC42NjE3MyAzLjQ1NTctMC4wNjkyODEgMS41MTg1LTAuMDg1NjcgMi4wMDMyLTAuMDg1NjcgNS44NzAyIDAgMy44NjYgMC4wMTYzODkgNC4zNTEgMC4wODU2NzIgNS44NjkgMC4wNjkxMTggMS41MTYgMC4zMDk4IDIuNTUxIDAuNjYxNzYgMy40NTYgMC4zNjM3NyAwLjkzNiAwLjg1MDU3IDEuNzMgMS42NDIgMi41MjIgMC43OTE2IDAuNzkxIDEuNTg1NSAxLjI3OCAyLjUyMTcgMS42NDIgMC45MDU1IDAuMzUyIDEuOTQwNCAwLjU5MiAzLjQ1NTggMC42NjEgMS41MTg0IDAuMDcgMi4wMDMxIDAuMDg2IDUuODcwMSAwLjA4NiAzLjg2NiAwIDQuMzUxLTAuMDE2IDUuODY5LTAuMDg2IDEuNTE2LTAuMDY5IDIuNTUxLTAuMzA5IDMuNDU2LTAuNjYxIDAuOTM2LTAuMzY0IDEuNzMtMC44NTEgMi41MjItMS42NDIgMC43OTEtMC43OTIgMS4yNzgtMS41ODYgMS42NDItMi41MjIgMC4zNTItMC45MDUgMC41OTItMS45NCAwLjY2MS0zLjQ1NiAwLjA3LTEuNTE4IDAuMDg2LTIuMDAzIDAuMDg2LTUuODY5IDAtMy44NjctMC4wMTYtNC4zNTE3LTAuMDg2LTUuODcwMi0wLjA2OS0xLjUxNTMtMC4zMDktMi41NTAyLTAuNjYxLTMuNDU1Ny0wLjM2NC0wLjkzNjItMC44NTEtMS43MzAyLTEuNjQyLTIuNTIxNy0wLjc5Mi0wLjc5MTQtMS41ODYtMS4yNzgyLTIuNTIyLTEuNjQyLTAuOTA1LTAuMzUxOTQtMS45NC0wLjU5MjYzLTMuNDU2LTAuNjYxNzQtMS41MTgtMC4wNjkyODYtMi4wMDMtMC4wODU2NzUtNS44NjktMC4wODU2NzV6bTAgMi41NjUxYzMuODAxIDAgNC4yNTEgMC4wMTQ2IDUuNzUyIDAuMDgzIDEuMzg4IDAuMDYzMyAyLjE0MiAwLjI5NTMgMi42NDQgMC40OTAyIDAuNjY0IDAuMjU4MyAxLjEzOSAwLjU2NjggMS42MzcgMS4wNjVzMC44MDcgMC45NzI0IDEuMDY1IDEuNjM2OWMwLjE5NSAwLjUwMTcgMC40MjcgMS4yNTU1IDAuNDkgMi42NDM2IDAuMDY4IDEuNTAxMiAwLjA4MyAxLjk1MTIgMC4wODMgNS43NTMyIDAgMy44MDEtMC4wMTUgNC4yNTEtMC4wODMgNS43NTItMC4wNjMgMS4zODgtMC4yOTUgMi4xNDItMC40OSAyLjY0NC0wLjI1OCAwLjY2NC0wLjU2NyAxLjEzOS0xLjA2NSAxLjYzN3MtMC45NzMgMC44MDctMS42MzcgMS4wNjVjLTAuNTAyIDAuMTk1LTEuMjU2IDAuNDI3LTIuNjQ0IDAuNDktMS41MDEgMC4wNjgtMS45NTEgMC4wODMtNS43NTIgMC4wODMtMy44MDIgMC00LjI1MjItMC4wMTUtNS43NTMyLTAuMDgzLTEuMzg4MS0wLjA2My0yLjE0MTktMC4yOTUtMi42NDM1LTAuNDktMC42NjQ2LTAuMjU4LTEuMTM4OC0wLjU2Ny0xLjYzNy0xLjA2NS0wLjQ5ODEtMC40OTgtMC44MDY3LTAuOTczLTEuMDY1LTEuNjM3LTAuMTk0OS0wLjUwMi0wLjQyNjgtMS4yNTYtMC40OTAxLTIuNjQ0LTAuMDY4NS0xLjUwMS0wLjA4MzEtMS45NTEtMC4wODMxLTUuNzUyIDAtMy44MDIgMC4wMTQ2LTQuMjUyIDAuMDgzMS01Ljc1MzIgMC4wNjMzLTEuMzg4MSAwLjI5NTItMi4xNDE5IDAuNDkwMS0yLjY0MzYgMC4yNTgzLTAuNjY0NSAwLjU2NjgtMS4xMzg3IDEuMDY1LTEuNjM2OXMwLjk3MjQtMC44MDY3IDEuNjM3LTEuMDY1YzAuNTAxNi0wLjE5NDkgMS4yNTU0LTAuNDI2OSAyLjY0MzUtMC40OTAyIDEuNTAxMi0wLjA2ODQgMS45NTEyLTAuMDgzIDUuNzUzMi0wLjA4M3oiLz4KICAgICA8L2c+CiAgICAgPHBhdGggaWQ9IkZpbGwtNCIgZmlsbD0iI2ZmZiIgZD0ibTE0LjI0IDE4Ljk5MWMtMi42MjEgMC00Ljc0NTktMi4xMjUtNC43NDU5LTQuNzQ1IDAtMi42MjEgMi4xMjQ5LTQuNzQ2IDQuNzQ1OS00Ljc0NiAyLjYyIDAgNC43NDUgMi4xMjUgNC43NDUgNC43NDYgMCAyLjYyLTIuMTI1IDQuNzQ1LTQuNzQ1IDQuNzQ1em0wLTEyLjA1NmMtNC4wMzggMC03LjMxMTEgMy4yNzMxLTcuMzExMSA3LjMxMTEgMCA0LjAzNyAzLjI3MzEgNy4zMSA3LjMxMTEgNy4zMSA0LjAzNyAwIDcuMzEtMy4yNzMgNy4zMS03LjMxIDAtNC4wMzgtMy4yNzMtNy4zMTExLTcuMzEtNy4zMTExeiIvPgogICAgIDxwYXRoIGlkPSJGaWxsLTUiIGZpbGw9IiNmZmYiIGQ9Im0yMy41NDEgNi42NDYxYzAgMC45NDM1LTAuNzY1IDEuNzA4My0xLjcwOSAxLjcwODMtMC45NDMgMC0xLjcwOC0wLjc2NDgtMS43MDgtMS43MDgzIDAtMC45NDM2IDAuNzY1LTEuNzA4NSAxLjcwOC0xLjcwODUgMC45NDQgMCAxLjcwOSAwLjc2NDkgMS43MDkgMS43MDg1Ii8+CiAgICA8L2c+CiAgIDwvZz4KICA8L2c+CiA8L2c+Cjwvc3ZnPgo=");background-size:430px 96px;height:42px;width:42px;background-position:-390px 0}.p-icon--ubuntu:hover{background-position-y:-56px}.p-icon--medium{height:1.25rem;width:1.25rem}.p-icon--large{height:1.5rem;width:1.5rem}.p-icon--x-large{height:1.75rem;width:1.75rem}.p-icon--x-large{height:2.25rem;width:2.25rem}.p-icon--xx-large{height:3rem;width:3rem}[class*="p-button-"] [class*="p-icon-"]{top:-1px;vertical-align:middle}.p-tooltip{position:relative}.p-tooltip__message{background-color:#111;border:0;color:#fff;display:none;font-size:.875rem;left:0;line-height:1.5;min-width:155px;padding:.5rem .75rem;position:absolute;text-align:left;text-decoration:initial;top:100%;transform:translateX(0%) translateY(13px);white-space:pre;z-index:1}.p-tooltip__message::before{border-bottom:8px solid #111;border-left:8px solid transparent;border-right:8px solid transparent;bottom:100%;content:'';height:0;left:.75rem;pointer-events:none;position:absolute;width:0}.p-tooltip:focus .p-tooltip__message,.p-tooltip:hover .p-tooltip__message{display:inline;text-decoration:initial}.p-tooltip--btm-center .p-tooltip__message{bottom:inherit;left:50%;top:100%;transform:translateX(-50%) translateY(13px)}.p-tooltip--btm-center .p-tooltip__message::before{left:50%;transform:translateX(-50%)}.p-tooltip--btm-right .p-tooltip__message{bottom:inherit;left:initial;right:0;top:100%;transform:translateY(13px)}.p-tooltip--btm-right .p-tooltip__message::before{left:initial;right:.75rem}.p-tooltip--top-left .p-tooltip__message{bottom:100%;left:0;top:initial;transform:translateX(0%) translateY(-13px)}.p-tooltip--top-left .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:.75rem}.p-tooltip--top-center .p-tooltip__message{bottom:100%;left:50%;top:initial;transform:translateX(-50%) translateY(-13px)}.p-tooltip--top-center .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:50%;transform:translateX(-50%)}.p-tooltip--top-right .p-tooltip__message{bottom:100%;left:initial;right:0;top:initial;transform:translateX(0%) translateY(-13px)}.p-tooltip--top-right .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #111;bottom:-1rem;left:initial;right:.75rem}.p-tooltip--right .p-tooltip__message{bottom:inherit;left:100%;top:50%;transform:translateX(14px) translateY(-50%)}.p-tooltip--right .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid transparent;border-right:8px solid #111;border-top:8px solid transparent;bottom:inherit;left:0;top:50%;transform:translateX(-16px) translateY(-50%)}.p-tooltip--left .p-tooltip__message{bottom:inherit;left:-16px;top:50%;transform:translateX(-100%) translateY(-50%)}.p-tooltip--left .p-tooltip__message::before{border-bottom:8px solid transparent;border-left:8px solid #111;border-right:8px solid transparent;border-top:8px solid transparent;bottom:inherit;left:100%;top:50%;transform:translateX(0) translateY(-50%)}.p-inline-images{display:block;list-style:none;margin-left:0;padding-left:0;text-align:center}.p-inline-images__item{display:inline-block;margin:1.875rem;max-height:5.625rem;max-width:5.625rem;overflow:hidden;text-align:center;vertical-align:middle}@media (min-width: 768px){.p-inline-images__item{margin:1.875rem;max-height:11.25rem;max-width:11.25rem}}.p-inline-images__item *{max-height:3rem;max-width:7rem;width:100%}@media only screen and (min-width: 768px){.p-inline-images__item *{max-height:5.5rem;max-width:9rem}}.p-inline-images__img{display:inline-block;margin:2rem;max-width:6rem;text-align:center;vertical-align:middle;width:100%}@media (min-width: 768px){.p-inline-images__img{margin:3rem;max-width:11.25rem}}.p-notification{background-color:#fff;border:0;border-color:#666;border-radius:.125rem;border-style:solid;border-top-width:3px;box-shadow:0 1px 5px 1px rgba(0,0,0,0.2);color:#111;display:flex;font-size:1rem;overflow:hidden;padding:.625rem;text-align:center}.p-notification__response{background-position:0 4px;background-repeat:no-repeat;background-size:16px 16px;margin:0;padding-right:.75rem;text-align:left}.p-notification__status{font-weight:400;margin-right:.3125rem}.p-notification__action{border-bottom:0;margin-left:.3125rem}.p-notification .p-icon--close{background-size:1rem;border:0;margin:0 -.25rem auto auto;padding:.75rem}.p-notification__response{max-width:60em}.p-notification--positive{background-color:#fff;border:0;border-color:#666;border-radius:.125rem;border-style:solid;border-top-width:3px;box-shadow:0 1px 5px 1px rgba(0,0,0,0.2);color:#111;display:flex;font-size:1rem;overflow:hidden;padding:.625rem;text-align:center;border-color:#0e8420}.p-notification--positive .p-notification__response{background-image:url("data:image/svg+xml,%3Csvg width='17px' height='17px' viewBox='0 0 17 17' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='notification-success' transform='translate(1.000000, 1.000000)'%3E%3Cg id='Page-3---colours'%3E%3Cg id='Notifications---single'%3E%3Cg id='Group'%3E%3Cg id='ICON'%3E%3Ccircle id='circle6710' stroke='%230e8420' stroke-width='1.5' fill='%230e8420' cx='7.2500086' cy='7.2500086' r='7.2500086'%3E%3C/circle%3E%3Cpolygon id='path6712' fill='%23fff' points='11.0502986 4.1734486 10.9843986 4.2311486 6.2496486 8.3783686 3.4740786 5.9974286 2.6350186 6.9463086 6.2503386 10.7500186 11.7500086 4.9627786 11.0502986 4.1734886'%3E%3C/polygon%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");padding-left:1.5rem}.p-notification--caution{background-color:#fff;border:0;border-color:#666;border-radius:.125rem;border-style:solid;border-top-width:3px;box-shadow:0 1px 5px 1px rgba(0,0,0,0.2);color:#111;display:flex;font-size:1rem;overflow:hidden;padding:.625rem;text-align:center;border-color:#f99b11}.p-notification--caution .p-notification__response{background-image:url("data:image/svg+xml,%3Csvg width='17px' height='17px' viewBox='0 0 17 17' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='notification-caution' transform='translate(1.000000, 1.000000)'%3E%3Cg id='Page-3---colours'%3E%3Cg id='Notifications---single'%3E%3Cg id='Group'%3E%3Cg id='ICON'%3E%3Ccircle id='circle5432' stroke='%23f99b11' stroke-width='1.5' fill='%23f99b11' cx='7.2500086' cy='7.2500086' r='7.2500086'%3E%3C/circle%3E%3Cpath d='M6.2500086,3.2500086 L6.2500086,8.2500086 L8.2500086,8.2500086 L8.2500086,3.2500086 L6.2500086,3.2500086 L6.2500086,3.2500086 L6.2500086,3.2500086 Z M6.2500086,9.2500086 L6.2500086,11.2500086 L8.2500086,11.2500086 L8.2500086,9.2500086 L6.2500086,9.2500086 L6.2500086,9.2500086 L6.2500086,9.2500086 Z' id='rect5434' fill='%23fff'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");padding-left:1.5rem}.p-notification--negative{background-color:#fff;border:0;border-color:#666;border-radius:.125rem;border-style:solid;border-top-width:3px;box-shadow:0 1px 5px 1px rgba(0,0,0,0.2);color:#111;display:flex;font-size:1rem;overflow:hidden;padding:.625rem;text-align:center;border-color:#c7162b}.p-notification--negative .p-notification__response{background-image:url("data:image/svg+xml,%3Csvg width='16px' height='17px' viewBox='0 0 16 17' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cg id='Page-3---colours' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Notifications---single' transform='translate(-215.000000, -271.000000)'%3E%3Cg id='Group' transform='translate(205.000000, 254.000000)'%3E%3Cg id='ICON' transform='translate(10.000000, 17.000000)'%3E%3Crect id='rect6415' x='0' y='0.36218' width='16' height='16'%3E%3C/rect%3E%3Ccircle id='circle6417' stroke='%23c7162b' stroke-width='1.5' fill='%23c7162b' cx='8' cy='8.36218' r='7.2500086'%3E%3C/circle%3E%3Cpath d='M5.00001,5.36218 L11.00001,11.36218' id='path6479-8' stroke='%23fff' stroke-width='1.5'%3E%3C/path%3E%3Cpath d='M11.00001,5.36218 L5.00001,11.36218' id='path6481-8' stroke='%23fff' stroke-width='1.5'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E");padding-left:1.5rem}.p-notification--information{background-color:#fff;border:0;border-color:#666;border-radius:.125rem;border-style:solid;border-top-width:3px;box-shadow:0 1px 5px 1px rgba(0,0,0,0.2);color:#111;display:flex;font-size:1rem;overflow:hidden;padding:.625rem;text-align:center;border-color:#335280}.p-pull-quote{border:0;margin:2rem 0 1rem;padding-left:2rem;padding-right:1.25rem;position:relative}@media (min-width: 768px){.p-pull-quote{margin:1.5rem 0 1.5rem}}.p-pull-quote>p{max-width:25em;font-size:1.5rem;font-weight:300;line-height:1.333;font-style:normal}.u-align--center .p-pull-quote>p{margin-left:auto;margin-right:auto}.u-align--left .p-pull-quote>p{margin-right:auto}.u-align--right .p-pull-quote>p{margin-left:auto}@media only screen and (min-width: 1030px){.p-pull-quote>p{font-size:1.75rem;line-height:1.287}}.p-pull-quote>p:first-of-type::before{color:#cdcdcd;display:inline-block;font-size:2.134rem;font-weight:bold;line-height:1rem;max-width:1.25rem;content:'\201C\2002';margin-left:-1.5rem;padding-right:1.5rem;position:relative;top:.1rem}@media (min-width: 768px){.p-pull-quote>p:first-of-type::before{font-size:2.5rem}}@media (min-width: 1030px){.p-pull-quote>p:first-of-type::before{font-size:3rem}}@media (min-width: 768px){.p-pull-quote>p:first-of-type::before{margin-left:-1.9rem;padding-right:1.9rem;top:.4rem}}.p-pull-quote>p:last-of-type{margin-bottom:0}.p-pull-quote>p:last-of-type::after{color:#cdcdcd;display:inline-block;font-size:2.134rem;font-weight:bold;line-height:1rem;max-width:1.25rem;content:'\2002\201E';margin-left:.5rem;margin-top:-.5rem;position:absolute}@media (min-width: 768px){.p-pull-quote>p:last-of-type::after{font-size:2.5rem}}@media (min-width: 1030px){.p-pull-quote>p:last-of-type::after{font-size:3rem}}.p-pull-quote__citation{display:inline-block;font-size:1.25rem;font-style:italic;line-height:1.5;margin-top:.75rem;width:100%}@media screen and (max-width: 768px){.p-table--mobile-card thead{display:none}.p-table--mobile-card tr{align-items:flex-end;background:#fff;border-radius:2px;border-width:0;box-shadow:0 1px 5px 1px rgba(17,17,17,0.2);display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;padding:1.5rem;width:100%}.p-table--mobile-card tr+tr{margin-top:1rem}.p-table--mobile-card td{margin:0;padding:0;width:100%}.p-table--mobile-card td+td{padding-top:.75rem}.p-table--mobile-card td[aria-label]{flex-basis:50%;max-width:50%;position:relative;text-align:right}.p-table--mobile-card td[aria-label]::before{content:attr(aria-label);display:block;font-weight:500;height:100%;left:-100%;position:absolute;text-align:left;width:100%}.p-table--mobile-card .p-contextual-menu,.p-table--mobile-card .p-contextual-menu--left,.p-table--mobile-card .p-contextual-menu--center{width:100%}.p-table--mobile-card .p-contextual-menu [role="menuitem"],.p-table--mobile-card .p-contextual-menu--left [role="menuitem"],.p-table--mobile-card .p-contextual-menu--center [role="menuitem"]{display:none}.p-table--mobile-card .p-contextual-menu__dropdown{box-shadow:none;display:block;max-width:100%;position:relative}.p-table--mobile-card .p-contextual-menu__dropdown::before{display:none}.p-table--mobile-card .p-contextual-menu__group{padding:0}.p-table--mobile-card .p-contextual-menu__group+.p-contextual-menu__group{margin-top:.75rem;padding-top:.75rem}.p-table--mobile-card .p-contextual-menu__link{border-color:#cdcdcd;border-radius:.125rem;border-style:solid;border-width:1px;box-sizing:border-box;color:#000;cursor:pointer;display:block;line-height:1rem;outline:none;padding:.75rem 1.5rem;text-align:center;text-decoration:none;width:100%}.p-table--mobile-card .p-contextual-menu__link+.p-contextual-menu__link{margin-top:.5rem}}.p-search-box__button,.p-search-box__reset{background:#fff;border-bottom:1px solid #cdcdcd;border-top:1px solid #cdcdcd;display:block;height:100%;margin:0;padding:0 .75rem;position:absolute;top:0;width:2.5rem}.p-search-box__button:hover,.p-search-box__reset:hover{background:inherit}.p-search-box__button:hover:disabled,.p-search-box__reset:hover:disabled{cursor:not-allowed}.p-search-box{box-shadow:inset 0 1px 2px rgba(0,0,0,0.12);display:flex;position:relative}.p-search-box__input{border-radius:2px;box-shadow:none;flex-grow:2}.p-search-box__input::-webkit-search-cancel-button{-webkit-appearance:none}.p-search-box__input:not(:valid) ~ .p-search-box__reset{display:none}.p-search-box__button{right:0}.p-search-box__reset{border-left:0;border-right:0;right:2.5rem}.p-slider{appearance:none;border-radius:3px;margin:.75rem 0;padding:0;width:100%}.p-slider::-webkit-slider-runnable-track{border:1px solid #cdcdcd;border-radius:3px;height:6px}.p-slider::-webkit-slider-thumb{appearance:none;background:#fff;border:0;border-radius:2px;box-shadow:0 0 2px 1px rgba(0,0,0,0.2);height:24px;margin-top:-10.5px;width:24px}.p-slider::-webkit-slider-thumb:hover{cursor:pointer}.p-slider::-moz-range-track{background:#fff;border:1px solid #cdcdcd;border-radius:2px;height:4px}.p-slider::-moz-range-progress{background-color:#335280;border-radius:2px;height:4px}.p-slider::-moz-range-thumb{background:#fff;border:0;border-radius:2px;box-shadow:0 0 2px 1px rgba(0,0,0,0.2);height:24px;width:24px}.p-slider::-moz-range-thumb:hover{cursor:pointer}.p-slider::-moz-focus-outer{border:0}.p-slider::-ms-track{background:transparent;border-color:transparent;border-width:12px;color:transparent;height:6px;width:calc(100% - ($thumb-size / 2))}.p-slider::-ms-fill-lower{background:#335280;border:1px solid #cdcdcd;border-radius:2px}.p-slider::-ms-fill-upper{background:#fff;border:1px solid #cdcdcd;border-radius:2px}.p-slider::-ms-thumb{background:#fff;border:0;border-radius:2px;box-shadow:0 0 2px 1px rgba(0,0,0,0.2);height:24px;margin:0 2px;width:24px}.p-slider::-ms-thumb:hover{cursor:pointer}.p-slider::-ms-tooltip{display:none}.p-slider:focus{outline:none}.p-slider:focus::-webkit-slider-thumb{outline:1px solid #19b6ee;outline-offset:2px}.p-slider:focus::-moz-range-thumb{outline:1px solid #19b6ee;outline-offset:2px}.p-slider:focus::-ms-thumb{outline:1px solid #19b6ee;outline-offset:2px}.p-slider:disabled{opacity:.5}.p-slider__wrapper{align-items:center;display:inline-flex;width:100%}.p-slider__input{height:2.625em;margin:0 0 0 1rem;min-width:3.5em;text-align:center;width:5%}.p-strip{clear:both;margin-top:0;padding:2rem 0;width:100%;background-color:transparent}@media only screen and (min-width: 1030px){.p-strip{padding:4rem 0}}.p-strip--light{clear:both;margin-top:0;padding:2rem 0;width:100%;background-color:#f7f7f7}@media only screen and (min-width: 1030px){.p-strip--light{padding:4rem 0}}.p-strip--dark{clear:both;margin-top:0;padding:2rem 0;width:100%;background-color:#111;color:#f7f7f7}@media only screen and (min-width: 1030px){.p-strip--dark{padding:4rem 0}}.p-strip--accent{clear:both;margin-top:0;padding:2rem 0;width:100%;background-color:#e95420;color:#111}@media only screen and (min-width: 1030px){.p-strip--accent{padding:4rem 0}}.p-strip--image{clear:both;margin-top:0;padding:2rem 0;width:100%;background-repeat:no-repeat;background-size:cover}@media only screen and (min-width: 1030px){.p-strip--image{padding:4rem 0}}.p-strip--image.is-light{color:#000}.p-strip--image.is-dark{color:#fff}[class^='p-strip'].is-bordered{border-bottom:1px solid #cdcdcd}[class^='p-strip'].is-shallow{padding:1.5rem 0}@media only screen and (min-width: 1030px){[class^='p-strip'].is-shallow{padding:2.5rem 0}}[class^='p-strip'].is-deep{padding:3rem 0}@media only screen and (min-width: 1030px){[class^='p-strip'].is-deep{padding:6rem 0}}.p-switch{align-items:stretch;border:0;display:inline-flex;font-size:.875rem;height:2rem;padding:initial;position:relative;width:4rem}.p-switch:focus{outline:1px solid #007aa6;outline-offset:3px}.p-switch :first-child,.p-switch :last-child{box-shadow:inset 0 2px 5px 0 rgba(17,17,17,0.2);line-height:2rem;margin:0;text-align:center;width:50%}.p-switch :first-child{background-color:#335280;border-radius:2px 0 0 2px;color:#fff}.p-switch :last-child{background-color:#cdcdcd;border-radius:0 2px 2px 0}.p-switch::before{transition-duration:0.5s;transition-property:all;transition-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);background-color:#fff;border-radius:2px;box-shadow:0 1px 5px 1px rgba(17,17,17,0.2);content:'';display:block;height:100%;left:0;max-height:2rem;padding:0;position:absolute;top:0;width:50%}.p-switch[aria-checked='true']::before{left:50%}.p-table--sortable th[role="columnheader"][aria-sort="ascending"]::after,.p-table--sortable [role="columnheader"].is-sorted.sort-asc::after,.p-table--sortable th[role="columnheader"][aria-sort="descending"]::after,.p-table--sortable [role="columnheader"].is-sorted.sort-desc::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='4' width='10' viewBox='0 0 10 4'%3E%3Cpath d='M3.637 3.138c-.518-.365-1.052-.778-1.6-1.238C1.486 1.44.946.948.414.423.273.283.135.14 0 0h1.54c.305.29.62.57.948.846.138.116.277.23.417.34.163.13.328.257.495.38.085.062.17.123.257.184.397.282.935.626 1.315.848h.054c.38-.222.918-.566 1.315-.848.4-.28.79-.583 1.17-.904C7.837.57 8.153.29 8.457 0h1.54c-.134.14-.272.282-.414.422C9.05.948 8.51 1.442 7.963 1.9c-.55.46-1.084.873-1.602 1.238S5.39 3.79 5 4c-.39-.21-.845-.497-1.363-.862z' fill='%23888' fill-rule='evenodd'/%3E%3C/svg%3E");background-position:center;background-repeat:no-repeat;background-size:100%;content:'';display:inline-block;height:.4rem;margin-left:.5rem;vertical-align:middle;width:1rem}.p-table--sortable{table-layout:fixed}.p-table--sortable th[role="columnheader"][aria-sort],.p-table--sortable [role="columnheader"]{align-items:center;cursor:pointer;white-space:nowrap}.p-table--sortable th[role="columnheader"][aria-sort="descending"]::after,.p-table--sortable [role="columnheader"].is-sorted.sort-desc::after{transform:rotate(180deg)}.p-table--sortable th[role="columnheader"][aria-sort]:hover,.p-table--sortable [role="columnheader"]:hover{color:#007aa6;text-decoration:underline}.p-tabs{border-radius:0;overflow:hidden;padding:0;position:relative}.p-tabs::before{background:linear-gradient(to right, rgba(255,255,255,0), #fff 50%);bottom:0;color:#666;content:'\203A';display:block;font-size:2rem;height:3rem;padding-right:1.5rem;pointer-events:none;position:absolute;right:0;text-align:right;top:0;width:5rem;z-index:10}@media screen and (min-width: 768px){.p-tabs::before{display:none}}.p-tabs__list{margin:0 auto;overflow-x:auto;padding:0 0 0 1.5rem;position:relative;white-space:nowrap;width:100%}@media screen and (min-width: 768px){.p-tabs__list{max-width:1440px;overflow:hidden;padding:0 1.5rem}}.p-tabs__item{display:inline-block;float:none;margin:0;padding:0;width:auto}@media screen and (min-width: 768px){.p-tabs__item{float:left}}.p-tabs__item:last-child{margin-right:3rem}@media screen and (min-width: 768px){.p-tabs__item:last-child{margin-right:0}}.p-tabs__link{border-bottom:3px solid transparent;color:#000;display:inline-block;padding:.75rem}.p-tabs__link:visited,.p-tabs__link:active{color:#000}.p-tabs__link:hover{border-bottom:3px solid #cdcdcd;text-decoration:none}.p-tabs__link[aria-selected="true"],.p-tabs__link.is-active{border-bottom:3px solid #666}.p-table-expanding{display:flex;flex-flow:column nowrap;justify-content:space-between}.p-table-expanding tbody{margin:0}.p-table-expanding tr{display:flex;flex-flow:row;flex-wrap:wrap;margin:0;width:100%}.p-table-expanding tr+tr{margin:0}.p-table-expanding th,.p-table-expanding td{align-self:baseline;display:flex;flex-basis:0;flex-flow:row nowrap;flex-grow:1;margin:0;word-break:break-word}.p-table-expanding th.p-table-expanding__panel,.p-table-expanding td.p-table-expanding__panel{border-top:1px solid #cdcdcd;flex-basis:100%;max-width:100%}.p-table-expanding th.p-table-expanding__panel[aria-hidden="true"],.p-table-expanding td.p-table-expanding__panel[aria-hidden="true"]{display:none}.p-table-expanding th.p-table-expanding__panel .row,.p-table-expanding td.p-table-expanding__panel .row{max-width:100%;padding:0;width:100%}.p-form-validation{color:#111;line-height:1.5;margin-top:1.25rem;position:relative}.p-form-validation .p-form-validation__input{background-position:calc(100% - 1rem) .75rem;background-repeat:no-repeat;padding:.5rem 2.5rem .5rem .75rem}.p-form-validation .p-form-validation__icon{position:relative}.p-form-validation .p-form-validation__icon::after{position:absolute;right:.75rem;top:calc(50% - .5rem)}.p-form-validation__message{font-size:.875rem;margin-top:.5rem}.is-error .p-form-validation__input{background-image:url("/MAAS/static/assets/fonts/4b0cd7fc-icon-error.svg");border-color:#c7162b}.is-success .p-form-validation__input{background-image:url("/MAAS/static/assets/fonts/94949185-icon-success.svg");border-color:#0e8420}.is-caution .p-form-validation__input{background-image:url("/MAAS/static/assets/fonts/db30f04c-icon-caution.svg");border-color:#f99b11}.p-form-help-text{color:#666;font-size:.875rem;margin-top:.5rem}.p-form--stacked{width:100%}@media screen and (min-width: 768px){.p-form--stacked .p-form__group{align-items:baseline;display:flex;flex-flow:wrap}.p-form--stacked .p-form__group+.p-form__group{margin-top:.75rem}}@media screen and (min-width: 768px){.p-form--stacked .p-form__label{flex-basis:25%;flex-grow:1;margin:0;max-width:25%;padding-right:.75rem}}@media screen and (min-width: 768px){.p-form--stacked .p-form__control{flex-basis:75%;flex-grow:1;margin:0;max-width:75%}}@media screen and (min-width: 768px){.p-form--inline{align-items:baseline;display:inline-flex;flex-direction:row}.p-form--inline>*{margin:0}}@media screen and (min-width: 768px){.p-form--inline .p-form__group{display:inline-flex;width:auto}.p-form--inline .p-form__group+.p-form__group,.p-form--inline .p-form__group+[class*="p-button"]{margin-left:1.5rem}.p-form--inline .p-form__group .p-form__label,.p-form--inline .p-form__group .p-form__control,.p-form--inline .p-form__group .p-form-validation__message{align-self:baseline;box-sizing:border-box}.p-form--inline .p-form__group .p-form__label{flex-shrink:0;padding-right:1rem}.p-form--inline .p-form__group .p-form__control{display:inline-block;margin:0}.p-form--inline .p-form__group .p-form-validation__message,.p-form--inline .p-form__group .p-form-help-text{clear:both;margin-top:.25rem;min-width:100%;width:0}}.p-form--inline [class*="p-button"]{flex:initial;flex-shrink:0;margin-top:0}form+[class*="p-button"]{margin-top:1.5rem}.p-pagination__link--previous::before,.p-pagination__link--next::after{color:#666;content:'\203A';font-size:2rem;position:absolute;top:1rem}.p-pagination{display:flex;width:100%}.p-pagination__link,.p-pagination__link--previous,.p-pagination__link--next{margin-top:0;padding:1rem;position:relative;width:50%}.p-pagination__link:hover,.p-pagination__link--previous:hover,.p-pagination__link--next:hover{background:#f7f7f7;text-decoration:none}.p-pagination__link--previous{padding-left:2.5rem;text-align:left}@media (max-width: 460px){.p-pagination__link--previous{width:auto}.p-pagination__link--previous:only-child{width:100%}.p-pagination__link--previous:not(:only-child) *{display:none;max-width:.5rem;padding-left:1.5rem}}.p-pagination__link--previous::before{left:.75rem;transform:scaleX(-1)}.p-pagination__link--next{padding-right:2.5rem;text-align:right}@media (max-width: 460px){.p-pagination__link--next{width:100%}}.p-pagination__link--next:only-child{margin-left:auto}.p-pagination__link--next::after{right:.75rem}.p-pagination__label,.p-pagination__title{color:#111;display:block;margin-top:0;width:100%}.p-pagination__label{margin-bottom:.5rem}.p-pagination__title{font-size:1.125rem}@media (min-width: 620px){.p-pagination__title{font-size:1.25rem}}.u-animation--spin{animation:spin 1s infinite linear}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.u-float--right{float:right !important}.u-float--left{float:left !important}.u-float-right{float:right !important}@media (max-width: 620px){.u-float-right--small{float:right !important}}@media (min-width: 768px) and (max-width: 1030px){.u-float-right--medium{float:right !important}}@media (min-width: 1030px){.u-float-right--large{float:right !important}}.u-float-left{float:left !important}@media (max-width: 620px){.u-float-left--small{float:left !important}}@media (min-width: 768px) and (max-width: 1030px){.u-float-left--medium{float:left !important}}@media (min-width: 1030px){.u-float-left--large{float:left !important}}.u-embedded-media{height:0;max-width:100%;overflow:hidden;padding-bottom:56.25%;position:relative}.u-embedded-media__element{height:100%;left:0;position:absolute;top:0;width:100%}@media only screen and (min-width: 768px){.u-equal-height{display:flex}}.u-align--center{justify-content:center !important;margin-left:auto !important;margin-right:auto !important;text-align:center !important}.u-align--left{justify-content:flex-start !important;margin-right:auto !important;text-align:left !important}.u-align--right{justify-content:flex-end !important;margin-left:auto !important;text-align:right !important}.u-no-margin{margin:0 !important}.u-no-margin--top{margin-top:0 !important}.u-no-margin--right{margin-right:0 !important}.u-no-margin--bottom{margin-bottom:0 !important}.u-no-margin--left{margin-left:0 !important}.u-no-padding{padding:0 !important}.u-no-padding--top{padding-top:0 !important}.u-no-padding--right{padding-right:0 !important}.u-no-padding--bottom{padding-bottom:0 !important}.u-no-padding--left{padding-left:0 !important}.u-hide{display:none !important}@media screen and (max-width: 768px){.u-hide--small{display:none !important}}@media (min-width: 768px) and (max-width: 1030px){.u-hide--medium{display:none !important}}@media screen and (min-width: 1030px){.u-hide--large{display:none !important}}@media (min-width: 768px){.u-image-position{position:relative}.u-image-position .u-image-position--top,.u-image-position .u-image-position--bottom,.u-image-position .u-image-position--left,.u-image-position .u-image-position--right{margin:0;position:absolute}.u-image-position [class*='col-']{position:static}.u-image-position--top{top:0}.u-image-position--bottom{bottom:0}.u-image-position--left{left:0}.u-image-position--right{right:0}}.u-show{display:inherit !important}@media screen and (max-width: 768px){.u-show--small{display:inherit !important}}@media (min-width: 768px) and (max-width: 1030px){.u-show--medium{display:inherit !important}}@media screen and (min-width: 1030px){.u-show--large{display:inherit !important}}.u-off-screen{height:1px !important;left:-10000px !important;overflow:hidden !important;position:absolute !important;top:auto !important;width:1px !important}@media (min-width: 768px){.u-vertically-center{align-items:center !important;display:flex !important}}.u-hidden{display:none !important}@media screen and (max-width: 768px){.u-hidden--small{display:none !important}}@media (min-width: 768px) and (max-width: 1030px){.u-hidden--medium{display:none !important}}@media screen and (min-width: 1030px){.u-hidden--large{display:none !important}}.u-visible{display:inherit !important}@media screen and (max-width: 768px){.u-visible--small{display:inherit !important}}@media (min-width: 768px) and (max-width: 1030px){.u-visible--medium{display:inherit !important}}@media screen and (min-width: 1030px){.u-visible--large{display:inherit !important}}.p-sticky-header{background-color:#fff;border-bottom:1px solid #cdcdcd}.p-footer__link{color:#007aa6}.p-footer__link::after{color:#111}body{background-color:#f7f7f7}maas-obj-field[type="text"],maas-obj-field[type="password"]{background-color:transparent;border:0;border-radius:0;box-shadow:none;padding:0}textarea{min-height:175px}.p-table-expanding__panel{background-color:#fff;margin-left:0 !important}.p-table-expanding__panel .p-form-validation .p-form-validation__input{padding:.5rem .75rem}.p-table--mobile-card td[aria-label]{min-height:2rem}@media (max-width: 768px){.p-table--mobile-card td,.p-table--mobile-card tr{overflow-x:visible}}table input[type="radio"],table input[type="checkbox"]{float:none}table form input[type="radio"],table form input[type="checkbox"]{float:left}table th,table td{display:table-cell !important;flex-basis:auto !important;flex-grow:0;margin-left:3.2877% !important}table th:first-child,table td:first-child{margin-left:0 !important}table tr.is-active{background-color:#fff}.u-float-none{float:none !important}.p-form--inline,.p-form--inline .p-form__group{width:100%}p:empty,ul:empty,label:empty{margin:0;padding:0}.tags .input{width:100% !important}.row ~ .row,*+*{margin-top:1.5rem}th,td{padding:.5rem 0}dl dt:first-of-type{margin-top:0;padding-top:0}.p-navigation--sidebar{background:#fff}.p-navigation--sidebar .sidebar__content{top:0;padding:1rem}.u-float--none{float:none !important}.u-remove-max-width{max-width:none}.p-navigation--sidebar .sidebar__content{position:relative}.p-contextual-menu__dropdown{display:block}.p-form__controls{margin-top:0;white-space:normal}select{-moz-appearance:none;-webkit-appearance:none;appearance:none;padding-right:2.3rem}maas-obj-field[type="password"]{background:transparent;border:0}.p-list-tree .p-list-tree::after{display:none !important}.editable{padding:.5rem 1rem;border:1px solid transparent}.editable:hover,.editable.editmode{border:1px solid #cdcdcd}.page-header__title-domain{display:inline-block;width:auto;font-size:2.25rem;line-height:1.167}.p-inline-list__item div{display:inline-block}.col-12{width:100%}.errorlist{list-style:none;display:inline-block;margin-left:0}.sidebar__second-level .is-active{background:transparent url("../assets/images/89c10794-remove.svg") top .75rem right 1.5rem no-repeat;background-size:12px}.p-form__control [type='checkbox']{height:auto;min-height:auto}.p-script-expander{border-color:#cdcdcd;border-bottom-style:dotted;border-bottom-width:1px}.p-script-expander__content{overflow:hidden;width:100%;margin-top:0}.p-script-expander__controls{vertical-align:top}.p-contextual-menu__dropdown{width:100%}.p-inline-list--settings .p-inline-list__item{display:inline-block;margin-right:1.5rem}.p-inline-list--settings [type='checkbox']{float:none}.p-inline-list--settings label{display:inline}.p-button--base.is-small{padding:.5rem;margin:0}.p-tooltip__message{margin:0}.u-upper-case--first{text-transform:capitalize}.u-no-wrap{white-space:nowrap}.u-wrap{white-space:normal}table{overflow-x:visible}table tr{padding:0 1rem}a:visited{color:#007aa6}.p-icon{padding-right:.75rem}.p-icon--edit{background-image:url("data:image/svg+xml;charset=UTF-8,%3csvg width='22' height='22' viewBox='0 0 22 22' xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eedit%3c/title%3e%3cg fill='%23666666' fill-rule='evenodd'%3e%3cpath d='M17 15h5v1h-5zm-3 3h8v1h-8zm-3 3h11v1H11zm5.75-21L3.47 13.517S.956 17.465 0 21.987v.004l.002.004V22c4.532-.955 8.48-3.472 8.48-3.472L22 5.25 16.75 0zM4.51 14.555L7.454 17.5c-.2.114-2.99 2.064-5.544 2.602V20.093l-.002-.003c.537-2.546 2.485-5.334 2.602-5.537v.002z'/%3e%3cpath d='M2.234 18l1.85 1.85L1 21'/%3e%3c/g%3e%3c/svg%3e")}[class$="--dark"] .p-icon--edit{background-image:url("data:image/svg+xml;charset=UTF-8,%3csvg width='22' height='22' viewBox='0 0 22 22' xmlns='http://www.w3.org/2000/svg'%3e%3ctitle%3eedit%3c/title%3e%3cg fill='%23CDCDCD' fill-rule='evenodd'%3e%3cpath d='M17 15h5v1h-5zm-3 3h8v1h-8zm-3 3h11v1H11zm5.75-21L3.47 13.517S.956 17.465 0 21.987v.004l.002.004V22c4.532-.955 8.48-3.472 8.48-3.472L22 5.25 16.75 0zM4.51 14.555L7.454 17.5c-.2.114-2.99 2.064-5.544 2.602V20.093l-.002-.003c.537-2.546 2.485-5.334 2.602-5.537v.002z'/%3e%3cpath d='M2.234 18l1.85 1.85L1 21'/%3e%3c/g%3e%3c/svg%3e")}.p-icon--status-failed{background:url('data:image/svg+xml;utf8,%3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%23C7162B" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%23C7162B" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--status-in-progress{background:url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%23335280" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%23335280" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--status-queued{background:url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%23666666" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%23666666" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--status-succeeded{background:url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%230E8420" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%230E8420" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--status-waiting{background:url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%23F99B11" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%23F99B11" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--timed-out{background-image:url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8' standalone='no'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' height='16px' width='16px' version='1.1' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 16 16'%3E%3Ctitle%3Etimed out%3C/title%3E%3Cg id='Page-1' fill-rule='evenodd' fill='none'%3E%3Cg id='smoke-testing-status' transform='translate%28-62 -206%29'%3E%3Cg id='timed-out' transform='translate%2850 191%29'%3E%3Cg transform='translate%2812 15%29'%3E%3Crect id='rect4970' y='0.00002' x='0' height='16' width='16'/%3E%3Ccircle id='circle4972' stroke-width='1.5' cy='8' stroke='%23E95420' cx='8' r='7.25'/%3E%3Cpolyline id='path839' stroke='%23E95420' stroke-width='2' points='11.8 11.8 7.9999 8 7.9999 3'/%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A")}.p-icon--success-muted{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17' viewBox='0 0 17 17'%3E%3Cg transform='translate(1 1)' fill='none' fill-rule='evenodd'%3E%3Ccircle stroke='%23CDCDCD' stroke-width='1.5' fill='%23CDCDCD' cx='7.25001' cy='7.25001' r='7.25001'/%3E%3Cpath fill='%23fff' d='M11.0503 4.17345l-.0659.0577-4.73475 4.14722-2.77557-2.38094-.83906.94888 3.61532 3.80373L11.75 4.96278l-.6997-.7893'/%3E%3C/g%3E%3C/svg%3E")}.p-icon--locked{background-image:url("data:image/svg+xml,%3Csvg width='16px' height='16px' viewBox='0 0 16 16' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M8,3e-05 C5.7926,3e-05 4,1.79263 4,4.00003 L4,7.00003 L2,7.00003 L2,15.99953 L14,15.99953 L14,7.00003 L12,7.00003 L12,4.00003 C12,1.79263 10.207,3e-05 8,3e-05 L8,0 L8,3e-05 Z M8,1.00003 C9.6706,1.00003 11,2.32933 11,4.00003 L11,7.00003 L5,7.00003 L5,4.00003 C5,2.32933 6.3293,1.00003 8,1.00003 Z M9,9.50003 L9,13.99953 L7,13.99953 L7,9.99953 L9,9.50003 L9,9.50003 Z' id='padlock-icon'%3E%3C/path%3E%3C/defs%3E%3Cg id='padlock-16'%3E%3Cuse id='lock-icon' fill='%23666666' fill-rule='nonzero' xlink:href='%23padlock-icon'%3E%3C/use%3E%3C/g%3E%3C/svg%3E%0A")}.p-icon--status-waiting{background:url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%23666666" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%23666666" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--status-succeeded{background:url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%230E8420" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%230E8420" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--status-queued{background:url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%23CDCDCD" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%23CDCDCD" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--status-in-progress{background:url('data:image/svg+xml;utf8, %3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%23335280" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%23335280" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--status-failed{background:url('data:image/svg+xml;utf8,%3Csvg width="16px" height="16px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"%3E%3Cg id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"%3E%3Cg id="status-queued" transform="translate(1, 1)"%3E%3Cg id="Page-1"%3E%3Cg id="status-queued"%3E%3Cg id="Group"%3E%3Ccircle id="Oval" stroke="%23C7162B" stroke-width="2" cx="6" cy="6" r="6"%3E%3C/circle%3E%3Ccircle id="Oval-Copy" class="status-circle" fill="%23C7162B" cx="6" cy="6" r="4"%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E')}.p-icon--compose-machine{background:url('data:image/svg+xml;utf8,%3Csvg width="149" height="105" viewBox="0 0 149 105" xmlns="http://www.w3.org/2000/svg"%3E%3Ctitle%3Ecompose-machine%3C/title%3E%3Cg fill="none" fill-rule="evenodd"%3E%3Cpath d="M9.746 1.845H37.3c5.98 0 7.723 1.735 7.723 7.68v85.64c0 5.946-1.744 7.68-7.723 7.68H9.746c-5.98 0-7.723-1.734-7.723-7.68V9.525c0-5.945 1.744-7.68 7.723-7.68z" stroke="%23CDCDCD" stroke-width="3"/%3E%3Cpath d="M13.49 86.845c-2.48 0-4.502 2.018-4.502 4.5 0 2.48 2.02 4.5 4.502 4.5 2.48 0 4.498-2.02 4.498-4.5 0-2.482-2.017-4.5-4.498-4.5z" stroke="%23CDCDCD" stroke-width="2"/%3E%3Cpath fill="%23CDCDCD" d="M8.476 8.346v1H38.54v-1M8.436 13.372v1H38.5v-1M8.476 18.346v1H38.54v-1M8.436 23.372v1H38.5v-1"/%3E%3Cg%3E%3Cpath d="M111.746 1.845H139.3c5.98 0 7.723 1.735 7.723 7.68v85.64c0 5.946-1.744 7.68-7.723 7.68h-27.554c-5.98 0-7.723-1.734-7.723-7.68V9.525c0-5.945 1.744-7.68 7.723-7.68z" stroke="%23CDCDCD" stroke-width="3"/%3E%3Cpath d="M115.49 86.845c-2.48 0-4.502 2.018-4.502 4.5 0 2.48 2.02 4.5 4.502 4.5 2.48 0 4.498-2.02 4.498-4.5 0-2.482-2.017-4.5-4.498-4.5z" stroke="%23CDCDCD" stroke-width="2"/%3E%3Cpath fill="%23CDCDCD" d="M110.476 8.346v1h30.065v-1M110.436 13.372v1H140.5v-1M110.476 18.346v1h30.065v-1M110.436 23.372v1H140.5v-1"/%3E%3C/g%3E%3Cg%3E%3Cpath d="M60.746 1.845H88.3c5.98 0 7.723 1.735 7.723 7.68v85.64c0 5.946-1.744 7.68-7.723 7.68H60.746c-5.98 0-7.723-1.734-7.723-7.68V9.525c0-5.945 1.744-7.68 7.723-7.68z" stroke="%23CDCDCD" stroke-width="3"/%3E%3Cpath d="M64.49 86.845c-2.48 0-4.502 2.018-4.502 4.5 0 2.48 2.02 4.5 4.502 4.5 2.48 0 4.498-2.02 4.498-4.5 0-2.482-2.017-4.5-4.498-4.5z" stroke="%23CDCDCD" stroke-width="2"/%3E%3Cpath fill="%23CDCDCD" d="M59.476 8.346v1H89.54v-1M59.436 13.372v1H89.5v-1M59.476 18.346v1H89.54v-1M59.436 23.372v1H89.5v-1"/%3E%3C/g%3E%3C/g%3E%3C/svg%3E');background-size:100% 100%}.p-icon--account{background-imag |
UNIT TESTS
-b resource-pools-2.4 lp:~ack/maas/+git/maas into -b 2.4 lp:~maas-committers/maas
STATUS: SUCCESS 12a087b3814bd1c f9df582fb4
COMMIT: 253923935db8ba6